You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by "abhijit.kulkarni" <ab...@globalcharge.com> on 2014/04/08 14:26:24 UTC

Restlet Route - Output payload truncated

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.

Re: Restlet Route - Output payload truncated

Posted by "abhijit.kulkarni" <ab...@globalcharge.com>.
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.

Re: Restlet Route - Output payload truncated

Posted by Claus Ibsen <cl...@gmail.com>.
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
<ab...@globalcharge.com> 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