eclipse-ee4j / eclipse-ee4j/jersey

Aborting a request with a body of type `List<EntityPart>` makes the response Entity unreadable

Open
#5,932 0 comments 0 reactions 1 assignee Claimed by @jansupol View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.