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 <[email protected]>wrote: > Hi, > > Thanks for replying. > > On Wed, Jan 20, 2010 at 3:28 PM, Willem Jiang <[email protected]>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 <[email protected] >>> >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 >>>> >>>> >>> >> >
