[[xquery-component]]
= XQuery Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-saxon/src/main/docs/xquery-component.adoc
:docTitle: XQuery
:artifactId: camel-saxon
:description: Query and/or transform XML payloads using XQuery and Saxon.
:since: 1.0
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

Camel supports http://www.w3.org/TR/xquery/[XQuery] to allow an
Expression or Predicate to be
used in the DSL or xref:manual::xml-configuration.adoc[Xml
Configuration]. For example you could use XQuery to create an
Predicate in a xref:{eip-vc}:eips:filter-eip.adoc[Message
Filter] or as an Expression for a Recipient List.

== Options

// component options: START
The XQuery component supports 6 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *configuration* (advanced) | To use a custom Saxon configuration |  | Configuration
| *configurationProperties* (advanced) | To set custom Saxon configuration properties |  | Map
| *moduleURIResolver* (advanced) | To use the custom ModuleURIResolver |  | ModuleURIResolver
|===
// component options: END




// endpoint options: START
The XQuery endpoint is configured using URI syntax:

----
xquery:resourceUri
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *resourceUri* | *Required* The name of the template to load from classpath or file system |  | String
|===


=== Query Parameters (34 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *allowStAX* (common) | Whether to allow using StAX mode | false | boolean
| *headerName* (common) | To use a Camel Message header as the input source instead of Message body. |  | String
| *namespacePrefixes* (common) | Allows to control which namespace prefixes to use for a set of namespace mappings |  | Map
| *resultsFormat* (common) | What output result to use. The value can be one of: Bytes, BytesSource, DOM, DOMSource, List, String, StringSource | DOM | ResultFormat
| *resultType* (common) | What output result to use defined as a class |  | Class
| *stripsAllWhiteSpace* (common) | Whether to strip all whitespaces | true | boolean
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *configuration* (advanced) | To use a custom Saxon configuration |  | Configuration
| *configurationProperties* (advanced) | To set custom Saxon configuration properties |  | Map
| *moduleURIResolver* (advanced) | To use the custom ModuleURIResolver |  | ModuleURIResolver
| *parameters* (advanced) | Additional parameters |  | Map
| *properties* (advanced) | Properties to configure the serialization parameters |  | Properties
| *staticQueryContext* (advanced) | To use a custom Saxon StaticQueryContext |  | StaticQueryContext
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. The value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. The value can be one of: none, spring, quartz | none | String
| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. The value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
|===
// endpoint options: END

== Examples

[source,java]
---------------------------
from("queue:foo")
  .filter().xquery("//foo")
    .to("queue:bar")
---------------------------

You can also use functions inside your query, in which case you need an
explicit type conversion (or you will get a org.w3c.dom.DOMException:
HIERARCHY_REQUEST_ERR) by passing the Class as a second argument to the
*xquery()* method.

[source,java]
-----------------------------------------------------------------------------
from("direct:start")
  .recipientList().xquery("concat('mock:foo.', /person/@city)", String.class);
-----------------------------------------------------------------------------

== Variables

The IN message body will be set as the `contextItem`. Besides this these
Variables is also added as parameters:

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Variable |Type |Description

|exchange |Exchange |The current Exchange

|in.body |Object |The In message's body

|out.body |Object |The OUT message's body (if any)

|in.headers.* |Object |You can access the value of exchange.in.headers with key *foo* by using
the variable which name is in.headers.foo

|out.headers.* |Object |You can access the value of exchange.out.headers with key *foo* by using
the variable which name is out.headers.foo variable

|*key name* |Object |Any exchange.properties and exchange.in.headers and any additional
parameters set using `setParameters(Map)`. These parameters is added
with they own key name, for instance if there is an IN header with the
key name *foo* then its added as *foo*.
|=======================================================================

== Using XML configuration

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

[source,xml]
---------------------------------------------------------------------------------------------------------------
<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.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/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!

When you use functions in your XQuery expression you need an explicit
type conversion which is done in the xml configuration via the *@type*
attribute:

[source,xml]
-------------------------------------------------------------------------------
    <xquery type="java.lang.String">concat('mock:foo.', /person/@city)</xquery>
-------------------------------------------------------------------------------

== Using XQuery as transformation

We can do a message translation using transform or setBody in the route,
as shown below:

[source,java]
----------------------------------------
from("direct:start").
   transform().xquery("/people/person");
----------------------------------------

Notice that xquery will use DOMResult by default, so if we want to grab
the value of the person node, using text() we need to tell xquery to use
String as result type, as shown:

[source,java]
-------------------------------------------------------------
from("direct:start").
   transform().xquery("/people/person/text()", String.class);
-------------------------------------------------------------

If you want to use camel variables like headers, you have to explicitly declare them in the xquery expression.
[source,xml]
-------------------------------------------------------------
<transform>
    <xquery>
        declare variable $in.headers.foo external;
        element item {$in.headers.foo}
    </xquery>
</transform>
-------------------------------------------------------------


== Using XQuery as an endpoint

Sometimes an XQuery expression can be quite large; it can essentally be
used for Templating. So you may want to use an
XQuery Endpoint so you can route using XQuery
templates.

The following example shows how to take a message of an ActiveMQ queue
(MyQueue) and transform it using XQuery and send it to MQSeries.

[source,xml]
-------------------------------------------------------------------------
  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <route>
      <from uri="activemq:MyQueue"/>
      <to uri="xquery:com/acme/someTransform.xquery"/>
      <to uri="mqseries:SomeOtherQueue"/>
    </route>
  </camelContext>
-------------------------------------------------------------------------

== Examples

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

[source,java]
----
from("direct:start")
  .filter().xquery("/person[@name='James']")
  .to("mock:result");
----

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

[source,java]
----
Namespaces ns = new Namespaces("c", "http://acme.com/cheese");

from("direct:start")
  .filter().xquery("/c:person[@name='James']", ns)
  .to("mock:result");
----

== Learning XQuery

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

* Mike Kay's http://www.stylusstudio.com/xquery_primer.html[XQuery Primer]
* The W3Schools http://www.w3schools.com/xquery/default.asp[XQuery Tutorial]
* XQuery reference http://www.w3.org/TR/xpath-functions/[XQuery function reference]

== Loading script from external resource

You can externalize the script and have Camel load it from a resource
such as `"classpath:"`, `"file:"`, or `"http:"`. +
 This is done using the following syntax: `"resource:scheme:location"`,
eg to refer to a file on the classpath you can do:

[source,java]
------------------------------------------------------------------------------
.setHeader("myHeader").xquery("resource:classpath:myxquery.txt", String.class)
------------------------------------------------------------------------------

== Dependencies

To use XQuery in your camel routes you need to add the a dependency on
*camel-saxon* which implements the XQuery language.

If you use maven you could just add the following to your pom.xml,
substituting the version number for the latest & greatest release.

[source,xml]
--------------------------------------
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-saxon</artifactId>
  <version>x.x.x</version>
</dependency>
--------------------------------------

include::camel-spring-boot::page$saxon-starter.adoc[]
