Hi,

Thanks for replying.

On Wed, Jan 20, 2010 at 3:28 PM, Willem Jiang <willem.ji...@gmail.com>wrote:

> Hi,
>
> Can you try to set the ID into the message header instead of the message
> body ? In this way you can the Request object back :)
>
>
> >>        <route>
> >>             <from uri="jetty:http://0.0.0.0:8080/endpoint"/>
> >>             <inOnly uri="seda:sendASync"/>
> >>             <setHeader headerName="id">
> >>                  <simple>${id}</simple>
> >>             </setHeader>
>
> >>         </route>
> >>
> >>         <route>
> >>             <from uri="seda:sendASync"/>
> >>             <to uri="bean:myBean"/>
> >>         </route>
>
> You bean's method could
> public String controller(@Header("id")String body, Exchange exchange) ;
>
>
>
The request body contains base64 encoded POST I want.

I can get to the body, url paramters and the ID ok without the intermediate
SEDA route, in the bean I have:


      HttpServletRequest req =
exchange.getIn().getBody(HttpServletRequest.class);

      def corrId = exchange.getIn().getMessageId()

I also can get to the URL (not form encoded) parameters   (e.g. the URL is:
http://0.0.0.0:65503/endpoint?myParam=value) by using:

      def p1 = req?.getParameter('myParam')



It's ony when I introduce the SEDA that the HttpServletRequest no longer
exists,  (I think), and I am unable to obtain the HTTP parameters from the
URL

Perhaps I should be copying the HTTP parameters to Camel message
properties?  That way my bean can be less dependent on the HTTP protocol.

Is that something someone would be able to give me an example of please?  Is
there a built-in way to auto populate Camel message properties with HTTP
properties

Alternatively, sticking with HTTP aware bean,I just get null using:

println exchange.getProperty(Exchange.HTTP_QUERY)
or
println exchange.getIn().getProperty(Exchange.HTTP_QUERY)



Regards
Wayne



> Willem
>
>
> Wayne Keenan wrote:
>
>> Hi,
>>
>> Apologies, I didn't word my previous email very well; what I should have
>> also mentioned for clarity is that if I do this:
>>
>>        <route>
>>            <from uri="jetty:http://0.0.0.0:8080/endpoint"/>
>>            <to uri="bean:myBean"/>
>>            <transform>
>>                <simple>${id}</simple>
>>            </transform>
>>        </route>
>>
>> The same bean is able to obtain the HTTPServletRequest to get the POST
>> data
>> (base64 encoded binary) andthe URL parameters,  however,  if I introduce
>> the
>> SEDA
>> call the same bean can't get the HTTPServletRequest. The salient bean code
>> is:
>>
>>  public String controller(String body, Exchange exchange) {
>>
>>    try {
>>      HttpServletRequest req =
>> exchange.getIn().getBody(HttpServletRequest.class);
>>
>>
>> Regards
>> Wayne
>>
>> On Wed, Jan 20, 2010 at 9:02 AM, Wayne Keenan <wayne.kee...@gmail.com
>> >wrote:
>>
>>  Hi,
>>>
>>> I have a Jetty endpoint that when recieving a message will perform the
>>> processing asynchronously and syncronously return a correlationId so the
>>> client can come back later to another endpoint to see how processsing is
>>> going.
>>>
>>> I found an example on the mailing list of how to pass the HttpSession
>>> object using Java, but I can't seem to find out how
>>> to reference or pass the HttpRequest using SpringDSL.  What I have at the
>>> moment is:
>>>
>>>
>>>        <route>
>>>            <from uri="jetty:http://0.0.0.0:8080/endpoint"/>
>>>            <inOnly uri="seda:sendASync"/>
>>>            <transform>
>>>                <simple>${id}</simple>
>>>            </transform>
>>>        </route>
>>>
>>>        <route>
>>>            <from uri="seda:sendASync"/>
>>>            <to uri="bean:myBean"/>
>>>        </route>
>>>
>>> Is there a way to say 'pass the HTTP stuff through please Mr SEDA'?
>>> Should I really be setting a header property to that of a HTTP Object?
>>>  How
>>> do I obtain it?
>>> Should I architect this differently?
>>>
>>> All the best,
>>> Wayne
>>>
>>>
>>
>

Reply via email to