eclipse-ee4j / eclipse-ee4j/jersey
Aborting a request with a body of type `List<EntityPart>` makes the response Entity unreadable
- Dominant language
- Java
- Stars
- 730
- Forks
- 382
- PR merge metrics
- No merged PRs in 30d
Description
Hello everyone,
following up on #5921, I encountered another issue related to aborting Requests.
While MessageBodyWriters are now able to update headers, aborting a Request with a body of `List`
and trying to read it afterward still does not work.
**Reproducer:** https://github.com/Sola-ris/jersey-abort-update-headers-reproducer
For the reproducer I cherry-picked the changes from https://github.com/eclipse-ee4j/jersey/pull/5923
and https://github.com/eclipse-ee4j/jersey/pull/5926 into the 3.1 branch and built i locally.
**Jersey version:** 3.1.10
**Java version:** 21
**Run reproducer:** `./mvnw clean test`
Stacktrace
jakarta.ws.rs.BadRequestException: HTTP 400 Bad Request
at org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:170)
at org.glassfish.jersey.media.multipart.internal.EntityPartReader.readFrom(EntityPartReader.java:78)
at org.glassfish.jersey.media.multipart.internal.EntityPartReader.readFrom(EntityPartReader.java:48)
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:658)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:618)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:342)
at org.glassfish.jersey.client.InboundJaxrsResponse$2.call(InboundJaxrsResponse.java:104)
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:366)
at org.glassfish.jersey.client.InboundJaxrsResponse.runInScopeIfPossible(InboundJaxrsResponse.java:244)
at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:101)
at org.example.AbortUpdatesHeaderReproducerTest.testAbortUpdatesHeaders(AbortUpdatesHeaderReproducerTest.java:40)
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.jvnet.mimepull.MIMEParsingException: Missing start boundary
at org.jvnet.mimepull.MIMEParser.skipPreamble(MIMEParser.java:288)
at org.jvnet.mimepull.MIMEParser.access$300(MIMEParser.java:38)
at org.jvnet.mimepull.MIMEParser$MIMEEventIterator.next(MIMEParser.java:124)
at org.jvnet.mimepull.MIMEParser$MIMEEventIterator.next(MIMEParser.java:102)
at org.jvnet.mimepull.MIMEMessage.makeProgress(MIMEMessage.java:200)
at org.jvnet.mimepull.MIMEMessage.parseAll(MIMEMessage.java:160)
at org.jvnet.mimepull.MIMEMessage.getAttachments(MIMEMessage.java:86)
at org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.getMimeParts(MultiPartReaderClientSide.java:259)
at org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.readMultiPart(MultiPartReaderClientSide.java:213)
at org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:165)
... 20 more
Also, I just noticed I linked the wrong reproducer in #5921, sorry about that. It should have been https://github.com/Sola-ris/jersey-abort-update-headers-reproducer
Contributor guide
Assessment
This issue has not been assessed yet.