Hi

netty is streaming based, and you also do a wire tap, so the body is
only readable once. You need to turn on stream caching


See this FAQ and its links for more details
http://camel.apache.org/why-is-my-message-body-empty.html

On Sun, Feb 5, 2017 at 2:33 PM, scoutant <[email protected]> wrote:
> Hello,
>
> I'm developping a payment platform and I decided to use Camel EIP 2.18.0 as
> my communication framework. In particular the Netty HTTP4 component. Note
> that I'm new to Camel.
>
> I have a problem using Netty HTTP4 while requesting a simple web service
> published by the European Central Bank to get the last Euro <-> currency
> exchange rates.
> This service can be query with the following URL:
> http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml which returns a
> simple xml file.
>
> The route is configured as follow in my RouteBuilder class (I have added
> traces to see what's going on):
>
>         @Override public void configure() throws Exception {
>
>                 
> from("direct:ecb").wireTap("log:TRACE?showAll=true").process(new
> Processor(){
>                         @Override public void process(Exchange exchange) 
> throws Exception {
>                                 Message message = exchange.getOut();
>                                 message.setHeader(Exchange.HTTP_METHOD, 
> HTTP_METHOD_GET);
>                         }}).to(ECB_WEB_SERVICE).process(new Processor(){
>                                 @Override public void process(Exchange 
> exchange) throws Exception {
>                                String body = 
> exchange.getIn().getBody(String.class);
>                                log (Level.DEBUG, "Body: " + body);
>                                 }
>                         }).end();
>
>         }
>
> And invoked like this (there is no body and no parameter for the requested
> service, I did try with null and empty Object array):
>
>                 ProducerTemplate producer = 
> getContext().createProducerTemplate();
>                 String responseBody = producer.requestBody("direct:ecb", new 
> Object[0],
> String.class);
>
> When I run the service, I obtain this:
>
> ---------------------
> 2017-02-05 13:42:52.578 INFO  - [ECB Eurofxref] Invokes
> netty4-http:http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?traceEnabled=true
>
> 2017-02-05 13:42:52.584 DEBUG - Starting producer: Producer[direct://ecb]
> 2017-02-05 13:42:52.584 DEBUG - Adding to producer cache with key:
> direct://ecb for producer: Producer[direct://ecb]
> 2017-02-05 13:42:52.589 DEBUG - >>>> direct://ecb Exchange[]
> 2017-02-05 13:42:52.597 INFO  - ID-SCO-ASUS-62929-1486298532114-0-2 >>>
> (route12) from(direct://ecb) --> wireTap(log:TRACE?showAll=true) <<<
> Pattern:InOut, Headers:{breadcrumbId=ID-SCO-ASUS-62929-1486298532114-0-1},
> BodyType:Object[], Body:[Ljava.lang.Object;@16aeed18
> 2017-02-05 13:42:52.601 DEBUG - >>>> (wiretap) log:TRACE?showAll=true
> Exchange[]
> 2017-02-05 13:42:52.601 INFO  - ID-SCO-ASUS-62929-1486298532114-0-2 >>>
> (route12) wireTap(log:TRACE?showAll=true) --> Processor@0x7cf7aee <<<
> Pattern:InOut, Headers:{breadcrumbId=ID-SCO-ASUS-62929-1486298532114-0-1},
> BodyType:Object[], Body:[Ljava.lang.Object;@16aeed18
> 2017-02-05 13:42:52.601 DEBUG - Using ComponentResolver:
> org.apache.camel.impl.DefaultComponentResolver@1827a871 to resolve component
> with name: log
> 2017-02-05 13:42:52.601 INFO  - ID-SCO-ASUS-62929-1486298532114-0-2 >>>
> (route12) Processor@0x7cf7aee -->
> http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?traceEnabled=true
> <<< Pattern:InOut, Headers:{CamelHttpMethod=GET}, BodyType:null, Body:[Body
> is null]
> 2017-02-05 13:42:52.602 DEBUG - Lookup Component with name log in registry.
> Found: null
> 2017-02-05 13:42:52.606 DEBUG - >>>>
> http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?traceEnabled=true
> Exchange[ID-SCO-ASUS-62929-1486298532114-0-2]
> 2017-02-05 13:42:52.607 DEBUG - Lookup Component with name log-component in
> registry. Found: null
> 2017-02-05 13:42:52.609 DEBUG - Found component: log via type:
> org.apache.camel.component.log.LogComponent via:
> META-INF/services/org/apache/camel/component/log
> 2017-02-05 13:42:52.616 DEBUG - Registered MBean with ObjectName:
> org.apache.camel:context=camel-1,type=components,name="log"
> 2017-02-05 13:42:52.617 DEBUG - Creating endpoint
> uri=[log://TRACE?showAll=true], path=[TRACE]
> 2017-02-05 13:42:52.621 DEBUG - Configured property: showAll on bean:
> org.apache.camel.processor.DefaultExchangeFormatter@727eece6 with value:
> true
> 2017-02-05 13:42:52.621 DEBUG - log://TRACE?showAll=true converted to
> endpoint: log://TRACE?showAll=true by component:
> org.apache.camel.component.log.LogComponent@7e5c50c7
> 2017-02-05 13:42:52.623 DEBUG - Starting producer:
> Producer[log://TRACE?showAll=true]
> 2017-02-05 13:42:52.624 DEBUG - Adding to producer cache with key:
> log://TRACE?showAll=true for producer: Producer[log://TRACE?showAll=true]
> 2017-02-05 13:42:52.627 DEBUG - >>>> log://TRACE?showAll=true
> Exchange[ID-SCO-ASUS-62929-1486298532114-0-3]
> 2017-02-05 13:42:52.636 INFO  - Exchange[Id:
> ID-SCO-ASUS-62929-1486298532114-0-3, ExchangePattern: InOnly, Properties:
> {CamelCorrelationId=ID-SCO-ASUS-62929-1486298532114-0-2,
> CamelCreatedTimestamp=Sun Feb 05 13:42:52 CET 2017,
> CamelMessageHistory=[DefaultMessageHistory[routeId=route12, node=wireTap7]],
> CamelToEndpoint=log://TRACE?showAll=true}, Headers:
> {breadcrumbId=ID-SCO-ASUS-62929-1486298532114-0-1}, BodyType: Object[],
> Body: [Ljava.lang.Object;@16aeed18, Out: null: ]
> 2017-02-05 13:42:52.716 DEBUG - Created new TCP client bootstrap connecting
> to www.ecb.europa.eu:80 with options: Bootstrap(BootstrapConfig(group:
> NioEventLoopGroup, channelFactory: NioSocketChannel.class, options:
> {SO_KEEPALIVE=true, TCP_NODELAY=true, SO_REUSEADDR=true,
> CONNECT_TIMEOUT_MILLIS=10000}, handler:
> org.apache.camel.component.netty4.http.HttpClientInitializerFactory@5d9ac1e2,
> resolver: io.netty.resolver.DefaultAddressResolverGroup@638049c1))
> 2017-02-05 13:42:52.810 DEBUG - Creating connector to address:
> www.ecb.europa.eu:80
> 2017-02-05 13:42:52.833 DEBUG - Channel: [id: 0x4cc24968,
> L:/192.168.0.1:63371 - R:www.ecb.europa.eu/23.35.120.11:80] writing body:
> DefaultFullHttpRequest(decodeResult: success, version: HTTP/1.1, content:
> UnpooledUnsafeHeapByteBuf(ridx: 0, widx: 0, cap: 0))
> GET
> http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?traceEnabled=true
> HTTP/1.1
> host: www.ecb.europa.eu:-1
> connection: keep-alive
> 2017-02-05 13:42:53.004 DEBUG - Http responseCode: 200
> 2017-02-05 13:42:53.005 INFO  - ID-SCO-ASUS-62929-1486298532114-0-2 >>>
> (route12)
> http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?traceEnabled=true
> --> Processor@0x6f330eb9 <<< Pattern:InOut, Headers:{Accept-Ranges=bytes,
> CamelHttpResponseCode=200, CamelHttpResponseText=OK, Connection=keep-alive,
> Content-Length=1624, Content-Type=text/xml, Date=Sun, 05 Feb 2017 12:42:52
> GMT, ETag="658-547a177fe1400", Last-Modified=Fri, 03 Feb 2017 14:55:12 GMT,
> Server=Apache,
> Set-Cookie=cookie.ECB=!OpO059NiZuQAb+HViMJddZBG69fgZRZzD6T/guUaxnhUmr2gQXmRuF1US8My8Vw7i5YzRz4ZALA7PGw=;
> path=/; Httponly}, BodyType:null, Body:[Body is null]
> 2017-02-05 13:42:53.007 DEBUG - [ECB Eurofxref] hasOut: false
>
> 2017-02-05 13:42:53.010 DEBUG - [ECB Eurofxref] Body: null
>
> 2017-02-05 13:42:53.012 DEBUG - Releasing Netty HttpResonse ByteBuf
> 2017-02-05 13:42:53.014 DEBUG - Stopping producer: Producer[direct://ecb]
> ECB Response from request body: null
>
> -----------------------
>
> I see the GET query and http response OK, but the response body is (always)
> null.
> What I do not understand is why the body is null whereas the response trace
> indicates Content-Length=1624.
>
> Any help will be highly appreciated. I'm stuck on this problem and did not
> find any response on Internet so far.
>
> Many thanks in advance.
>
> Stephane Coutant.
>
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Netty-Http4-client-Null-body-whereas-content-length-0-tp5793490.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to