camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Wayne Keenan <wayne.kee...@gmail.com>
Subject Re: HTTP parameter bug (was passing the HTTPServletRequest from Jetty to a SEDA consumer in Spring DSL)
Date Wed, 20 Jan 2010 20:29:24 GMT
Hi,

I believe I have found the trouble I am having.  I think this bug still
exists in the 2.1.0 release:
http://issues.apache.org/activemq/browse/CAMEL-1806

The docs says from: http://camel.apache.org/jetty.html says:

*Camel also populates all request.parameter and request.headers. For
example, given a client request with the URL,
http://myserver/myserver?orderid=123, the exchange will contain a header
named orderid with the value 123. This feature was introduced in Camel 1.5.*

However, the header parameters are only set for GET, not PUT or POST.

Regards
Wayne


On Wed, Jan 20, 2010 at 4:16 PM, Wayne Keenan <wayne.keenan@gmail.com>wrote:

> Hi,
>
> Thanks for replying.
>
> On Wed, Jan 20, 2010 at 3:28 PM, Willem Jiang <willem.jiang@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.keenan@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
>>>>
>>>>
>>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message