currently I am working with apache camel. In my application I have 2 routes.
The first route contain HTTP as the input, some processes, and WMQ (this WMQ used for write only)
On the second route, I have WMQ (used for read only) for the from tag and some mapping processes.
What I want to do is sending the response from the WMQ on my second route to my HTTP on my first route.
How to do so?
Here is my configuration so far.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" default-init-method="init" xmlns:util="http://www.springframework.org/schema/util" xmlns:osgi="http://www.springframework.org/schema/osgi" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xs http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
<import resource="classpath:/META-INF/spring/components.xml"/>
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<dataFormats>
<xmljson id="xmljson" forceTopLevelObject="true" skipNamespaces="true" removeNamespacePrefixes="true"/>
</dataFormats>
<route>
<from uri="jetty:http://localhost:8888/uebermittleAusweisdaten"/>
<process ref="TransformToXML"/>
<to uri ="xslt:soap-template.xsl"/>
<setHeader headerName="CamelJmsDestinationName">
<constant>queue:///Queue.w?targetClient=1</constant>
</setHeader>
<setHeader headerName="JMS_IBM_Character_Set">
<constant>ISO8859_1</constant>
</setHeader>
<to uri="jms:queue:Queue.w"/>
<inOut uri="mock:result"/>
</route>
<route>
<from uri="jms:queue:queue.r"/>
<marshal ref="xmljson"/>
<setHeader headerName="CamelJmsDestinationName">
<constant>mock:result</constant>
</setHeader>
<to uri="stream:out"/>
</route>
</camelContext>
</beans>
Thanks in advance.
Use the InOut
pattern:
<to uri="jms:queue:LSMH.ZKSEAP.SERVICEBUS" pattern="InOut" />
Using InOut
, Camel will send the reply back to the JMSReplyTo
queue, see the Camel docs for further infos.
A simple setup would look as follows:
<route>
<from uri="direct:start" />
<to uri="jms:myQueue" pattern="InOut" />
<log message="Received body in sending route: ${body}" />
</route>
<route>
<from uri="jms:myQueue" />
<setBody><simple>${body}, World!</simple></setBody>
</route>
Sending Hello
to direct:start
would lead to following log message:
Received body in sending route: Hello, World!