Skip to content

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

@Sola-ris

Description

@Sola-ris

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<EntityPart>
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 #5923
and #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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions