Ich habe einen JAX-RS Webservice, der JPA-Entity-Klassen verwendet. Ich habe eine Ressourcenklasse wie folgt aus:NPE Thrown Marshalling Entity in JAX-RS
@Path("/entity")
public class MyEntityResource
{
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("/{entity}")
public MyEntity getMyEntity(@PathParam("entity") String entity)
{
log.debug("Entering getMyEntity with param: " + entity);
MyEntity entityObject = genericService.find(MyEntity.class, entity);
if (entityObject == null)
{
log.debug("Entity not found.");
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
log.debug("Exiting getMyEntity");
return entityObject;
}
}
Wenn ich den Service und machen Sie einen get Anruf auf das Unternehmen laufen, bekomme ich diesen Fehler:
SEVERE: The response of the WebApplicationException cannot be utilized as the response is already committed. Re-throwing to the HTTP container
javax.ws.rs.WebApplicationException: javax.xml.bind.MarshalException
- with linked exception:
[Exception [EclipseLink-25003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred marshalling the object
Internal Exception: java.lang.NullPointerException]
at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(AbstractRootElementProvider.java:151)
...
<snip>
...
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[Exception [EclipseLink-25003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred marshalling the object
Internal Exception: java.lang.NullPointerException]
at org.eclipse.persistence.jaxb.JAXBMarshaller.marshal(JAXBMarshaller.java:271)
at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(AbstractRootElementProvider.java:171)
at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(AbstractRootElementProvider.java:149)
... 32 more
Caused by: Exception [EclipseLink-25003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred marshalling the object
Internal Exception: java.lang.NullPointerException
at org.eclipse.persistence.exceptions.XMLMarshalException.marshalException(XMLMarshalException.java:76)
at org.eclipse.persistence.oxm.XMLMarshaller.marshal(XMLMarshaller.java:502)
at org.eclipse.persistence.jaxb.JAXBMarshaller.marshal(JAXBMarshaller.java:269)
... 34 more
Caused by: java.lang.NullPointerException
at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:69)
...
<snip>
...
at org.eclipse.persistence.oxm.XMLMarshaller.marshal(XMLMarshaller.java:916)
at org.eclipse.persistence.oxm.XMLMarshaller.marshal(XMLMarshaller.java:468)
... 35 more
Nirgendwo in einem der Stack-Traces sind alle meiner Klassen verwiesen. Außerdem wird die "Exiting getMyEntity"
-Anweisung vor der Ausnahme protokolliert.
Ich habe keine Ahnung, was die NPE wirft oder wie man dies debuggt.
Vor diesem Fehler, ich bekam eine [com.sun.istack.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML:
von meiner JPA (EclipseLink) Entity-Klassen und ich fügte die Annotation MOXy @ XmlInverseReference meiner Kindklasse auf der übergeordneten Getter-Methode.
Haben Sie irgendwelche Gedanken darüber, was diese Ausnahme auslösen könnte?
Darüber hinaus wurde die NPE von einem Timestamp-Feld auf einer Enkelkindklasse/Element verursacht, die Null war. Ich erweiterte XmlAdapter, um Marshalling von Zeitstempeln zu behandeln, und das warf die NPE. – sdoca