You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

XQuery

Camel supports XQuery to allow an Expression or Predicate to be used in the DSL or Xml Configuration. For example you could use XQuery to create an Predicate in a Message Filter or as an Expression for a Recipient List.

To enable XQuery support you need the camel-saxon library to be on your classpath.

From 1.3 of Camel onwards you can use XQuery expressions directly using smart completion in your IDE as follows

from("queue:foo").filter().
  xquery("//foo")).
  to("queue:bar")

In earlier versions of Camel you had to use theXQueryBuilder methods then you can use the xquery() function inside your rules.

import static org.apache.camel.builder.saxon.XQueryBuilder.*;
...
from("queue:foo").
  filter(xquery("//foo")).
  to("queue:bar")

Using XML configuration

If you prefer to configure your routes in your Spring XML file then you can use XPath expressions as follows

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:foo="http://example.com/person"
       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>
        <xquery>/foo:person[@name='James']</xquery>
        <to uri="mqseries:SomeOtherQueue"/>
      </filter>
    </route>
  </camelContext>
</beans>

Notice how we can reuse the namespace prefixes, foo in this case, in the XPath expression for easier namespace based XQuery expressions!

Examples

Here is a simple example using an XQuery expression as a predicate in a Message Filter

Error formatting macro: snippet: java.lang.NullPointerException

This example uses XQuery with namespaces as a predicate in a Message Filter

Error formatting macro: snippet: java.lang.NullPointerException

Learning XQuery

XQuery is a very powerful language for querying, searching, sorting and returning XML. For help learning XQuery try these tutorials

You might also find the XQuery function reference useful

  • No labels