You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by elyrank <el...@liveperson.com> on 2014/10/08 06:30:26 UTC

Re: decoder problem in netty4

I managed to identify the problem:

the first request I sent was a GET request with null body. in the class
org.apache.camel.component.netty4.http.NettyHttpProducer - the method
getRequestBody(Exchange exchange) is creating the actual request object from
the exchange. in it - the method "toNettyRequest" in class
org.apache.camel.component.netty4.http.DefaultNettyHttpBinding checks if the
body is null, and if so - it is creating a DefaultHttpRequest, and not
DefaultHttpFullRequest

when the request reaches the encoder as a result of a writeAndFlush call -
the encoder does not clean its state because of this part of the code:

 if (msg instanceof LastHttpContent) {
    state = ST_INIT;
 }
the DefaultHttpRequest is not instanceof LastHttpContent, so the state
remains ST_CONTENT_NON_CHUNK and the next request will get an
IllegalStateException because the state is not ST_INIT

this bug did not exist in netty-http, it only happened when I moved to use
netty4-http

the workaround is simple - use an empty String ("") as body



--
View this message in context: http://camel.465427.n5.nabble.com/decoder-problem-in-netty4-tp5757370p5757400.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: decoder problem in netty4

Posted by Willem Jiang <wi...@gmail.com>.
It’s a bug of netty4-http, I just assigned the JIRA[1] you created to me.

[1] https://issues.apache.org/jira/browse/CAMEL-7894 

--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem



On October 8, 2014 at 4:07:51 PM, elyrank (elyran@liveperson.com) wrote:
> I managed to identify the problem:
>  
> the first request I sent was a GET request with null body. in the class
> org.apache.camel.component.netty4.http.NettyHttpProducer - the method
> getRequestBody(Exchange exchange) is creating the actual request object from
> the exchange. in it - the method "toNettyRequest" in class
> org.apache.camel.component.netty4.http.DefaultNettyHttpBinding checks if the  
> body is null, and if so - it is creating a DefaultHttpRequest, and not
> DefaultHttpFullRequest
>  
> when the request reaches the encoder as a result of a writeAndFlush call -
> the encoder does not clean its state because of this part of the code:
>  
> if (msg instanceof LastHttpContent) {
> state = ST_INIT;
> }
> the DefaultHttpRequest is not instanceof LastHttpContent, so the state
> remains ST_CONTENT_NON_CHUNK and the next request will get an
> IllegalStateException because the state is not ST_INIT
>  
> this bug did not exist in netty-http, it only happened when I moved to use
> netty4-http
>  
> the workaround is simple - use an empty String ("") as body
>  
>  
>  
> --
> View this message in context: http://camel.465427.n5.nabble.com/decoder-problem-in-netty4-tp5757370p5757400.html  
> Sent from the Camel - Users mailing list archive at Nabble.com.
>