Mam usługę sieciową JAX-RS, która korzysta z klas jednostek JPA. Mam klasy zasobu takiego:Neph Thrown Marshalling Entity w 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;
}
}
Kiedy uruchomić usługę i wykonać połączenia dostać się na podmiot, otrzymuję ten błąd:
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
nigdzie w żadnej z ślady stosu są wszelkie z moich klas wymienionych. Ponadto instrukcja "Exiting getMyEntity"
jest rejestrowana przed wyjątkiem.
Nie mam pojęcia, co rzuca NPE lub jak to debugować.
Przed tym błędem otrzymywałem [com.sun.istack.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML:
z moich klas jednostek JPA (EclipseLink) i dodałem adnotację MOXy @XmlInverseReference do mojej klasy potomnej w metodzie parenter.
Jakieś przemyślenia na temat tego, co może rzucić ten wyjątek?
W związku z powyższym NPE zostało spowodowane z pola Znacznik czasu w klasie/elemencie wnuka, który miał wartość zerową. Rozszerzyłem XmlAdapter, aby obsłużyć zestawienie znaczników czasu, a to rzuciło NPE. – sdoca