Have a look at io.undertow.server.Connectors#ungetRequestBytes(), it
should do what you are after.
Stuart
On Mon, Sep 18, 2017 at 12:50 PM, Steve Hu <stevehu@gmail.com> wrote:
> Thanks Stuart. My bad :( I had a body parser handler in the request/response
> chain in order to do schema validation on body against swagger specification
> and it consumed the body stream on the proxy server. Is there a way I can
> consume the body and put the body stream back so that other downstream
> handler can still parse the body if needed?
>
> Steve
>
> On Mon, Sep 18, 2017 at 1:13 AM, Stuart Douglas <sdouglas@redhat.com> wrote:
>>
>> This looks really odd. It looks like the client request is expecting
>> there to be a request body, however the server request thinks the
>> request is finished and there is no request body available. Is it
>> possible an earlier handler is reading the request body so the proxy
>> handler can't access it?
>>
>> Stuart
>>
>> On Sat, Sep 16, 2017 at 8:37 PM, Steve Hu <stevehu@gmail.com> wrote:
>> > Hi,
>> >
>> > I am trying to build a RESTful reverse proxy in order to wrap up APIs
>> > built
>> > with other Java frameworks or other languages. The codebase is copied
>> > from
>> > the reverse proxy example and I have a tutorial to document the steps to
>> > reproduce the error. I am just wondering if there are anything I missed
>> > or
>> > this is a bug.
>> >
>> > Thanks,
>> >
>> > Steve
>> >
>> > Here the tutorial
>> >
>> > https://networknt.github.io/light-proxy/tutorial/
>> >
>> > And here is the error
>> >
>> > 14:04:03.357 [XNIO-1 I/O-1] ERROR io.undertow.proxy handleFailure -
>> > UT005028: Proxy request to /v1/postData failed
>> > io.undertow.server.TruncatedResponseException: null
>> > at
>> >
>> > io.undertow.client.http.HttpRequestConduit. truncateWrites( HttpRequestConduit.java:711)
>> > at
>> >
>> > io.undertow.conduits.AbstractFixedLengthStreamSinkC onduit.terminateWrites( AbstractFixedLengthStreamSinkC onduit.java:256)
>> > at
>> >
>> > org.xnio.conduits.ConduitStreamSinkChannel. shutdownWrites( ConduitStreamSinkChannel.java: 178)
>> > at
>> >
>> > io.undertow.channels.DetachableStreamSinkChannel. shutdownWrites( DetachableStreamSinkChannel. java:79)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyHandler$ HTTPTrailerChannelListener. handleEvent(ProxyHandler.java: 736)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyHandler$ ProxyAction$1.completed( ProxyHandler.java:628)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyHandler$ ProxyAction$1.completed( ProxyHandler.java:543)
>> > at
>> >
>> > io.undertow.client.http.HttpClientExchange. invokeReadReadyCallback( HttpClientExchange.java:212)
>> > at
>> >
>> > io.undertow.client.http.HttpClientConnection. initiateRequest( HttpClientConnection.java:418)
>> > at
>> >
>> > io.undertow.client.http.HttpClientConnection. sendRequest( HttpClientConnection.java:350)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyHandler$ ProxyAction.run(ProxyHandler. java:543)
>> > at
>> > io.undertow.util.SameThreadExecutor.execute( SameThreadExecutor.java:35)
>> > at
>> >
>> > io.undertow.server.HttpServerExchange.dispatch( HttpServerExchange.java:797)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyHandler$ ProxyClientHandler.completed( ProxyHandler.java:298)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyHandler$ ProxyClientHandler.completed( ProxyHandler.java:272)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyConnectionPool. connectionReady( ProxyConnectionPool.java:338)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyConnectionPool. access$900( ProxyConnectionPool.java:61)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyConnectionPool$2. completed(ProxyConnectionPool. java:286)
>> > at
>> >
>> > io.undertow.server.handlers.proxy.ProxyConnectionPool$2. completed(ProxyConnectionPool. java:273)
>> > at
>> >
>> > io.undertow.client.http.HttpClientProvider. handleConnected( HttpClientProvider.java:156)
>> > at
>> >
>> > io.undertow.client.http.HttpClientProvider.access$000( HttpClientProvider.java:51)
>> > at
>> >
>> > io.undertow.client.http.HttpClientProvider$2. handleEvent( HttpClientProvider.java:127)
>> > at
>> >
>> > io.undertow.client.http.HttpClientProvider$2. handleEvent( HttpClientProvider.java:124)
>> > at
>> > org.xnio.ChannelListeners.invokeChannelListener( ChannelListeners.java:92)
>> > at
>> >
>> > org.xnio.nio.WorkerThread$ConnectHandle.handleReady( WorkerThread.java:326)
>> > at org.xnio.nio.WorkerThread.run(WorkerThread.java:561)
>> > 14:05:03.462 [XNIO-1 I/O-1] ERROR io.undertow.proxy handleFailure -
>> > UT005028: Proxy request to /v1/postData failed
>> > java.io.IOException: UT001000: Connection closed
>> > at
>> >
>> > io.undertow.client.http.HttpClientConnection$ ClientReadListener. handleEvent( HttpClientConnection.java:573)
>> > at
>> >
>> > io.undertow.client.http.HttpClientConnection$ ClientReadListener. handleEvent( HttpClientConnection.java:511)
>> > at
>> > org.xnio.ChannelListeners.invokeChannelListener( ChannelListeners.java:92)
>> > at
>> >
>> > org.xnio.conduits.ReadReadyHandler$ ChannelListenerHandler. readReady(ReadReadyHandler. java:66)
>> > at org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit. java:88)
>> > at org.xnio.nio.WorkerThread.run(WorkerThread.java:561)
>> >
>> >
>> >
>> > _______________________________________________
>> > undertow-dev mailing list
>> > undertow-dev@lists.jboss.org
>> > https://lists.jboss.org/mailman/listinfo/undertow-dev
>
>