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 have an endpoint which returns multipart response and wraps it in RestResponse object. When I use Resteasy Reactive client to access this endpoint, I get an error "Unable to parse multipart response - No delimiter specified". If I change the endpoint to use Uni it works as expected.
Expected behavior
Resteasy client should be able to read content of org.jboss.resteasy.reactive.RestResponse object.
Actual behavior
16:39:07,477 INFO [app] 16:39:06,403 HTTP Request to /file-client/download-multipart failed, error id: 9f5ca61e-dc53-4810-b938-7aeee33591cb-1: io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: Unable to parse multipart response - No delimiter specified
16:39:07,477 INFO [app] at org.jboss.resteasy.reactive.client.impl.multipart.QuarkusMultipartResponseDecoder.<init>(QuarkusMultipartResponseDecoder.java:231)
16:39:07,477 INFO [app] at org.jboss.resteasy.reactive.client.impl.multipart.QuarkusMultipartResponseDecoder.<init>(QuarkusMultipartResponseDecoder.java:173)
16:39:07,478 INFO [app] at org.jboss.resteasy.reactive.client.handlers.ClientSendRequestHandler$4.handle(ClientSendRequestHandler.java:247)
16:39:07,478 INFO [app] at org.jboss.resteasy.reactive.client.handlers.ClientSendRequestHandler$4.handle(ClientSendRequestHandler.java:231)
16:39:07,478 INFO [app] at io.vertx.core.impl.future.FutureImpl$1.onSuccess(FutureImpl.java:91)
16:39:07,479 INFO [app] at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262)
16:39:07,479 INFO [app] at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
16:39:07,479 INFO [app] at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211)
16:39:07,480 INFO [app] at io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23)
16:39:07,480 INFO [app] at io.vertx.core.Promise.complete(Promise.java:66)
16:39:07,480 INFO [app] at io.vertx.core.http.impl.HttpClientRequestImpl.handleResponse(HttpClientRequestImpl.java:346)
16:39:07,481 INFO [app] at io.vertx.core.http.impl.HttpClientRequestBase.handleResponse(HttpClientRequestBase.java:182)
16:39:07,481 INFO [app] at io.vertx.core.http.impl.HttpClientRequestBase.lambda$new$0(HttpClientRequestBase.java:71)
16:39:07,482 INFO [app] at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:55)
16:39:07,482 INFO [app] at io.vertx.core.impl.DuplicatedContext.emit(DuplicatedContext.java:158)
16:39:07,482 INFO [app] at io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.handleHead(Http1xClientConnection.java:626)
16:39:07,483 INFO [app] at io.vertx.core.http.impl.Http1xClientConnection.handleResponseBegin(Http1xClientConnection.java:807)
16:39:07,484 INFO [app] at io.vertx.core.http.impl.Http1xClientConnection.handleHttpMessage(Http1xClientConnection.java:740)
16:39:07,485 INFO [app] at io.vertx.core.http.impl.Http1xClientConnection.handleMessage(Http1xClientConnection.java:715)
16:39:07,485 INFO [app] at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:157)
16:39:07,485 INFO [app] at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:153)
16:39:07,486 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
16:39:07,487 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
16:39:07,487 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
16:39:07,488 INFO [app] at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
16:39:07,488 INFO [app] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:336)
16:39:07,488 INFO [app] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323)
16:39:07,489 INFO [app] at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:444)
16:39:07,489 INFO [app] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:280)
16:39:07,489 INFO [app] at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
16:39:07,490 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
16:39:07,490 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
16:39:07,491 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
16:39:07,492 INFO [app] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
16:39:07,493 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
16:39:07,494 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
16:39:07,495 INFO [app] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
16:39:07,496 INFO [app] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
16:39:07,497 INFO [app] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
16:39:07,498 INFO [app] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
16:39:07,499 INFO [app] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
16:39:07,500 INFO [app] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
16:39:07,500 INFO [app] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
16:39:07,501 INFO [app] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
16:39:07,502 INFO [app] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
16:39:07,503 INFO [app] at java.base/java.lang.Thread.run(Thread.java:829)
16:39:07,505 INFO [app] 16:39:06,405 Request failed: io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: Unable to parse multipart response - No delimiter specified
16:39:07,506 INFO [app] at org.jboss.resteasy.reactive.client.impl.multipart.QuarkusMultipartResponseDecoder.<init>(QuarkusMultipartResponseDecoder.java:231)
16:39:07,510 INFO [app] at org.jboss.resteasy.reactive.client.impl.multipart.QuarkusMultipartResponseDecoder.<init>(QuarkusMultipartResponseDecoder.java:173)
16:39:07,511 INFO [app] at org.jboss.resteasy.reactive.client.handlers.ClientSendRequestHandler$4.handle(ClientSendRequestHandler.java:247)
16:39:07,511 INFO [app] at org.jboss.resteasy.reactive.client.handlers.ClientSendRequestHandler$4.handle(ClientSendRequestHandler.java:231)
16:39:07,512 INFO [app] at io.vertx.core.impl.future.FutureImpl$1.onSuccess(FutureImpl.java:91)
16:39:07,512 INFO [app] at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262)
16:39:07,513 INFO [app] at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
16:39:07,514 INFO [app] at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211)
16:39:07,515 INFO [app] at io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23)
16:39:07,515 INFO [app] at io.vertx.core.Promise.complete(Promise.java:66)
16:39:07,515 INFO [app] at io.vertx.core.http.impl.HttpClientRequestImpl.handleResponse(HttpClientRequestImpl.java:346)
16:39:07,516 INFO [app] at io.vertx.core.http.impl.HttpClientRequestBase.handleResponse(HttpClientRequestBase.java:182)
16:39:07,516 INFO [app] at io.vertx.core.http.impl.HttpClientRequestBase.lambda$new$0(HttpClientRequestBase.java:71)
16:39:07,517 INFO [app] at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:55)
16:39:07,517 INFO [app] at io.vertx.core.impl.DuplicatedContext.emit(DuplicatedContext.java:158)
16:39:07,517 INFO [app] at io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.handleHead(Http1xClientConnection.java:626)
16:39:07,517 INFO [app] at io.vertx.core.http.impl.Http1xClientConnection.handleResponseBegin(Http1xClientConnection.java:807)
16:39:07,518 INFO [app] at io.vertx.core.http.impl.Http1xClientConnection.handleHttpMessage(Http1xClientConnection.java:740)
16:39:07,518 INFO [app] at io.vertx.core.http.impl.Http1xClientConnection.handleMessage(Http1xClientConnection.java:715)
16:39:07,518 INFO [app] at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:157)
16:39:07,519 INFO [app] at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:153)
16:39:07,519 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
16:39:07,520 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
16:39:07,520 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
16:39:07,520 INFO [app] at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
16:39:07,521 INFO [app] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:336)
16:39:07,521 INFO [app] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323)
16:39:07,521 INFO [app] at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:444)
16:39:07,522 INFO [app] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:280)
16:39:07,522 INFO [app] at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
16:39:07,522 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
16:39:07,523 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
16:39:07,523 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
16:39:07,524 INFO [app] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
16:39:07,524 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
16:39:07,525 INFO [app] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
16:39:07,526 INFO [app] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
16:39:07,526 INFO [app] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
16:39:07,527 INFO [app] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
16:39:07,527 INFO [app] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
16:39:07,527 INFO [app] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
16:39:07,528 INFO [app] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
16:39:07,528 INFO [app] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
16:39:07,528 INFO [app] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
16:39:07,529 INFO [app] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
16:39:07,529 INFO [app] at java.base/java.lang.Thread.run(Thread.java:829)
fedinskiy
changed the title
Resteasy client fail with "Unable to parse multipart response" while working with RestResponse class
Resteasy client fails with "Unable to parse multipart response" while working with RestResponse class
Dec 5, 2022
Describe the bug
I have an endpoint which returns multipart response and wraps it in RestResponse object. When I use Resteasy Reactive client to access this endpoint, I get an error "Unable to parse multipart response - No delimiter specified". If I change the endpoint to use Uni it works as expected.
Expected behavior
Resteasy client should be able to read content of org.jboss.resteasy.reactive.RestResponse object.
Actual behavior
How to Reproduce?
git clone -b reproducer/restresponse-file [email protected]:fedinskiy/quarkus-test-suite.git
cd quarkus-test-suite/http/rest-client-reactive
mvn clean verify -Dit.test=LargeFileHandlingIT#downloadMultipart
Commit 098f8053bd5a10c5d6ec018b490631550232de77 provides a version with Uni for a comparision
Output of
uname -a
orver
5.19.11-200.fc36.x86_64
Output of
java -version
11.0.16 temurin
GraalVM version (if different from Java)
No response
Quarkus version or git rev
2.13.4.Final
Build tool (ie. output of
mvnw --version
orgradlew --version
)Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Additional information
Similar bug (but with NPE) was reported before as #24415
The text was updated successfully, but these errors were encountered: