Are you using WS-Addressing or is this an HTTP callback?
On 31 July 2014 07:46, Paul McCulloch <[email protected]> wrote: > I need to use an asynchronous web service from within a route. By asynch I > mean that the remote service will respond immediately to the HTTP request > with an acknowledgement, but the result of the request will be sent later > to an incoming web service. > > I have implemented this via the Request-Reply EIP implemented for JMS, but > I was hoping for a mechanism with less moving parts. I've included routes > to demonstrate the problem & my solution. > > Is there a more elegant solution? > > Paul > > <camelContext trace="false" xmlns=" > http://camel.apache.org/schema/spring"> > <!-- client & server web services, with an asynchronous > server. We use JMS > to utilise the Request Response EIP (which as far as I > can see) can't > be utilised explicitly to wrap http - perhaps as it > is inherently request-response anyway). > Looks like SOAP handles this via WS-Addressing with > the ReplyTo header > --> > <route id="asynch client"> > <from uri="jetty:http://localhost:8888/asynchclient > "/> > <setHeader > headerName="JMSCorrelationID"><simple>${headers.data}</simple></setHeader> > <to > > uri="jms:queue:asynchclient?exchangePattern=InOut&replyTo=asynchClientCallback"/> > <log message="Got Response from asynch server"/> > > </route> > > <route id="asynch client requester"> > <from uri="jms:queue:asynchclient?disableReplyTo=true"/> > <to uri="jetty: > http://localhost:8889/asynchserver?bridgeEndpoint=true" /> > </route> > > <route id="asynch client reciever"> > <from uri="jetty:http://localhost:8888/asynchcallback > "/> > <setHeader > headerName="JMSCorrelationID"><simple>${headers.data}</simple></setHeader> > <inOnly uri="jms:queue:asynchClientCallback"/> > </route> > > <route id="asynch server ack"> > <from uri="jetty:http://localhost:8889/asynchserver > "/> > <wireTap uri="direct:sendResponse"/> > <setBody><simple>OK</simple></setBody> > </route> > > <route id="asynch server response"> > <from uri="direct:sendResponse"/> > <delay><constant>10000</constant></delay> > <setBody><simple>{"data": ${headers.data}, "result": > "Some response for ${headers.data}"}</simple></setBody> > <setHeader > headerName="CamelHttpMethod"><constant>POST</constant></setHeader> > <to uri="jetty: > http://localhost:8888/asynchcallback?bridgeEndpoint=true"/> > </route> > </camelContext> > -- Matt Sicker <[email protected]>
