[[xslt-saxon-component]]
= XSLT Saxon Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
:docTitle: XSLT Saxon
:artifactId: camel-xslt-saxon
:description: Transform XML payloads using an XSLT template using Saxon.
:since: 3.0
:supportLevel: Stable
:component-header: Only producer is supported
:core:

*Since Camel {since}*

*{component-header}*

The XSLT Saxon component allows you to process a message using an
http://www.w3.org/TR/xslt[XSLT] template using Saxon. This can be ideal when using
Templating to generate responses for requests.

== URI format

[source]
----
xslt-saxon:templateName[?options]
----
The URI format contains *templateName*, which can be one of the following:

* the classpath-local URI of the template to invoke

* the complete URL of the remote template. 

You can append query options to the URI in the following format:

*?option=value&option=value&...*

.Example URIs
[options="header"]
|=================================================================
|URI                              |Description     
|xslt-saxon:com/acme/mytransform.xsl|Refers to the file com/acme/mytransform.xsl on the classpath
|xslt-saxon:file:///foo/bar.xsl |Refers to the file /foo/bar.xsl
|xslt-saxon:http://acme.com/cheese/foo.xsl|Refers to the remote http resource
|=================================================================

== Options

// component options: START
The XSLT Saxon component supports 10 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *contentCache* (producer) | Cache for the resource content (the stylesheet file) when it is loaded. If set to false Camel will reload the stylesheet file on each message processing. This is good for development. A cached stylesheet can be forced to reload at runtime via JMX using the clearCachedStylesheet operation. | true | 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
| *saxonConfiguration* (advanced) | To use a custom Saxon configuration |  | Configuration
| *saxonConfigurationProperties* (advanced) | To set custom Saxon configuration properties |  | Map
| *saxonExtensionFunctions* (advanced) | Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separate multiple values to lookup. |  | String
| *transformerFactoryClass* (advanced) | To use a custom XSLT transformer factory, specified as a FQN class name |  | String
| *transformerFactory ConfigurationStrategy* (advanced) | A configuration strategy to apply on freshly created instances of TransformerFactory. |  | TransformerFactoryConfigurationStrategy
| *uriResolver* (advanced) | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. |  | URIResolver
| *uriResolverFactory* (advanced) | To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'. |  | XsltUriResolverFactory
|===
// component options: END


// endpoint options: START
The XSLT Saxon endpoint is configured using URI syntax:

----
xslt-saxon: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* Path to the template. The following is supported by the default URIResolver. You can prefix with: classpath, file, http, ref, or bean. classpath, file and http loads the resource using these protocols (classpath is default). ref will lookup the resource in the registry. bean will call a method on a bean to be used as the resource. For bean you can specify the method name after dot, eg bean:myBean.myMethod |  | String
|===


=== Query Parameters (18 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *allowStAX* (producer) | Whether to allow using StAX as the javax.xml.transform.Source. You can enable this if the XSLT library supports StAX such as the Saxon library (camel-saxon). The Xalan library (default in JVM) does not support StAXSource. | true | boolean
| *contentCache* (producer) | Cache for the resource content (the stylesheet file) when it is loaded. If set to false Camel will reload the stylesheet file on each message processing. This is good for development. A cached stylesheet can be forced to reload at runtime via JMX using the clearCachedStylesheet operation. | true | boolean
| *deleteOutputFile* (producer) | If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange is done processing. For example suppose the output file is a temporary file, then it can be a good idea to delete it after use. | false | boolean
| *failOnNullBody* (producer) | Whether or not to throw an exception if the input body is null. | true | 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
| *output* (producer) | Option to specify which output type to use. Possible values are: string, bytes, DOM, file. The first three options are all in memory based, where as file is streamed directly to a java.io.File. For file you must specify the filename in the IN header with the key Exchange.XSLT_FILE_NAME which is also CamelXsltFileName. Also any paths leading to the filename must be created beforehand, otherwise an exception is thrown at runtime. The value can be one of: string, bytes, DOM, file | string | XsltOutput
| *transformerCacheSize* (producer) | The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer(). | 0 | int
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *entityResolver* (advanced) | To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource. |  | EntityResolver
| *errorListener* (advanced) | Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exchange as properties is not in use. So only use this option for special use-cases. |  | ErrorListener
| *resultHandlerFactory* (advanced) | Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types. |  | ResultHandlerFactory
| *saxonConfiguration* (advanced) | To use a custom Saxon configuration |  | Configuration
| *saxonExtensionFunctions* (advanced) | Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separate multiple values to lookup. |  | String
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *transformerFactory* (advanced) | To use a custom XSLT transformer factory |  | TransformerFactory
| *transformerFactoryClass* (advanced) | To use a custom XSLT transformer factory, specified as a FQN class name |  | String
| *transformerFactory ConfigurationStrategy* (advanced) | A configuration strategy to apply on freshly created instances of TransformerFactory. |  | TransformerFactoryConfigurationStrategy
| *uriResolver* (advanced) | To use a custom javax.xml.transform.URIResolver |  | URIResolver
|===
// endpoint options: END


== Using XSLT endpoints

The following format is an example of using an XSLT template to formulate a response for a message for InOut
message exchanges (where there is a `JMSReplyTo` header) 

[source,java]
----
from("activemq:My.Queue").
  to("xslt-saxon:com/acme/mytransform.xsl");
----


If you want to use InOnly and consume the message and send it to another
destination you could use the following route:

[source,java]
----
from("activemq:My.Queue").
  to("xslt:com/acme/mytransform.xsl").
  to("activemq:Another.Queue");
----

== Getting Useable Parameters into the XSLT 

By default, all headers are added as parameters which are then available in
the XSLT. +
To make the parameters useable, you will need to declare them.

[source,xml]
----
<setHeader name="myParam"><constant>42</constant></setHeader>
<to uri="xslt:MyTransform.xsl"/>
----

The parameter also needs to be declared in the top level of the XSLT for it to be
available:

[source,xml]
----
<xsl: ...... >

   <xsl:param name="myParam"/>
  
    <xsl:template ...>
----

== Spring XML versions

To use the above examples in Spring XML you would use something like the following code:

[source,xml]
----
  <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
    <route>
      <from uri="activemq:My.Queue"/>
      <to uri="xslt-saxon:org/apache/camel/spring/processor/example.xsl"/>
      <to uri="activemq:Another.Queue"/>
    </route>
  </camelContext>
----

== Using xsl:include

Camel provides its own implementation of `URIResolver`. This allows
Camel to load included files from the classpath.

For example the include file in the following code will be located relative to the starting endpoint.

[source,xml]
----
<xsl:include href="staff_template.xsl"/>
----

This means that Camel will locate the file in the *classpath* as
*org/apache/camel/component/xslt/staff_template.xsl* +
 
You can use `classpath:` or `file:` to instruct Camel to look either in the classpath or file system. If you omit
the prefix then Camel uses the prefix from the endpoint configuration.
If no prefix is specified in the endpoint configuration, the default is `classpath:`.

You can also refer backwards in the include paths. In the following example, the xsl file will be resolved  under `org/apache/camel/component`.

[source,xml]
----
    <xsl:include href="../staff_other_template.xsl"/>
----


== Using xsl:include and default prefix

Camel will use the prefix from the endpoint configuration as the default prefix.

You can explicitly specify `file:` or `classpath:` loading. The two loading types can be mixed in a XSLT script, if necessary.

== Using Saxon extension functions

Since Saxon 9.2, writing extension functions has been supplemented by a
new mechanism, referred to
as http://www.saxonica.com/html/documentation/extensibility/integratedfunctions[integrated
extension functions] you can now easily use camel as shown in the below example:

[source,java]
----
SimpleRegistry registry = new SimpleRegistry();
registry.put("function1", new MyExtensionFunction1());
registry.put("function2", new MyExtensionFunction2());

CamelContext context = new DefaultCamelContext(registry);
context.addRoutes(new RouteBuilder() {
    @Override
    public void configure() throws Exception {
        from("direct:start")
            .to("xslt-saxon:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2");
    }
});
----


With Spring XML:

[source,xml]
----
<bean id="function1" class="org.apache.camel.component.xslt.extensions.MyExtensionFunction1"/>
<bean id="function2" class="org.apache.camel.component.xslt.extensions.MyExtensionFunction2"/>

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="direct:extensions"/>
    <to uri="xslt-saxon:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2"/>
  </route>
</camelContext>
----


== Dynamic stylesheets

To provide a dynamic stylesheet at runtime you can define a dynamic URI.
See xref:manual:faq:how-to-use-a-dynamic-uri-in-to.adoc[How to use a dynamic URI in
to()] for more information.

== Accessing warnings, errors and fatalErrors from XSLT ErrorListener

Any warning/error or fatalError is stored on
the current Exchange as a property with the
keys `Exchange.XSLT_ERROR`, `Exchange.XSLT_FATAL_ERROR`,
or `Exchange.XSLT_WARNING` which allows end users to get hold of any
errors happening during transformation.

For example in the stylesheet below, we want to terminate if a staff has
an empty dob field. And to include a custom error message using
xsl:message.

[source,xml]
----
<xsl:template match="/">
  <html>
    <body>
      <xsl:for-each select="staff/programmer">
        <p>Name: <xsl:value-of select="name"/><br />
          <xsl:if test="dob=''">
            <xsl:message terminate="yes">Error: DOB is an empty string!</xsl:message>
          </xsl:if>
        </p>
      </xsl:for-each>
    </body>
  </html>
</xsl:template>
----

The exception is stored on the Exchange as a warning with the
key `Exchange.XSLT_WARNING.`

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