JXPath
Camel supports JXPath to allow XPath expressions to be used on beans in an Expression or Predicate to be used in the DSL or Xml Configuration. For example you could use JXPath to create an Predicate in a Message Filter or as an Expression for a Recipient List.
From 1.3 of Camel onwards you can use XPath expressions directly using smart completion in your IDE as follows
from("queue:foo").filter(). jxpath("/in/body/foo"). to("queue:bar")
Syntax
Expression |
Type |
Description |
---|---|---|
this |
Exchange |
the Exchange object |
in |
Message |
the exchange.in message |
out |
Message |
the exchange.out message |
Using XML configuration
If you prefer to configure your routes in your Spring XML file then you can use JXPath expressions as follows
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd"> <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="activemq:MyQueue"/> <filter> <jxpath>in/body/name = 'James'</xpath> <to uri="mqseries:SomeOtherQueue"/> </filter> </route> </camelContext> </beans>
Examples
Here is a simple example using a JXPath expression as a predicate in a Message Filter
JXPath injection
You can use Bean Integration to invoke a method on a bean and use various languages such as JXPath to extract a value from the message and bind it to a method parameter.
For example
public class Foo { @MessageDriven(uri = "activemq:my.queue") public void doSomething(@JXPath("in/body/foo") String correlationID, @Body String body) { // process the inbound message here } }