FAQ
Hello,

I need urgent help regarding the output payload of a restlet being
truncated.
I have a route 'ABC' which uses a restlet to accept a valid JSON from its
client (Android App) and calls another route 'XYZ' (using direct-vm
component), which is deployed as part of another bundle. This route 'XYZ'
calls an external URL using http4. At the end the route 'ABC' prepares an
output JSON and sends it back to the caller. For Some reason, somewhere the
content-length header is being set to 5 and hence the caller (Android App)
is able to read only the first 5 characters of a usually successful output
JSON.

Note: I am using camel 2.10.7

Following are the routes that I have written for the reference. (Please
Note: I have removed the references from the route that are not necessary
for this discussion).

<route id="ABC" autoStartup="true">
         <from uri="restlet:/sendAFreeMessage?restletMethods=GET,POST"/>
         <onException useOriginalMessage="true">
   <exception>MyCustomException</exception>
   <handled>
    <constant>true</constant>
   </handled>
   <to uri="bean:myHandlerBeanName?method=generateFailureResponse"/>
   <marshal ref="sendAFreeMsgResponse-to-json"/>
         </onException>
         <unmarshal ref="sendAFreeMsgRequest-to-pojo"/>
          ... Some Bean Endpoints for processing using the POJO (request) in
the Exchange Body have been removed ...
         <choice>
          <when>
           <simple>${property.AGGREGATOR-ID} == '1003'</simple>
           ...Call Separate Route for custom Processing for Brazil ...
           <to uri="direct-vm:brazilSendAFreeMsg" />
          </when>
         </choice>
         <to uri="bean:myHandlerBeanName?method=generateSuccessResponse"/>
         <marshal ref="sendAFreeMsgResponse-to-json"/>
</route>

<route id="XYZ" autoStartup="true">
         <from uri="direct-vm:brazilSendAFreeMsg"/>
         <to uri="bean:anotherHandlerBean?method=generateMsgRequest" />
         ...Call External URL, We override the URI in generateMsgRequest to
correct URI ...
         <to uri="http4:HostName:PortNumber/ContextPath"/>
         <choice>
          <when>
           <simple>${header.camelhttpresponsecode} != '200'</simple>
           ...Some Processing such as making DB entries etc...
          </when>
          <otherwise>
            ...Some Processing such as making DB entries etc...
          </otherwise>
         </choice>
</route>

The Json expected by the client is -

{"successFlag":true,"refId":"3246E17DE60ACA8397FAB16F404A4D44","sendAFreeMessageRequest":{"sessionId":"331259B54EF83A40FCB193A34B21BA3A","freeMsgText":"Free
MSG
Text","userId":"abcdefgh","password":"5FDBB885865E34FA93480A1F935DBF4E0F0BBD092714298DAD81BC61F4DE5888"}}

and what the caller (Android App) sees is -
{"suc

For the reference I am also giving the HTTP request and Response Headers
printed from the caller (Android App) logs.

Request Headers -
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

Response Headers -
Server: Restlet-Framework/2.0.15
Content-Type: text/plain;charset=UTF-8
Content-Length: 5

I think the header Content-Length: 5 is the culprit here, don't know how
this has been set.

Please let me know in case you need any further details. Please Help !

Cheers,
Abhijit



--
View this message in context: http://camel.465427.n5.nabble.com/Restlet-Route-Output-payload-truncated-tp5749948.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Search Discussions

  • Claus Ibsen at Apr 8, 2014 at 12:38 pm
    Hi

    See
    http://camel.apache.org/how-to-remove-the-http-protocol-headers-in-the-camel-message.html

    And you can try removing content length header

    <from uri="restlet:xxx"/>
    <removeHeader headerName="Content-Header"/>

    As it may be from the incoming message

    On Tue, Apr 8, 2014 at 2:26 PM, abhijit.kulkarni
    wrote:
    Hello,

    I need urgent help regarding the output payload of a restlet being
    truncated.
    I have a route 'ABC' which uses a restlet to accept a valid JSON from its
    client (Android App) and calls another route 'XYZ' (using direct-vm
    component), which is deployed as part of another bundle. This route 'XYZ'
    calls an external URL using http4. At the end the route 'ABC' prepares an
    output JSON and sends it back to the caller. For Some reason, somewhere the
    content-length header is being set to 5 and hence the caller (Android App)
    is able to read only the first 5 characters of a usually successful output
    JSON.

    Note: I am using camel 2.10.7

    Following are the routes that I have written for the reference. (Please
    Note: I have removed the references from the route that are not necessary
    for this discussion).

    <route id="ABC" autoStartup="true">
    <from uri="restlet:/sendAFreeMessage?restletMethods=GET,POST"/>
    <onException useOriginalMessage="true">
    <exception>MyCustomException</exception>
    <handled>
    <constant>true</constant>
    </handled>
    <to uri="bean:myHandlerBeanName?method=generateFailureResponse"/>
    <marshal ref="sendAFreeMsgResponse-to-json"/>
    </onException>
    <unmarshal ref="sendAFreeMsgRequest-to-pojo"/>
    ... Some Bean Endpoints for processing using the POJO (request) in
    the Exchange Body have been removed ...
    <choice>
    <when>
    <simple>${property.AGGREGATOR-ID} == '1003'</simple>
    ...Call Separate Route for custom Processing for Brazil ...
    <to uri="direct-vm:brazilSendAFreeMsg" />
    </when>
    </choice>
    <to uri="bean:myHandlerBeanName?method=generateSuccessResponse"/>
    <marshal ref="sendAFreeMsgResponse-to-json"/>
    </route>

    <route id="XYZ" autoStartup="true">
    <from uri="direct-vm:brazilSendAFreeMsg"/>
    <to uri="bean:anotherHandlerBean?method=generateMsgRequest" />
    ...Call External URL, We override the URI in generateMsgRequest to
    correct URI ...
    <to uri="http4:HostName:PortNumber/ContextPath"/>
    <choice>
    <when>
    <simple>${header.camelhttpresponsecode} != '200'</simple>
    ...Some Processing such as making DB entries etc...
    </when>
    <otherwise>
    ...Some Processing such as making DB entries etc...
    </otherwise>
    </choice>
    </route>

    The Json expected by the client is -

    {"successFlag":true,"refId":"3246E17DE60ACA8397FAB16F404A4D44","sendAFreeMessageRequest":{"sessionId":"331259B54EF83A40FCB193A34B21BA3A","freeMsgText":"Free
    MSG
    Text","userId":"abcdefgh","password":"5FDBB885865E34FA93480A1F935DBF4E0F0BBD092714298DAD81BC61F4DE5888"}}

    and what the caller (Android App) sees is -
    {"suc

    For the reference I am also giving the HTTP request and Response Headers
    printed from the caller (Android App) logs.

    Request Headers -
    Content-Type: application/json
    Accept: */*
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: en-US,en;q=0.8

    Response Headers -
    Server: Restlet-Framework/2.0.15
    Content-Type: text/plain;charset=UTF-8
    Content-Length: 5

    I think the header Content-Length: 5 is the culprit here, don't know how
    this has been set.

    Please let me know in case you need any further details. Please Help !

    Cheers,
    Abhijit



    --
    View this message in context: http://camel.465427.n5.nabble.com/Restlet-Route-Output-payload-truncated-tp5749948.html
    Sent from the Camel - Users mailing list archive at Nabble.com.


    --
    Claus Ibsen
    -----------------
    Red Hat, Inc.
    Email: cibsen@redhat.com
    Twitter: davsclaus
    Blog: http://davsclaus.com
    Author of Camel in Action: http://www.manning.com/ibsen
    Make your Camel applications look hawt, try: http://hawt.io
  • Abhijit.kulkarni at Apr 8, 2014 at 1:01 pm
    Thank you very much ! It made my day !!!
    The Header Content-Length was set when the route 'XYZ' called the external
    URL using the http4 component. Basically this external URL returned an ID
    which was 5 character long in its payload.

    I modified the route 'ABC' to remove the header after the route 'XYZ'
    completes or return.

    Thanks once again.

    Cheers,
    Abhijit



    --
    View this message in context: http://camel.465427.n5.nabble.com/Restlet-Route-Output-payload-truncated-tp5749948p5749952.html
    Sent from the Camel - Users mailing list archive at Nabble.com.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupusers @
categoriescamel
postedApr 8, '14 at 12:28p
activeApr 8, '14 at 1:01p
posts3
users2
websitecamel.apache.org

2 users in discussion

Abhijit.kulkarni: 2 posts Claus Ibsen: 1 post

People

Translate

site design / logo © 2021 Grokbase