You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I encountered an issue when aborting a request via ClientRequestContext#abortWith with a Response containing a GenericEntity.
When attempting to serialize the entity in ClientResponse, null is passed as the type parameter, making any MessageBodyWriter that relies on the genericType parameter return false from isWriteable or throw a NullPointerException, depending on how the parameter is accessed.
From looking at it in the debugger, the generic type information seems to be available at that point, either from casting the response parameter
to an OutboundJaxrsResponse and calling .getContext().getEntityType() on it, or from calling the same methods the OutboundJaxrsResponse created here.
Jan 24, 2025 10:08:33 PM org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=text/csv, type=class java.util.Arrays$ArrayList, genericType=null.
Stacktrace
jakarta.ws.rs.client.ResponseProcessingException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/csv, type=class java.util.Arrays$ArrayList, genericType=null.
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:762)
at org.glassfish.jersey.client.JerseyInvocation.lambda$invoke$1(JerseyInvocation.java:687)
at org.glassfish.jersey.client.JerseyInvocation.call(JerseyInvocation.java:709)
at org.glassfish.jersey.client.JerseyInvocation.lambda$runInScope$3(JerseyInvocation.java:703)
at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
at org.glassfish.jersey.internal.Errors.process(Errors.java:205)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:391)
at org.glassfish.jersey.client.JerseyInvocation.runInScope(JerseyInvocation.java:703)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:686)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:422)
at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:318)
at org.example.ReproducerTest.testAbortRequestAndReadGenericEntity(ReproducerTest.java:45)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/csv, type=class java.util.Arrays$ArrayList, genericType=null.
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:224)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1116)
at org.glassfish.jersey.client.ClientResponse$1.read(ClientResponse.java:81)
at java.base/java.io.InputStream.read(InputStream.java:287)
at org.glassfish.jersey.innate.io.InputStreamWrapper.read(InputStreamWrapper.java:55)
at org.glassfish.jersey.innate.io.InputStreamWrapper.read(InputStreamWrapper.java:55)
at org.glassfish.jersey.message.internal.ReaderWriter.readAllBytes(ReaderWriter.java:210)
at org.glassfish.jersey.message.internal.ReaderWriter.readFromAsString(ReaderWriter.java:167)
at org.glassfish.jersey.message.internal.StringMessageProvider.readFrom(StringMessageProvider.java:54)
at org.glassfish.jersey.message.internal.StringMessageProvider.readFrom(StringMessageProvider.java:36)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:236)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:215)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:135)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1072)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:657)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:591)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:298)
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:757)
... 15 more
The text was updated successfully, but these errors were encountered:
Hi everyone,
I encountered an issue when aborting a request via
ClientRequestContext#abortWith
with aResponse
containing aGenericEntity
.When attempting to serialize the entity in ClientResponse,
null
is passed as thetype
parameter, making anyMessageBodyWriter
that relies on thegenericType
parameter returnfalse
fromisWriteable
or throw aNullPointerException
, depending on how the parameter is accessed.From looking at it in the debugger, the generic type information seems to be available at that point, either from casting the
response
parameterto an
OutboundJaxrsResponse
and calling.getContext().getEntityType()
on it, or from calling the same methods theOutboundJaxrsResponse
created here.Jersey version: 3.1.10
Java version: 21
Reproducer: https://github.com/Sola-ris/jersey-abort-with-generic-entity-reproducer
Run reproducer
./mvnw clean test
Error log
Stacktrace
The text was updated successfully, but these errors were encountered: