eclipse-ee4j / eclipse-ee4j/jersey
Jersey Moxy fails to send JSON response with JAXB
- Dominant language
- Java
- Stars
- 730
- Forks
- 382
- PR merge metrics
- No merged PRs in 30d
Description
I have recently upgraded my working environment from Tomcat 8.5, JDK 1.7, Jersey 2.22.1 to Tomcat 9, JDK 10, Jersey 2.30.1 (and use jersey-media-moxy-2.30.1) The REST works fine in most cases except one below, here I get 404/500 error when using application/json (works fine with application/xml)
@GET
@Path("/rest/MyServerStats")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public JAXBElement getServerStatsObject()
throws Exception
{
JAXBElement obj = getStatsObject("Server", "Server1");
return obj;
}
I did some debug tracing and exception mapping so which points issue is in eclipse moxy persistence code.
X-Jersey-Tracing-008: INVOKE [17.62 / 25.48 ms | 52.04 %] Resource [com.ws.rest.Resource @6b5edcf5] method=[public javax.xml.bind.JAXBElement com.ws.rest.Resource.getStatsObject() throws com.ws.rest.MyException]
X-Jersey-Tracing-009: INVOKE [ ---- / 25.60 ms | ---- %] Response: [org.glassfish.jersey.message.internal.OutboundJaxrsResponse @6f615546 <200/SUCCESSFUL|OK|javax.xml.bind.JAXBElement @2a63d6ce>]
X-Jersey-Tracing-010: RESP-FILTER [ 0.00 / 25.87 ms | 0.01 %] Response summary: 0 filters
X-Jersey-Tracing-011: WI [ 0.00 / 25.99 ms | 0.01 %] [org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor @7d5b2f4e #10] BEFORE context.proceed()
X-Jersey-Tracing-012: WI [ 0.01 / 26.02 ms | 0.04 %] [org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor @537c8425 #4100] BEFORE context.proceed()
X-Jersey-Tracing-013: MBW [ ---- / 26.21 ms | ---- %] Find MBW for type=[javax.xml.bind.JAXBElement] genericType=[[sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl @446e2f37]] mediaType=[[org.glassfish.jersey.message.internal.AcceptableMediaType @627353a]] annotations=[@javax.ws.rs.GET(), @javax.ws.rs.Path(value="/stats/DHCPServer"), @javax.ws.rs.Produces(value={"application/xml", "application/json"})]
X-Jersey-Tracing-014: MBW [ ---- / 26.39 ms | ---- %] [org.glassfish.jersey.moxy.json.internal.ConfigurableMoxyJsonProvider @2e088452] IS writeable
X-Jersey-Tracing-015: MBW [ 5.95 / 32.40 ms | 17.58 %] WriteTo by [org.glassfish.jersey.moxy.json.internal.ConfigurableMoxyJsonProvider @2e088452]
X-Jersey-Tracing-016: WI [ 0.00 / 32.46 ms | 0.01 %] [org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor @537c8425 #4100] AFTER context.proceed()
X-Jersey-Tracing-017: WI [ 0.00 / 32.47 ms | 0.01 %] [org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor @7d5b2f4e #10] AFTER context.proceed()
X-Jersey-Tracing-018: WI [ 6.52 / 32.48 ms | 19.24 %] WriteTo summary: 2 interceptors
X-Jersey-Tracing-019: EXCEPTION [ 0.40 / 33.01 ms | 1.17 %] Exception mapper [com.ws.rest.MyException @55d441ea] maps [javax.ws.rs.WebApplicationException @75fd5b17 <500/SERVER_ERROR|Internal Server Error|-no-entity->] ('HTTP 500 Internal Server Error') to <500/SERVER_ERROR|Internal Server Error>
X-Jersey-Tracing-020: RESP-FILTER [ 0.00 / 33.15 ms | 0.01 %] Response summary: 0 filters
X-Jersey-Tracing-021: WI [ 0.00 / 33.23 ms | 0.01 %] [org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor @7d5b2f4e #10] BEFORE context.proceed()
X-Jersey-Tracing-022: WI [ 0.01 / 33.44 ms | 0.03 %] [org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor @537c8425 #4100] BEFORE context.proceed()
X-Jersey-Tracing-023: MBW [ ---- / 33.53 ms | ---- %] Find MBW for type=[java.lang.String] genericType=[java.lang.String] mediaType=[[org.glassfish.jersey.message.internal.AcceptableMediaType @627353a]] annotations=[]
X-Jersey-Tracing-024: MBW [ ---- / 33.60 ms | ---- %] [org.glassfish.jersey.message.internal.StringMessageProvider @1a19bad6] IS writeable
X-Jersey-Tracing-025: MBW [ 0.18 / 33.79 ms | 0.53 %] WriteTo by [org.glassfish.jersey.message.internal.StringMessageProvider @1a19bad6]
X-Jersey-Tracing-026: WI [ 0.00 / 33.83 ms | 0.00 %] [org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor @537c8425 #4100] AFTER context.proceed()
X-Jersey-Tracing-027: WI [ 0.00 / 33.85 ms | 0.00 %] [org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor @7d5b2f4e #10] AFTER context.proceed()
X-Jersey-Tracing-028: WI [ 0.64 / 33.85 ms | 1.88 %] WriteTo summary: 2 interceptors
X-Jersey-Tracing-029: FINISHED [ ---- / 33.87 ms | ---- %] Response status: 500/SERVER_ERROR|Internal Server Error
Exception in moxy
org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.writeTo(MOXyJsonProvider.java:978)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:242)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:227)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:85)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:61)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1116)
Contributor guide
Assessment
This issue has not been assessed yet.