[camel] branch saxon created (now ec6cd95)

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[camel] branch saxon created (now ec6cd95)

davsclaus-2
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a change to branch saxon
in repository https://gitbox.apache.org/repos/asf/camel.git.


      at ec6cd95  CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt

This branch includes the following new commits:

     new aa751c1  CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt
     new 69ef57a  CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt
     new 42246cb  CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt
     new 129e940  CAMEL-14167: Avoid using deprecated api in saxon
     new ec6cd95  CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Reply | Threaded
Open this post in threaded view
|

[camel] 01/05: CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt

davsclaus-2
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch saxon
in repository https://gitbox.apache.org/repos/asf/camel.git

commit aa751c1edcca36bbe25411626c8456d84186808f
Author: Claus Ibsen <[hidden email]>
AuthorDate: Thu Nov 14 10:31:53 2019 +0100

    CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt
---
 apache-camel/pom.xml                               |  10 +
 apache-camel/src/main/descriptors/common-bin.xml   |   2 +
 components/camel-saxon/pom.xml                     |   2 +-
 .../camel/builder/XsltAggregationStrategyTest.java |  11 +-
 .../xslt/PayloadWithDefaultNamespaceTest.java      |   2 +-
 .../component/xslt/SaxonInvalidXsltFileTest.java   |   2 +-
 .../xslt/SaxonXslIncludeEmptyHrefTest.java         |   2 +-
 .../xslt/SaxonXsltComponentConfigurationTest.java  |   6 +-
 .../camel/component/xslt/SaxonXsltDTDTest.java     |   9 +-
 .../xslt/SaxonXsltEndpointConfigurationTest.java   |  10 +-
 .../component/xslt/SaxonXsltFeatureRouteTest.java  |   4 +-
 .../xslt/SaxonXsltMessageTerminateTest.java        |   2 +-
 .../component/xslt/XsltRouteAllowStAXTest.java     |  87 ++++++++
 .../extensions/SaxonExtensionFunctionsTest.java    |   2 +-
 .../xslt/SaxonXsltComponentConfigurationTest.xml   |   5 +-
 .../xslt/SaxonXsltEndpointConfigurationTest.xml    |   2 +-
 .../camel/component/xslt/camelXsltContext.xml      |   2 +-
 .../component/xslt/extensions/camelXsltContext.xml |   2 +-
 .../{camel-saxon => camel-xslt-saxon}/pom.xml      |  45 +---
 .../src/main/docs/xslt-saxon-component.adoc}       |  93 ++++----
 .../saxon/SaxonXmlSourceHandlerFactoryImpl.java    |  43 ++++
 .../xslt/saxon/XsltSaxonAggregationStrategy.java   |  28 +--
 .../component/xslt/saxon/XsltSaxonBuilder.java     |  59 +++++
 .../component/xslt/saxon/XsltSaxonComponent.java   | 104 +++++++++
 .../component/xslt/saxon/XsltSaxonEndpoint.java    | 183 ++++++++++++++++
 .../component/xslt/saxon/XsltSaxonHelper.java}     |  12 +-
 .../apache/camel/component/xslt/saxon/MyXPath.java |  40 ++++
 .../xslt/saxon}/SAXSourceLogBodyTest.java          |  19 +-
 .../camel/component/xslt/saxon/TestBean.java       |  22 +-
 .../camel/component/xslt/saxon/XsltSaxonTest.java  |  78 +++++++
 .../src/test/resources/log4j2.properties           |  28 +++
 .../src/test/resources/xslt/common/copy.xsl}       |  30 +--
 .../test/resources/xslt/common/staff_template.xsl  |  56 +++++
 .../src/test/resources/xslt/staff/staff.xml        |  62 ++++++
 .../src/test/resources/xslt/staff/staff.xsl        |  35 +++
 .../src/test/resources/xslt/transform.xsl          |  41 ++++
 .../camel-xslt/src/main/docs/xslt-component.adoc   |  77 +------
 .../xslt/XmlSourceHandlerFactoryImpl.java          |  35 +--
 .../component/xslt/XsltAggregationStrategy.java    |  11 +-
 .../apache/camel/component/xslt/XsltBuilder.java   |  50 ++---
 .../apache/camel/component/xslt/XsltComponent.java |  87 +-------
 .../apache/camel/component/xslt/XsltEndpoint.java  | 106 +--------
 .../xslt/XsltCustomizeEntityResolverTest.java      |   2 +-
 .../apache/camel/component/xslt/XsltDTDTest.java   |   2 +-
 .../apache/camel/component/xslt/XsltSaxonTest.java |  52 -----
 .../endpoint/dsl/XsltEndpointBuilderFactory.java   | 111 ----------
 ...y.java => XsltSaxonEndpointBuilderFactory.java} | 240 ++++++++++-----------
 parent/pom.xml                                     |  10 +
 .../camel-xslt-saxon-starter/pom.xml               |  53 +++++
 .../XsltSaxonComponentAutoConfiguration.java       | 128 +++++++++++
 .../XsltSaxonComponentConfiguration.java}          | 102 ++++-----
 .../src/main/resources/META-INF/LICENSE.txt        | 203 +++++++++++++++++
 .../src/main/resources/META-INF/NOTICE.txt         |  11 +
 .../src/main/resources/META-INF/spring.factories   |  19 ++
 .../src/main/resources/META-INF/spring.provides    |  17 ++
 .../springboot/XsltComponentConfiguration.java     |  56 -----
 platforms/spring-boot/components-starter/pom.xml   |   1 +
 57 files changed, 1588 insertions(+), 925 deletions(-)

diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index 7dc694e..1bfa87c 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -1673,6 +1673,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xslt-saxon</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-xstream</artifactId>
       <version>${project.version}</version>
     </dependency>
@@ -3162,6 +3167,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xslt-saxon-starter</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-xstream-starter</artifactId>
       <version>${project.version}</version>
     </dependency>
diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index a05ad36..ab4a9b4 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -355,6 +355,7 @@
         <include>org.apache.camel:camel-xmpp</include>
         <include>org.apache.camel:camel-xpath</include>
         <include>org.apache.camel:camel-xslt</include>
+        <include>org.apache.camel:camel-xslt-saxon</include>
         <include>org.apache.camel:camel-xstream</include>
         <include>org.apache.camel:camel-yammer</include>
         <include>org.apache.camel:camel-zendesk</include>
@@ -692,6 +693,7 @@
         <include>org.apache.camel:camel-xmpp-starter</include>
         <include>org.apache.camel:camel-xpath-starter</include>
         <include>org.apache.camel:camel-xslt-starter</include>
+        <include>org.apache.camel:camel-xslt-saxon-starter</include>
         <include>org.apache.camel:camel-xstream-starter</include>
         <include>org.apache.camel:camel-yammer-starter</include>
         <include>org.apache.camel:camel-zendesk-starter</include>
diff --git a/components/camel-saxon/pom.xml b/components/camel-saxon/pom.xml
index ffe3e9f..f08ce03e 100644
--- a/components/camel-saxon/pom.xml
+++ b/components/camel-saxon/pom.xml
@@ -46,7 +46,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-xslt</artifactId>
+            <artifactId>camel-xslt-saxon</artifactId>
         </dependency>
 
         <dependency>
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/builder/XsltAggregationStrategyTest.java b/components/camel-saxon/src/test/java/org/apache/camel/builder/XsltAggregationStrategyTest.java
index 9ff4ef5..3d197e2 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/builder/XsltAggregationStrategyTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/builder/XsltAggregationStrategyTest.java
@@ -17,12 +17,12 @@
 package org.apache.camel.builder;
 
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.xslt.XsltAggregationStrategy;
+import org.apache.camel.component.xslt.saxon.XsltSaxonAggregationStrategy;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
 /**
- * Unit test for the {@link XsltAggregationStrategy}.
+ * Unit test for the {@link XsltSaxonAggregationStrategy}.
  * <p>
  * Need to use Saxon to get a predictable result: We cannot rely on the JDK's XSLT processor as it can vary across
  * platforms and JDK versions. Also, Xalan does not handle node-set properties well.
@@ -58,8 +58,7 @@ public class XsltAggregationStrategyTest extends CamelTestSupport {
             public void configure() throws Exception {
                 from("file:src/test/resources/org/apache/camel/util/toolbox?noop=true&sortBy=file:name&antInclude=*.xml")
                         .routeId("route1").noAutoStartup()
-                        .aggregate(new XsltAggregationStrategy("org/apache/camel/util/toolbox/aggregate.xsl")
-                                .withSaxon())
+                        .aggregate(new XsltSaxonAggregationStrategy("org/apache/camel/util/toolbox/aggregate.xsl"))
                         .constant(true)
                         .completionFromBatchConsumer()
                         .log("after aggregate body: ${body}")
@@ -67,8 +66,8 @@ public class XsltAggregationStrategyTest extends CamelTestSupport {
 
                 from("file:src/test/resources/org/apache/camel/util/toolbox?noop=true&sortBy=file:name&antInclude=*.xml")
                         .routeId("route2").noAutoStartup()
-                        .aggregate(new XsltAggregationStrategy("org/apache/camel/util/toolbox/aggregate-user-property.xsl")
-                                .withSaxon().withPropertyName("user-property"))
+                        .aggregate(new XsltSaxonAggregationStrategy("org/apache/camel/util/toolbox/aggregate-user-property.xsl")
+                                .withPropertyName("user-property"))
                         .constant(true)
                         .completionFromBatchConsumer()
                         .log("after aggregate body: ${body}")
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/PayloadWithDefaultNamespaceTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/PayloadWithDefaultNamespaceTest.java
index d20c308..e47650a 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/PayloadWithDefaultNamespaceTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/PayloadWithDefaultNamespaceTest.java
@@ -28,7 +28,7 @@ public class PayloadWithDefaultNamespaceTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("xslt:org/apache/camel/component/xslt/transform.xsl");
+                from("direct:start").to("xslt-saxon:org/apache/camel/component/xslt/transform.xsl");
             }
         };
     }
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonInvalidXsltFileTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonInvalidXsltFileTest.java
index 3658606..1430b18 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonInvalidXsltFileTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonInvalidXsltFileTest.java
@@ -44,7 +44,7 @@ public class SaxonInvalidXsltFileTest extends TestSupport {
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("seda:a").to("xslt:org/apache/camel/component/xslt/notfound.xsl?transformerFactoryClass=net.sf.saxon.TransformerFactoryImpl");
+                from("seda:a").to("xslt-saxon:org/apache/camel/component/xslt/notfound.xsl?transformerFactoryClass=net.sf.saxon.TransformerFactoryImpl");
             }
         };
     }
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXslIncludeEmptyHrefTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXslIncludeEmptyHrefTest.java
index 0897a8c..c07fa57 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXslIncludeEmptyHrefTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXslIncludeEmptyHrefTest.java
@@ -43,7 +43,7 @@ public class SaxonXslIncludeEmptyHrefTest extends CamelTestSupport {
             @Override
             public void configure() throws Exception {
                 from("direct:start")
-                    .to("xslt:org/apache/camel/component/xslt/transform_includes_data.xsl")
+                    .to("xslt-saxon:org/apache/camel/component/xslt/transform_includes_data.xsl")
                     .to("mock:result");
             }
         };
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltComponentConfigurationTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltComponentConfigurationTest.java
index 38e40a1..d8d1a89 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltComponentConfigurationTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltComponentConfigurationTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.xslt;
 
+import org.apache.camel.component.xslt.saxon.XsltSaxonComponent;
+import org.apache.camel.component.xslt.saxon.XsltSaxonEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -23,8 +25,8 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
 public class SaxonXsltComponentConfigurationTest extends CamelSpringTestSupport {
     @Test
     public void testConfiguration() throws Exception {
-        XsltComponent component = context.getComponent("xslt", XsltComponent.class);
-        XsltEndpoint endpoint = context.getEndpoint("xslt:org/apache/camel/component/xslt/transform.xsl", XsltEndpoint.class);
+        XsltSaxonComponent component = context.getComponent("xslt-saxon", XsltSaxonComponent.class);
+        XsltSaxonEndpoint endpoint = context.getEndpoint("xslt-saxon:org/apache/camel/component/xslt/transform.xsl", XsltSaxonEndpoint.class);
 
         assertNotNull(component.getSaxonConfiguration());
         assertNotNull(component.getSaxonConfigurationProperties());
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java
index 0027c73..5b20908 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java
@@ -64,6 +64,10 @@ public class SaxonXsltDTDTest extends CamelTestSupport {
         endpoint.reset();
         endpoint.expectedMessageCount(1);
         
+        // reset stream before trying again
+        if (message instanceof InputStream) {
+            ((InputStream) message).reset();
+        }
         try {
             template.sendBody("direct:start2", message);
             list = endpoint.getReceivedExchanges();
@@ -71,6 +75,7 @@ public class SaxonXsltDTDTest extends CamelTestSupport {
             xml = exchange.getIn().getBody(String.class);
             assertTrue("Get a wrong transformed message", xml.indexOf("<transformed subject=\"\">") > 0);
         } catch (Exception ex) {
+            ex.printStackTrace();
             // expect an exception here
             assertTrue("Get a wrong exception", ex instanceof CamelExecutionException);
             // the file could not be found
@@ -86,11 +91,11 @@ public class SaxonXsltDTDTest extends CamelTestSupport {
             public void configure() throws Exception {
                 
                 from("direct:start1")
-                    .to("xslt:org/apache/camel/component/xslt/transform_dtd.xsl")
+                    .to("xslt-saxon:org/apache/camel/component/xslt/transform_dtd.xsl")
                     .to("mock:result");
                 
                 from("direct:start2")
-                    .to("xslt:org/apache/camel/component/xslt/transform_dtd.xsl?allowStAX=false")
+                    .to("xslt-saxon:org/apache/camel/component/xslt/transform_dtd.xsl?allowStAX=false")
                     .to("mock:result");
             }
         };
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltEndpointConfigurationTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltEndpointConfigurationTest.java
index 3caf03d..5db5727 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltEndpointConfigurationTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltEndpointConfigurationTest.java
@@ -20,6 +20,8 @@ import java.util.Map;
 
 import net.sf.saxon.Configuration;
 import org.apache.camel.Endpoint;
+import org.apache.camel.component.xslt.saxon.XsltSaxonComponent;
+import org.apache.camel.component.xslt.saxon.XsltSaxonEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -29,15 +31,15 @@ public class SaxonXsltEndpointConfigurationTest extends CamelSpringTestSupport {
     public void testConfiguration() throws Exception {
         Configuration configuration = context.getRegistry().lookupByNameAndType("saxon-configuration", Configuration.class);
         Map<String, Object> properties = context.getRegistry().lookupByNameAndType("saxon-properties", Map.class);
-        XsltComponent component = context.getComponent("xslt", XsltComponent.class);
-        XsltEndpoint endpoint = null;
+        XsltSaxonComponent component = context.getComponent("xslt-saxon", XsltSaxonComponent.class);
+        XsltSaxonEndpoint endpoint = null;
 
         assertNotNull(configuration);
         assertNotNull(properties);
 
         for (Endpoint ep : context.getEndpoints()) {
-            if (ep instanceof XsltEndpoint) {
-                endpoint = (XsltEndpoint)ep;
+            if (ep instanceof XsltSaxonEndpoint) {
+                endpoint = (XsltSaxonEndpoint)ep;
                 break;
             }
         }
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltFeatureRouteTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltFeatureRouteTest.java
index 9315a76..94a9557 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltFeatureRouteTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltFeatureRouteTest.java
@@ -51,11 +51,11 @@ public class SaxonXsltFeatureRouteTest extends CamelTestSupport {
             @Override
             public void configure() throws Exception {
                 from("direct:start1")
-                    .to("xslt:org/apache/camel/component/xslt/transform_text_imported.xsl")
+                    .to("xslt-saxon:org/apache/camel/component/xslt/transform_text_imported.xsl")
                     .to("mock:result");
                 
                 from("direct:start2")
-                    .to("xslt:org/apache/camel/component/xslt/transform_text.xsl")
+                    .to("xslt-saxon:org/apache/camel/component/xslt/transform_text.xsl")
                     .to("mock:result");
             }
         };
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltMessageTerminateTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltMessageTerminateTest.java
index c9fa3b2..36cbebb 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltMessageTerminateTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltMessageTerminateTest.java
@@ -53,7 +53,7 @@ public class SaxonXsltMessageTerminateTest extends CamelTestSupport {
                 errorHandler(deadLetterChannel("mock:dead"));
 
                 from("file:src/test/data/?fileName=terminate.xml&noop=true").routeId("foo").noAutoStartup()
-                    .to("xslt:org/apache/camel/component/xslt/terminate.xsl?saxon=true")
+                    .to("xslt-saxon:org/apache/camel/component/xslt/terminate.xsl")
                     .to("log:foo")
                     .to("mock:result");
             }
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
new file mode 100644
index 0000000..6371d8b
--- /dev/null
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
@@ -0,0 +1,87 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xslt;
+
+import java.util.List;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.xquery.TestBean;
+import org.apache.camel.converter.jaxp.XmlConverter;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.w3c.dom.Document;
+
+public class XsltRouteAllowStAXTest extends CamelTestSupport {
+
+    @BindToRegistry
+    private TestBean testBean = new TestBean();
+
+    @Test
+    public void testSendStringMessage() throws Exception {
+        sendMessageAndHaveItTransformed("<mail><subject>Hey</subject><body>Hello world!</body></mail>");
+    }
+
+    @Test
+    public void testSendBytesMessage() throws Exception {
+        sendMessageAndHaveItTransformed("<mail><subject>Hey</subject><body>Hello world!</body></mail>".getBytes());
+    }
+
+    @Test
+    public void testSendDomMessage() throws Exception {
+        XmlConverter converter = new XmlConverter();
+        Document body = converter.toDOMDocument("<mail><subject>Hey</subject><body>Hello world!</body></mail>", null);
+        sendMessageAndHaveItTransformed(body);
+    }
+
+    private void sendMessageAndHaveItTransformed(Object body) throws Exception {
+        MockEndpoint endpoint = getMockEndpoint("mock:result");
+        endpoint.expectedMessageCount(1);
+
+        template.sendBody("direct:start", body);
+
+        assertMockEndpointsSatisfied();
+
+        List<Exchange> list = endpoint.getReceivedExchanges();
+        Exchange exchange = list.get(0);
+        String xml = exchange.getIn().getBody(String.class);
+
+        assertNotNull("The transformed XML should not be null", xml);
+        assertTrue(xml.indexOf("transformed") > -1);
+        // the cheese tag is in the transform.xsl
+        assertTrue(xml.indexOf("cheese") > -1);
+        assertTrue(xml.indexOf("<subject>Hey</subject>") > -1);
+        assertTrue(xml.indexOf("<body>Hello world!</body>") > -1);
+
+        TestBean bean = context.getRegistry().lookupByNameAndType("testBean", TestBean.class);
+        assertNotNull(bean);
+        assertEquals("bean.subject", "Hey", bean.getSubject());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("xslt-saxon:org/apache/camel/component/xslt/transform.xsl?allowStAX=true").multicast().bean("testBean").to("mock:result");
+            }
+        };
+    }
+
+}
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/SaxonExtensionFunctionsTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/SaxonExtensionFunctionsTest.java
index 8e5889d..c130fbf 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/SaxonExtensionFunctionsTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/SaxonExtensionFunctionsTest.java
@@ -44,7 +44,7 @@ public class SaxonExtensionFunctionsTest extends CamelTestSupport {
             @Override
             public void configure() throws Exception {
                 from("direct:extensions")
-                    .toF("xslt:%s?saxonExtensionFunctions=#function1,#function2", XSLT_PATH)
+                    .toF("xslt-saxon:%s?saxonExtensionFunctions=#function1,#function2", XSLT_PATH)
                         .to("log:org.apache.camel.component.xslt.extensions?level=INFO");
             }
         };
diff --git a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/SaxonXsltComponentConfigurationTest.xml b/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/SaxonXsltComponentConfigurationTest.xml
index ffd7921..b1714ba 100644
--- a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/SaxonXsltComponentConfigurationTest.xml
+++ b/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/SaxonXsltComponentConfigurationTest.xml
@@ -24,8 +24,7 @@
          http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       ">
 
-  <bean id="xslt" class="org.apache.camel.component.xslt.XsltComponent">
-    <property name="saxon" value="true"/>
+  <bean id="xslt-saxon" class="org.apache.camel.component.xslt.saxon.XsltSaxonComponent">
     <property name="saxonConfiguration">
       <bean class="net.sf.saxon.Configuration"/>
     </property>
@@ -40,7 +39,7 @@
   <camelContext xmlns="http://camel.apache.org/schema/spring">
     <route>
       <from uri="direct:start"/>
-      <to uri="xslt:org/apache/camel/component/xslt/transform.xsl"/>
+      <to uri="xslt-saxon:org/apache/camel/component/xslt/transform.xsl"/>
       <multicast>
         <to uri="mock:result"/>
       </multicast>
diff --git a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/SaxonXsltEndpointConfigurationTest.xml b/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/SaxonXsltEndpointConfigurationTest.xml
index 2c0a2ff..3aeee56 100644
--- a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/SaxonXsltEndpointConfigurationTest.xml
+++ b/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/SaxonXsltEndpointConfigurationTest.xml
@@ -36,7 +36,7 @@
   <camelContext xmlns="http://camel.apache.org/schema/spring">
     <route>
       <from uri="direct:start"/>
-      <to uri="xslt:org/apache/camel/component/xslt/transform.xsl?saxon=true&amp;saxonConfiguration=#saxon-configuration&amp;saxonConfigurationProperties=#saxon-properties"/>
+      <to uri="xslt-saxon:org/apache/camel/component/xslt/transform.xsl?saxonConfiguration=#saxon-configuration&amp;saxonConfigurationProperties=#saxon-properties"/>
       <multicast>
         <to uri="mock:result"/>
       </multicast>
diff --git a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/camelXsltContext.xml b/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/camelXsltContext.xml
index c1ca658..78f2478 100644
--- a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/camelXsltContext.xml
+++ b/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/camelXsltContext.xml
@@ -28,7 +28,7 @@
   <camelContext xmlns="http://camel.apache.org/schema/spring">
     <route>
       <from uri="direct:start"/>
-      <to uri="xslt:org/apache/camel/component/xslt/transform.xsl?transformerFactory=#factory"/>
+      <to uri="xslt-saxon:org/apache/camel/component/xslt/transform.xsl?transformerFactory=#factory"/>
       <multicast>
         <to uri="mock:result"/>
       </multicast>
diff --git a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/extensions/camelXsltContext.xml b/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/extensions/camelXsltContext.xml
index f06f71e..85204b5 100644
--- a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/extensions/camelXsltContext.xml
+++ b/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/extensions/camelXsltContext.xml
@@ -28,7 +28,7 @@
   <camelContext xmlns="http://camel.apache.org/schema/spring">
     <route>
       <from uri="direct:extensions"/>
-      <to uri="xslt:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2"/>
+      <to uri="xslt-saxon:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2"/>
       <to uri="log:org.apache.camel.component.xslt.extensions?level=INFO"/>
     </route>
   </camelContext>
diff --git a/components/camel-saxon/pom.xml b/components/camel-xslt-saxon/pom.xml
similarity index 65%
copy from components/camel-saxon/pom.xml
copy to components/camel-xslt-saxon/pom.xml
index ffe3e9f..5ad9aa5 100644
--- a/components/camel-saxon/pom.xml
+++ b/components/camel-xslt-saxon/pom.xml
@@ -18,7 +18,7 @@
 
 -->
 <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -27,37 +27,26 @@
         <version>3.0.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>camel-saxon</artifactId>
+    <artifactId>camel-xslt-saxon</artifactId>
     <packaging>jar</packaging>
-    <name>Camel :: Saxon</name>
-    <description>Camel Saxon (XQuery/XPath) support</description>
 
-    <properties>
-        <camel.osgi.import.additional>
-            net.sf.saxon.*;version="[9.9.0,10)"
-        </camel.osgi.import.additional>
-    </properties>
+    <name>Camel :: XSLT Saxon</name>
+    <description>Camel XSLT Saxon component</description>
 
     <dependencies>
 
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-xpath</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
             <artifactId>camel-xslt</artifactId>
         </dependency>
-
         <dependency>
-            <groupId>net.sf.saxon</groupId>
-            <artifactId>Saxon-HE</artifactId>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-saxon</artifactId>
         </dependency>
 
-        <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-test-spring</artifactId>
+            <artifactId>camel-test</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -75,24 +64,6 @@
             <artifactId>log4j-slf4j-impl</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <forkCount>1</forkCount>
-                    <reuseForks>false</reuseForks>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 
+    </dependencies>
 </project>
diff --git a/components/camel-xslt/src/main/docs/xslt-component.adoc b/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
similarity index 70%
copy from components/camel-xslt/src/main/docs/xslt-component.adoc
copy to components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
index 27636ff..f0fafff 100644
--- a/components/camel-xslt/src/main/docs/xslt-component.adoc
+++ b/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
@@ -1,21 +1,21 @@
-[[xslt-component]]
-= XSLT Component
+[[xslt-saxon-component]]
+= XSLT Saxon Component
 
-*Since Camel 1.3*
+*Since Camel 3.0*
 
 // HEADER START
 *Only producer is supported*
 // HEADER END
 
-The XSLT component allows you to process a message using an
-http://www.w3.org/TR/xslt[XSLT] template. This can be ideal when using
-Templating to generate respopnses for requests.
+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:templateName[?options]
+xslt-saxon:templateName[?options]
 ----
 The URI format contains *templateName*, which can be one of the following:
 
@@ -27,37 +27,31 @@ You can append query options to the URI in the following format:
 
 *?option=value&option=value&...*
 
-Refer to the http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/core/io/DefaultResourceLoader.html[Spring
-Documentation] for more detail of the URI syntax.
-
 .Example URIs
 [options="header"]
 |=================================================================
 |URI                              |Description    
-|xslt:com/acme/mytransform.xsl|Refers to the file com/acme/mytransform.xsl on the classpath
-|xslt:file:///foo/bar.xsl |Refers to the file /foo/bar.xsl
-|xslt:http://acme.com/cheese/foo.xsl|Refers to the remote http resource
+|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
 |=================================================================
 
-The xref:xslt-component.adoc[XSLT] component is provided directly in the camel-core.
-
 == Options
 
 // component options: START
-The XSLT component supports 10 options, which are listed below.
+The XSLT Saxon component supports 9 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *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
-| *uriResolver* (advanced) | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. |  | URIResolver
-| *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
-| *saxon* (producer) | Whether to use Saxon as the transformerFactoryClass. If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath. | false | boolean
 | *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
 | *saxonConfiguration* (advanced) | To use a custom Saxon configuration |  | Object
 | *saxonConfiguration Properties* (advanced) | To set custom Saxon configuration properties |  | Map
+| *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
+| *uriResolver* (advanced) | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. |  | URIResolver
+| *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
 | *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | 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 [...]
 | *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
@@ -66,10 +60,10 @@ The XSLT component supports 10 options, which are listed below.
 
 
 // endpoint options: START
-The XSLT endpoint is configured using URI syntax:
+The XSLT Saxon endpoint is configured using URI syntax:
 
 ----
-xslt:resourceUri
+xslt-saxon:resourceUri
 ----
 
 with the following path and query parameters:
@@ -84,26 +78,25 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (18 parameters):
+=== Query Parameters (17 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. | false | boolean
+| *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
+| *saxonConfiguration* (advanced) | To use a custom Saxon configuration |  | Object
+| *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
 | *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 [...]
 | *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. | string | XsltOutput
-| *saxon* (producer) | Whether to use Saxon as the transformerFactoryClass. If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath. | false | boolean
 | *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 |  | Object
-| *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
@@ -120,43 +113,42 @@ When using Spring Boot make sure to use the following Maven dependency to have s
 ----
 <dependency>
   <groupId>org.apache.camel</groupId>
-  <artifactId>camel-xslt-starter</artifactId>
+  <artifactId>camel-xslt-saxon-starter</artifactId>
   <version>x.x.x</version>
   <!-- use the same version as your Camel core version -->
 </dependency>
 ----
 
 
-The component supports 11 options, which are listed below.
+The component supports 10 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *camel.component.xslt.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
-| *camel.component.xslt.bridge-error-handler* | 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
-| *camel.component.xslt.content-cache* | 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
-| *camel.component.xslt.enabled* | Whether to enable auto configuration of the xslt component. This is enabled by default. |  | Boolean
-| *camel.component.xslt.lazy-start-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  [...]
-| *camel.component.xslt.saxon* | Whether to use Saxon as the transformerFactoryClass. If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath. | false | Boolean
-| *camel.component.xslt.saxon-configuration* | To use a custom Saxon configuration. The option is a java.lang.Object type. |  | String
-| *camel.component.xslt.saxon-configuration-properties* | To set custom Saxon configuration properties |  | Map
-| *camel.component.xslt.saxon-extension-functions* | 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
-| *camel.component.xslt.uri-resolver* | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. The option is a javax.xml.transform.URIResolver type. |  | String
-| *camel.component.xslt.uri-resolver-factory* | To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'. The option is a org.apache.camel.component.xslt.XsltUriResolverFactory type. |  | String
+| *camel.component.xslt-saxon.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
+| *camel.component.xslt-saxon.bridge-error-handler* | 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
+| *camel.component.xslt-saxon.content-cache* | 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
+| *camel.component.xslt-saxon.enabled* | Whether to enable auto configuration of the xslt-saxon component. This is enabled by default. |  | Boolean
+| *camel.component.xslt-saxon.lazy-start-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 [...]
+| *camel.component.xslt-saxon.saxon-configuration* | To use a custom Saxon configuration. The option is a java.lang.Object type. |  | String
+| *camel.component.xslt-saxon.saxon-configuration-properties* | To set custom Saxon configuration properties |  | Map
+| *camel.component.xslt-saxon.saxon-extension-functions* | 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
+| *camel.component.xslt-saxon.uri-resolver* | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. The option is a javax.xml.transform.URIResolver type. |  | String
+| *camel.component.xslt-saxon.uri-resolver-factory* | To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'. The option is a org.apache.camel.component.xslt.XsltUriResolverFactory type. |  | String
 |===
 // spring-boot-auto-configure options: END
 
 == Using XSLT endpoints
 
-The following format is an expample of using an XSLT template to formulate a response for a message for InOut
+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:com/acme/mytransform.xsl");
+  to("xslt-saxon:com/acme/mytransform.xsl");
 ----
 
 
@@ -203,18 +195,12 @@ To use the above examples in Spring XML you would use something like the followi
   <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
     <route>
       <from uri="activemq:My.Queue"/>
-      <to uri="xslt:org/apache/camel/spring/processor/example.xsl"/>
+      <to uri="xslt-saxon:org/apache/camel/spring/processor/example.xsl"/>
       <to uri="activemq:Another.Queue"/>
     </route>
   </camelContext>
 ----
 
-To see an example, look at the
-https://github.com/apache/camel/blob/master/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTest.java[test
-case] along with its
-https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/XsltTest-context.xml[
-Spring XML].
-
 == Using xsl:include
 
 Camel provides its own implementation of `URIResolver`. This allows
@@ -236,7 +222,7 @@ If no prefix is specified in the endpoint configuration, the default is `classpa
 
 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,java]
+[source,xml]
 ----
     <xsl:include href="../staff_other_template.xsl"/>
 ----
@@ -266,7 +252,7 @@ context.addRoutes(new RouteBuilder() {
     @Override
     public void configure() throws Exception {
         from("direct:start")
-            .to("xslt:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2");
+            .to("xslt-saxon:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2");
     }
 });
 ----
@@ -282,7 +268,7 @@ With Spring XML:
 <camelContext xmlns="http://camel.apache.org/schema/spring">
   <route>
     <from uri="direct:extensions"/>
-    <to uri="xslt:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2"/>
+    <to uri="xslt-saxon:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2"/>
   </route>
 </camelContext>
 ----
@@ -296,8 +282,6 @@ to()] for more information.
 
 == Accessing warnings, errors and fatalErrors from XSLT ErrorListener
 
-*Available as of Camel 2.14*
-
 Any warning/error or fatalError is stored on
 the current Exchange as a property with the
 keys `Exchange.XSLT_ERROR`, `Exchange.XSLT_FATAL_ERROR`,
@@ -327,4 +311,3 @@ xsl:message.
 
 The exception is stored on the Exchange as a warning with the
 key `Exchange.XSLT_WARNING.`
-
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/SaxonXmlSourceHandlerFactoryImpl.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/SaxonXmlSourceHandlerFactoryImpl.java
new file mode 100644
index 0000000..c0e0ea4
--- /dev/null
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/SaxonXmlSourceHandlerFactoryImpl.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xslt.saxon;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.stax.StAXSource;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.xslt.XmlSourceHandlerFactoryImpl;
+
+public class SaxonXmlSourceHandlerFactoryImpl extends XmlSourceHandlerFactoryImpl {
+
+    @Override
+    protected Source getSource(Exchange exchange, Object body) {
+        // body may already be a source
+        if (body instanceof Source) {
+            return (Source) body;
+        }
+        Source source = null;
+        if (body != null) {
+            // try StAX if enabled
+            source = exchange.getContext().getTypeConverter().tryConvertTo(StAXSource.class, exchange, body);
+        }
+        if (source == null) {
+            source = super.getSource(exchange, body);
+        }
+        return source;
+    }
+}
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
similarity index 56%
copy from core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
copy to components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
index a99e2cb..e05637c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
@@ -14,23 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.xslt;
+package org.apache.camel.component.xslt.saxon;
 
-import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.xslt.XsltAggregationStrategy;
+import org.apache.camel.component.xslt.XsltBuilder;
 
-/**
- *
- */
-public class XsltRouteAllowStAXTest extends XsltRouteTest {
+public class XsltSaxonAggregationStrategy extends XsltAggregationStrategy {
+
+    public XsltSaxonAggregationStrategy(String xslFileLocation) {
+        super(xslFileLocation);
+        setTransformerFactoryClass(XsltSaxonEndpoint.SAXON_TRANSFORMER_FACTORY_CLASS_NAME);
+    }
 
     @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                from("direct:start").to("xslt:org/apache/camel/component/xslt/transform.xsl?allowStAX=true").multicast().bean("testBean").to("mock:result");
-            }
-        };
+    protected XsltBuilder createXsltBuilder() {
+        XsltSaxonBuilder answer = getCamelContext().getInjector().newInstance(XsltSaxonBuilder.class);
+        answer.setAllowStAX(true);
+        return answer;
     }
 
-}
+}
\ No newline at end of file
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonBuilder.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonBuilder.java
new file mode 100644
index 0000000..b7e96db
--- /dev/null
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonBuilder.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xslt.saxon;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.stax.StAXSource;
+
+import org.apache.camel.component.xslt.XmlSourceHandlerFactoryImpl;
+import org.apache.camel.component.xslt.XsltBuilder;
+import org.apache.camel.support.builder.xml.StAX2SAXSource;
+
+public class XsltSaxonBuilder extends XsltBuilder {
+
+    private boolean allowStAX = true;
+
+    @Override
+    protected Source prepareSource(Source source) {
+        if (!isAllowStAX() && source instanceof StAXSource) {
+            // Always convert StAXSource to SAXSource.
+            // * Xalan and Saxon-B don't support StAXSource.
+            // * The JDK default implementation (XSLTC) doesn't handle CDATA events
+            //   (see com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX).
+            // * Saxon-HE/PE/EE seem to support StAXSource, but don't advertise this
+            //   officially (via TransformerFactory.getFeature(StAXSource.FEATURE))
+            source = new StAX2SAXSource(((StAXSource) source).getXMLStreamReader());
+        }
+        return source;
+    }
+
+    // Properties
+    // -------------------------------------------------------------------------
+
+    public boolean isAllowStAX() {
+        return allowStAX;
+    }
+
+    public void setAllowStAX(boolean allowStAX) {
+        this.allowStAX = allowStAX;
+    }
+
+    @Override
+    protected XmlSourceHandlerFactoryImpl createXmlSourceHandlerFactoryImpl() {
+        return new SaxonXmlSourceHandlerFactoryImpl();
+    }
+}
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonComponent.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonComponent.java
new file mode 100644
index 0000000..4bb0a47
--- /dev/null
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonComponent.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xslt.saxon;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.xslt.XsltComponent;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.EndpointHelper;
+
+/**
+ * The XSLT Component is for performing XSLT transformations of messages using Saxon.
+ */
+@Component("xslt-saxon")
+public class XsltSaxonComponent extends XsltComponent {
+
+    @Metadata(label = "advanced")
+    private Object saxonConfiguration;
+    @Metadata(label = "advanced")
+    private Map<String, Object> saxonConfigurationProperties = new HashMap<>();
+    @Metadata(label = "advanced", javaType = "java.lang.String")
+    private List<Object> saxonExtensionFunctions;
+
+    public List<Object> getSaxonExtensionFunctions() {
+        return saxonExtensionFunctions;
+    }
+
+    /**
+     * 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.
+     */
+    public void setSaxonExtensionFunctions(List<Object> extensionFunctions) {
+        this.saxonExtensionFunctions = extensionFunctions;
+    }
+
+    /**
+     * 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.
+     */
+    public void setSaxonExtensionFunctions(String extensionFunctions) {
+        this.saxonExtensionFunctions = EndpointHelper.resolveReferenceListParameter(
+            getCamelContext(),
+            extensionFunctions,
+            Object.class
+        );
+    }
+
+    public Object getSaxonConfiguration() {
+        return saxonConfiguration;
+    }
+
+    /**
+     * To use a custom Saxon configuration
+     */
+    public void setSaxonConfiguration(Object saxonConfiguration) {
+        this.saxonConfiguration = saxonConfiguration;
+    }
+
+    public Map<String, Object> getSaxonConfigurationProperties() {
+        return saxonConfigurationProperties;
+    }
+
+    /**
+     * To set custom Saxon configuration properties
+     */
+    public void setSaxonConfigurationProperties(Map<String, Object> configurationProperties) {
+        this.saxonConfigurationProperties = configurationProperties;
+    }
+
+    protected XsltSaxonEndpoint createXsltEndpoint(String uri) {
+        return new XsltSaxonEndpoint(uri, this);
+    }
+
+    @Override
+    protected void configureEndpoint(Endpoint endpoint, final String remaining, Map<String, Object> parameters) throws Exception {
+        XsltSaxonEndpoint saxon = (XsltSaxonEndpoint) endpoint;
+        saxon.setContentCache(isContentCache());
+        saxon.setSaxonConfiguration(saxonConfiguration);
+        saxon.setSaxonConfigurationProperties(saxonConfigurationProperties);
+        saxon.setSaxonExtensionFunctions(saxonExtensionFunctions);
+
+        super.configureEndpoint(endpoint, remaining, parameters);
+    }
+}
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java
new file mode 100644
index 0000000..ee7ab45
--- /dev/null
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java
@@ -0,0 +1,183 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xslt.saxon;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.xml.transform.TransformerFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
+import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.component.xslt.XsltEndpoint;
+import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.Injector;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.support.EndpointHelper;
+
+/**
+ * Transforms the message using a XSLT template.
+ */
+@ManagedResource(description = "Managed XsltSaxonEndpoint")
+@UriEndpoint(firstVersion = "3.0.0", scheme = "xslt-saxon", title = "XSLT Saxon", syntax = "xslt-saxon:resourceUri", producerOnly = true, label = "core,transformation")
+public class XsltSaxonEndpoint extends XsltEndpoint {
+    public static final String SAXON_TRANSFORMER_FACTORY_CLASS_NAME = "net.sf.saxon.TransformerFactoryImpl";
+
+    @UriParam(label = "advanced")
+    private Object saxonConfiguration;
+    @Metadata(label = "advanced")
+    private Map<String, Object> saxonConfigurationProperties = new HashMap<>();
+    @UriParam(label = "advanced", javaType = "java.lang.String")
+    private List<Object> saxonExtensionFunctions;
+    @UriParam(displayName = "Allow StAX", defaultValue = "true")
+    private boolean allowStAX = true;
+
+    public XsltSaxonEndpoint(String endpointUri, Component component) {
+        super(endpointUri, component);
+    }
+
+    public List<Object> getSaxonExtensionFunctions() {
+        return saxonExtensionFunctions;
+    }
+
+    /**
+     * 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.
+     */
+    public void setSaxonExtensionFunctions(List<Object> extensionFunctions) {
+        this.saxonExtensionFunctions = extensionFunctions;
+    }
+
+    /**
+     * 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.
+     */
+    public void setSaxonExtensionFunctions(String extensionFunctions) {
+        this.saxonExtensionFunctions = EndpointHelper.resolveReferenceListParameter(
+            getCamelContext(),
+            extensionFunctions,
+            Object.class
+        );
+    }
+
+    public Object getSaxonConfiguration() {
+        return saxonConfiguration;
+    }
+
+    /**
+     * To use a custom Saxon configuration
+     */
+    public void setSaxonConfiguration(Object saxonConfiguration) {
+        this.saxonConfiguration = saxonConfiguration;
+    }
+
+    public Map<String, Object> getSaxonConfigurationProperties() {
+        return saxonConfigurationProperties;
+    }
+
+    /**
+     * To set custom Saxon configuration properties
+     */
+    public void setSaxonConfigurationProperties(Map<String, Object> configurationProperties) {
+        this.saxonConfigurationProperties = configurationProperties;
+    }
+
+    @ManagedAttribute(description = "Whether to allow using StAX as the javax.xml.transform.Source")
+    public boolean isAllowStAX() {
+        return allowStAX;
+    }
+
+    /**
+     * 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.
+     */
+    public void setAllowStAX(boolean allowStAX) {
+        this.allowStAX = allowStAX;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        // the processor is the xslt builder
+        setXslt(createXsltBuilder());
+        setProcessor(getXslt());
+    }
+
+    protected XsltSaxonBuilder createXsltBuilder() throws Exception {
+        final CamelContext ctx = getCamelContext();
+        final ClassResolver resolver = ctx.getClassResolver();
+        final Injector injector = ctx.getInjector();
+
+        log.debug("{} using schema resource: {}", this, getResourceUri());
+
+        final XsltSaxonBuilder xslt = injector.newInstance(XsltSaxonBuilder.class);
+
+        String fc = getTransformerFactoryClass();
+        if (fc == null) {
+            fc = SAXON_TRANSFORMER_FACTORY_CLASS_NAME;
+        }
+
+        TransformerFactory factory = getTransformerFactory();
+        if (factory == null) {
+            // provide the class loader of this component to work in OSGi environments
+            Class<TransformerFactory> factoryClass = resolver.resolveMandatoryClass(fc, TransformerFactory.class, XsltSaxonComponent.class.getClassLoader());
+            log.debug("Using TransformerFactoryClass {}", factoryClass);
+            factory = injector.newInstance(factoryClass);
+
+            XsltSaxonHelper.registerSaxonConfiguration(ctx, factoryClass, factory, saxonConfiguration);
+            XsltSaxonHelper.registerSaxonConfigurationProperties(ctx, factoryClass, factory, saxonConfigurationProperties);
+            XsltSaxonHelper.registerSaxonExtensionFunctions(ctx, factoryClass, factory, saxonExtensionFunctions);
+        }
+
+        if (factory != null) {
+            log.debug("Using TransformerFactory {}", factory);
+            xslt.setTransformerFactory(factory);
+        }
+        if (getResultHandlerFactory() != null) {
+            xslt.setResultHandlerFactory(getResultHandlerFactory());
+        }
+        if (getErrorListener() != null) {
+            xslt.errorListener(getErrorListener());
+        }
+        xslt.setFailOnNullBody(isFailOnNullBody());
+        xslt.transformerCacheSize(getTransformerCacheSize());
+        xslt.setUriResolver(getUriResolver());
+        xslt.setEntityResolver(getEntityResolver());
+        xslt.setAllowStAX(allowStAX);
+        xslt.setDeleteOutputFile(isDeleteOutputFile());
+
+        configureOutput(xslt, getOutput().name());
+
+        // any additional transformer parameters then make a copy to avoid side-effects
+        if (getParameters() != null) {
+            Map<String, Object> copy = new HashMap<>(getParameters());
+            xslt.setParameters(copy);
+        }
+
+        // must load resource first which sets a template and do a stylesheet compilation to catch errors early
+        loadResource(getResourceUri(), xslt);
+
+        return xslt;
+    }
+
+}
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltHelper.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
similarity index 95%
rename from components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltHelper.java
rename to components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
index 3799f27..0a6944d 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltHelper.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.xslt;
+package org.apache.camel.component.xslt.saxon;
 
 import java.lang.reflect.Method;
 import java.util.List;
@@ -27,13 +27,15 @@ import org.apache.camel.CamelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-final class XsltHelper {
-    private static final Logger LOG = LoggerFactory.getLogger(XsltHelper.class);
+final class XsltSaxonHelper {
+    private static final Logger LOG = LoggerFactory.getLogger(XsltSaxonHelper.class);
+
+    // TODO: Avoid dynamic class-loading
 
     private static final String SAXON_CONFIGURATION_CLASS_NAME = "net.sf.saxon.Configuration";
     private static final String SAXON_EXTENDED_FUNCTION_DEFINITION_CLASS_NAME = "net.sf.saxon.lib.ExtensionFunctionDefinition";
 
-    private XsltHelper() {
+    private XsltSaxonHelper() {
     }
 
     public static void registerSaxonConfiguration(
@@ -76,7 +78,7 @@ final class XsltHelper {
                 Object configuration = method.invoke(factory);
                 if (configuration != null) {
                     Class<?> extensionClass = camelContext.getClassResolver().resolveMandatoryClass(
-                        SAXON_EXTENDED_FUNCTION_DEFINITION_CLASS_NAME, XsltComponent.class.getClassLoader()
+                        SAXON_EXTENDED_FUNCTION_DEFINITION_CLASS_NAME, XsltSaxonComponent.class.getClassLoader()
                     );
 
                     method = configuration.getClass().getMethod("registerExtensionFunction", extensionClass);
diff --git a/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/MyXPath.java b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/MyXPath.java
new file mode 100644
index 0000000..6cac607
--- /dev/null
+++ b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/MyXPath.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xslt.saxon;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.w3c.dom.NodeList;
+
+import org.apache.camel.language.xpath.XPathAnnotationExpressionFactory;
+import org.apache.camel.support.language.LanguageAnnotation;
+import org.apache.camel.support.language.NamespacePrefix;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
+@LanguageAnnotation(language = "xpath", factory = XPathAnnotationExpressionFactory.class)
+public @interface MyXPath {
+    String value();
+
+    // You can add the namespaces as the default value of the annotation
+    NamespacePrefix[] namespaces() default {@NamespacePrefix(prefix = "n1", uri = "http://example.org/ns1"), @NamespacePrefix(prefix = "n2", uri = "http://example.org/ns2")};
+
+    Class<?> resultType() default NodeList.class;
+}
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/SAXSourceLogBodyTest.java b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/SAXSourceLogBodyTest.java
similarity index 89%
rename from core/camel-core/src/test/java/org/apache/camel/component/xslt/SAXSourceLogBodyTest.java
rename to components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/SAXSourceLogBodyTest.java
index 2c1865e..86b408c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/xslt/SAXSourceLogBodyTest.java
+++ b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/SAXSourceLogBodyTest.java
@@ -14,28 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.xslt;
+package org.apache.camel.component.xslt.saxon;
 
 import java.io.File;
 import java.io.InputStream;
-
 import javax.xml.transform.sax.SAXSource;
 
-import org.xml.sax.InputSource;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
-
-import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
 
-/**
- *
- */
-public class SAXSourceLogBodyTest extends ContextTestSupport {
+public class SAXSourceLogBodyTest extends CamelTestSupport {
 
     @Test
     public void testSAXSource() throws Exception {
@@ -64,7 +59,7 @@ public class SAXSourceLogBodyTest extends ContextTestSupport {
                     })
                     // The ${body} will toString the body and print it, so we
                     // need to enable stream caching
-                    .log(LoggingLevel.WARN, "${body}").to("xslt:xslt/common/staff_template.xsl").to("log:result").to("mock:result");
+                    .log(LoggingLevel.WARN, "${body}").to("xslt-saxon:xslt/common/staff_template.xsl").to("log:result").to("mock:result");
             }
         };
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/TestBean.java
similarity index 60%
rename from core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
rename to components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/TestBean.java
index a99e2cb..9cbbb87 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
+++ b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/TestBean.java
@@ -14,23 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.xslt;
+package org.apache.camel.component.xslt.saxon;
 
-import org.apache.camel.builder.RouteBuilder;
+public class TestBean {
 
-/**
- *
- */
-public class XsltRouteAllowStAXTest extends XsltRouteTest {
+    private String subject;
 
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                from("direct:start").to("xslt:org/apache/camel/component/xslt/transform.xsl?allowStAX=true").multicast().bean("testBean").to("mock:result");
-            }
-        };
+    public void onMethod(@MyXPath("/*/@subject") String subject) {
+        this.subject = subject;
     }
 
+    public String getSubject() {
+        return subject;
+    }
 }
diff --git a/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java
new file mode 100644
index 0000000..b912a8e
--- /dev/null
+++ b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xslt.saxon;
+
+import java.util.List;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.converter.jaxp.XmlConverter;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.w3c.dom.Document;
+
+public class XsltSaxonTest extends CamelTestSupport {
+
+    @Test
+    public void testSendStringMessage() throws Exception {
+        sendMessageAndHaveItTransformed("<mail><subject>Hey</subject><body>Hello world!</body></mail>");
+    }
+
+    @Test
+    public void testSendBytesMessage() throws Exception {
+        sendMessageAndHaveItTransformed("<mail><subject>Hey</subject><body>Hello world!</body></mail>".getBytes());
+    }
+
+    @Test
+    public void testSendDomMessage() throws Exception {
+        XmlConverter converter = new XmlConverter();
+        Document body = converter.toDOMDocument("<mail><subject>Hey</subject><body>Hello world!</body></mail>", null);
+        sendMessageAndHaveItTransformed(body);
+    }
+
+    private void sendMessageAndHaveItTransformed(Object body) throws Exception {
+        MockEndpoint endpoint = getMockEndpoint("mock:result");
+        endpoint.expectedMessageCount(1);
+
+        template.sendBody("direct:start", body);
+
+        assertMockEndpointsSatisfied();
+
+        List<Exchange> list = endpoint.getReceivedExchanges();
+        Exchange exchange = list.get(0);
+        String xml = exchange.getIn().getBody(String.class);
+
+        assertNotNull("The transformed XML should not be null", xml);
+        assertTrue(xml.indexOf("transformed") > -1);
+        // the cheese tag is in the transform.xsl
+        assertTrue(xml.indexOf("cheese") > -1);
+        assertTrue(xml.indexOf("<subject>Hey</subject>") > -1);
+        assertTrue(xml.indexOf("<body>Hello world!</body>") > -1);
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("direct:start")
+                    .to("xslt-saxon:xslt/transform.xsl")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}
diff --git a/components/camel-xslt-saxon/src/test/resources/log4j2.properties b/components/camel-xslt-saxon/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..e369889
--- /dev/null
+++ b/components/camel-xslt-saxon/src/test/resources/log4j2.properties
@@ -0,0 +1,28 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-xslt-saxon-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = file
diff --git a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/camelXsltContext.xml b/components/camel-xslt-saxon/src/test/resources/xslt/common/copy.xsl
similarity index 51%
copy from components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/camelXsltContext.xml
copy to components/camel-xslt-saxon/src/test/resources/xslt/common/copy.xsl
index c1ca658..4026c34 100644
--- a/components/camel-saxon/src/test/resources/org/apache/camel/component/xslt/camelXsltContext.xml
+++ b/components/camel-xslt-saxon/src/test/resources/xslt/common/copy.xsl
@@ -17,24 +17,14 @@
     limitations under the License.
 
 -->
-<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.xsd
-       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
-    ">
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
-  <!-- START SNIPPET: example -->
-  <camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-      <from uri="direct:start"/>
-      <to uri="xslt:org/apache/camel/component/xslt/transform.xsl?transformerFactory=#factory"/>
-      <multicast>
-        <to uri="mock:result"/>
-      </multicast>
-    </route>
-  </camelContext>
-  <!-- END SNIPPET: example -->
-  
-  <bean id="factory" class="net.sf.saxon.TransformerFactoryImpl"/>
-</beans>
+    <!-- Idiomatic Copy Transformation -->
+    <xsl:template match="@*|node()">
+        <xsl:copy>
+            <xsl:apply-templates select="@*|node()" />
+        </xsl:copy>
+    </xsl:template>
+
+</xsl:stylesheet>
diff --git a/components/camel-xslt-saxon/src/test/resources/xslt/common/staff_template.xsl b/components/camel-xslt-saxon/src/test/resources/xslt/common/staff_template.xsl
new file mode 100644
index 0000000..354afe9
--- /dev/null
+++ b/components/camel-xslt-saxon/src/test/resources/xslt/common/staff_template.xsl
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+    <xsl:template match="staff/programmer">
+        <html>
+            <body>
+                <xsl:apply-templates select="name"/>
+                <xsl:apply-templates select="dob"/>
+                <xsl:apply-templates select="age"/>
+                <br/>
+            </body>
+        </html>
+    </xsl:template>
+
+    <xsl:template match="name">
+        <span style="font-size=22px;">
+            <xsl:value-of select="."/>
+        </span>
+        <br/>
+    </xsl:template>
+
+    <xsl:template match="dob">
+        DOB:
+        <span style="color:blue;">
+            <xsl:value-of select="."/>
+        </span>
+        <br/>
+    </xsl:template>
+
+    <xsl:template match="age">
+        AGE:
+        <span style="color:green;">
+            <xsl:value-of select="."/>
+        </span>
+        <br/>
+    </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/components/camel-xslt-saxon/src/test/resources/xslt/staff/staff.xml b/components/camel-xslt-saxon/src/test/resources/xslt/staff/staff.xml
new file mode 100644
index 0000000..ae7b673
--- /dev/null
+++ b/components/camel-xslt-saxon/src/test/resources/xslt/staff/staff.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<staff>
+
+    <programmer>
+        <name>Bugs Bunny</name>
+        <dob>03/21/1970</dob>
+        <age>31</age>
+        <address>4895 Wabbit Hole Road</address>
+        <phone>865-111-1111</phone>
+    </programmer>
+
+    <programmer>
+        <name>Daisy Duck</name>
+        <dob>08/09/1949</dob>
+        <age>51</age>
+        <address>748 Golden Pond</address>
+        <phone>865-222-2222</phone>
+    </programmer>
+
+    <programmer>
+        <name>Minnie Mouse</name>
+        <dob>04/13/1977</dob>
+        <age>24</age>
+        <address>4064 Cheese Factory Blvd</address>
+        <phone>865-333-3333</phone>
+    </programmer>
+
+    <programmer>
+        <name>Pluto</name>
+        <dob>07/04/1979</dob>
+        <age>21</age>
+        <address>414 Dog Lane</address>
+        <phone>865-333-3333</phone>
+    </programmer>
+
+    <programmer>
+        <name>Road Runner</name>
+        <dob>01/19/1953</dob>
+        <age>48</age>
+        <address>135 Desert View Street</address>
+        <phone>none</phone>
+    </programmer>
+
+</staff>
\ No newline at end of file
diff --git a/components/camel-xslt-saxon/src/test/resources/xslt/staff/staff.xsl b/components/camel-xslt-saxon/src/test/resources/xslt/staff/staff.xsl
new file mode 100644
index 0000000..2dfb4a4
--- /dev/null
+++ b/components/camel-xslt-saxon/src/test/resources/xslt/staff/staff.xsl
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+    <xsl:include href="../common/staff_template.xsl"/>
+
+    <xsl:template match="staff/programmer" priority="2">
+        <html>
+            <body>
+                <xsl:apply-templates select="name"/>
+                <xsl:apply-templates select="dob"/>
+                <xsl:apply-templates select="age"/>
+                <br/>
+            </body>
+        </html>
+    </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/components/camel-xslt-saxon/src/test/resources/xslt/transform.xsl b/components/camel-xslt-saxon/src/test/resources/xslt/transform.xsl
new file mode 100644
index 0000000..5b4c8b8
--- /dev/null
+++ b/components/camel-xslt-saxon/src/test/resources/xslt/transform.xsl
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<xsl:stylesheet
+  xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+  version='1.0'>
+
+  <xsl:output method="xml" indent="yes" encoding="ISO-8859-1"/>
+
+  <xsl:template match="/">
+    <transformed subject="{/mail/subject}">
+      <cheese>
+        <xsl:apply-templates select="*|@*"/>
+      </cheese>
+    </transformed>
+  </xsl:template>
+
+  <xsl:template match="*">
+    <xsl:copy>
+      <xsl:copy-of select="attribute::*"/>
+      <xsl:apply-templates/>
+    </xsl:copy>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/components/camel-xslt/src/main/docs/xslt-component.adoc b/components/camel-xslt/src/main/docs/xslt-component.adoc
index 27636ff..53279e2 100644
--- a/components/camel-xslt/src/main/docs/xslt-component.adoc
+++ b/components/camel-xslt/src/main/docs/xslt-component.adoc
@@ -9,7 +9,7 @@
 
 The XSLT component allows you to process a message using an
 http://www.w3.org/TR/xslt[XSLT] template. This can be ideal when using
-Templating to generate respopnses for requests.
+Templating to generate response for requests.
 
 == URI format
 
@@ -27,9 +27,6 @@ You can append query options to the URI in the following format:
 
 *?option=value&option=value&...*
 
-Refer to the http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/core/io/DefaultResourceLoader.html[Spring
-Documentation] for more detail of the URI syntax.
-
 .Example URIs
 [options="header"]
 |=================================================================
@@ -39,12 +36,10 @@ Documentation] for more detail of the URI syntax.
 |xslt:http://acme.com/cheese/foo.xsl|Refers to the remote http resource
 |=================================================================
 
-The xref:xslt-component.adoc[XSLT] component is provided directly in the camel-core.
-
 == Options
 
 // component options: START
-The XSLT component supports 10 options, which are listed below.
+The XSLT component supports 6 options, which are listed below.
 
 
 
@@ -54,10 +49,6 @@ The XSLT component supports 10 options, which are listed below.
 | *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
 | *uriResolver* (advanced) | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. |  | URIResolver
 | *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
-| *saxon* (producer) | Whether to use Saxon as the transformerFactoryClass. If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath. | false | boolean
-| *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
-| *saxonConfiguration* (advanced) | To use a custom Saxon configuration |  | Object
-| *saxonConfiguration Properties* (advanced) | To set custom Saxon configuration properties |  | Map
 | *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | 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 [...]
 | *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
@@ -84,26 +75,22 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (18 parameters):
+=== Query Parameters (14 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. | false | 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 [...]
 | *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. | string | XsltOutput
-| *saxon* (producer) | Whether to use Saxon as the transformerFactoryClass. If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath. | false | boolean
 | *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 |  | Object
-| *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
@@ -127,7 +114,7 @@ When using Spring Boot make sure to use the following Maven dependency to have s
 ----
 
 
-The component supports 11 options, which are listed below.
+The component supports 7 options, which are listed below.
 
 
 
@@ -139,10 +126,6 @@ The component supports 11 options, which are listed below.
 | *camel.component.xslt.content-cache* | 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
 | *camel.component.xslt.enabled* | Whether to enable auto configuration of the xslt component. This is enabled by default. |  | Boolean
 | *camel.component.xslt.lazy-start-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  [...]
-| *camel.component.xslt.saxon* | Whether to use Saxon as the transformerFactoryClass. If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath. | false | Boolean
-| *camel.component.xslt.saxon-configuration* | To use a custom Saxon configuration. The option is a java.lang.Object type. |  | String
-| *camel.component.xslt.saxon-configuration-properties* | To set custom Saxon configuration properties |  | Map
-| *camel.component.xslt.saxon-extension-functions* | 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
 | *camel.component.xslt.uri-resolver* | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. The option is a javax.xml.transform.URIResolver type. |  | String
 | *camel.component.xslt.uri-resolver-factory* | To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'. The option is a org.apache.camel.component.xslt.XsltUriResolverFactory type. |  | String
 |===
@@ -150,7 +133,7 @@ The component supports 11 options, which are listed below.
 
 == Using XSLT endpoints
 
-The following format is an expample of using an XSLT template to formulate a response for a message for InOut
+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]
@@ -209,12 +192,6 @@ To use the above examples in Spring XML you would use something like the followi
   </camelContext>
 ----
 
-To see an example, look at the
-https://github.com/apache/camel/blob/master/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTest.java[test
-case] along with its
-https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/XsltTest-context.xml[
-Spring XML].
-
 == Using xsl:include
 
 Camel provides its own implementation of `URIResolver`. This allows
@@ -236,7 +213,7 @@ If no prefix is specified in the endpoint configuration, the default is `classpa
 
 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,java]
+[source,xml]
 ----
     <xsl:include href="../staff_other_template.xsl"/>
 ----
@@ -248,46 +225,6 @@ 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: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: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.
@@ -296,8 +233,6 @@ to()] for more information.
 
 == Accessing warnings, errors and fatalErrors from XSLT ErrorListener
 
-*Available as of Camel 2.14*
-
 Any warning/error or fatalError is stored on
 the current Exchange as a property with the
 keys `Exchange.XSLT_ERROR`, `Exchange.XSLT_FATAL_ERROR`,
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XmlSourceHandlerFactoryImpl.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XmlSourceHandlerFactoryImpl.java
index eead2c1..83960bb 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XmlSourceHandlerFactoryImpl.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XmlSourceHandlerFactoryImpl.java
@@ -23,7 +23,6 @@ import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.stax.StAXSource;
 import javax.xml.transform.stream.StreamSource;
 
 import org.w3c.dom.Node;
@@ -41,7 +40,6 @@ public class XmlSourceHandlerFactoryImpl implements SourceHandlerFactory {
 
     private XMLConverterHelper converter = new XMLConverterHelper();
     private boolean isFailOnNullBody = true;
-    private boolean allowStax = true;
 
     /**
      * Returns true if we fail when the body is null.
@@ -52,34 +50,11 @@ public class XmlSourceHandlerFactoryImpl implements SourceHandlerFactory {
 
     /**
      * Set if we should fail when the body is null
-     *
-     * @param failOnNullBody
      */
     public void setFailOnNullBody(boolean failOnNullBody) {
         isFailOnNullBody = failOnNullBody;
     }
 
-    /**
-     * Returns true if Stax is allowed
-     *
-     * @return
-     */
-    public boolean isAllowStax() {
-        return allowStax;
-    }
-
-    /**
-     * Sets if a {@link StAXSource} is allowed to read the document
-     *
-     * @param allowStax
-     */
-    public void setAllowStax(boolean allowStax) {
-        this.allowStax = allowStax;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public Source getSource(Exchange exchange) throws Exception {
         // only convert to input stream if really needed
@@ -143,14 +118,8 @@ public class XmlSourceHandlerFactoryImpl implements SourceHandlerFactory {
         }
         Source source = null;
         if (body != null) {
-            if (isAllowStax()) {
-                // try StAX if enabled
-                source = exchange.getContext().getTypeConverter().tryConvertTo(StAXSource.class, exchange, body);
-            }
-            if (source == null) {
-                // then try SAX
-                source = exchange.getContext().getTypeConverter().tryConvertTo(SAXSource.class, exchange, body);
-            }
+            // then try SAX
+            source = exchange.getContext().getTypeConverter().tryConvertTo(SAXSource.class, exchange, body);
             if (source == null) {
                 // then try stream
                 source = exchange.getContext().getTypeConverter().tryConvertTo(StreamSource.class, exchange, body);
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
index f2a5cf1..8cfbd00 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
@@ -18,7 +18,6 @@ package org.apache.camel.component.xslt;
 
 import java.io.IOException;
 import java.util.concurrent.RejectedExecutionException;
-
 import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
@@ -70,7 +69,7 @@ public class XsltAggregationStrategy extends ServiceSupport implements Aggregati
     private CamelContext camelContext;
 
     private String propertyName;
-    private String xslFile;
+    private final String xslFile;
     private String transformerFactoryClass;
     private XsltOutput output = XsltOutput.string;
 
@@ -205,9 +204,8 @@ public class XsltAggregationStrategy extends ServiceSupport implements Aggregati
         return this;
     }
 
-    public XsltAggregationStrategy withSaxon() {
-        setTransformerFactoryClass(XsltEndpoint.SAXON_TRANSFORMER_FACTORY_CLASS_NAME);
-        return this;
+    protected XsltBuilder createXsltBuilder() {
+        return camelContext.getInjector().newInstance(XsltBuilder.class);
     }
 
     @Override
@@ -218,7 +216,7 @@ public class XsltAggregationStrategy extends ServiceSupport implements Aggregati
         this.propertyName = ObjectHelper.isNotEmpty(propertyName) ? propertyName : DEFAULT_PROPERTY_NAME;
 
         // initialize the XsltBuilder
-        this.xslt = camelContext.getInjector().newInstance(XsltBuilder.class);
+        this.xslt = createXsltBuilder();
 
         if (transformerFactoryClass != null) {
             Class<?> factoryClass = camelContext.getClassResolver().resolveMandatoryClass(transformerFactoryClass,
@@ -234,7 +232,6 @@ public class XsltAggregationStrategy extends ServiceSupport implements Aggregati
         xslt.setUriResolver(uriResolver);
         xslt.setFailOnNullBody(true);
         xslt.transformerCacheSize(0);
-        xslt.setAllowStAX(true);
 
         configureOutput(xslt, output.name());
         loadResource(xslFile);
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
index 83a3c61..22862f9 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
@@ -34,7 +34,6 @@ import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.URIResolver;
 import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.stax.StAXSource;
 import javax.xml.transform.stream.StreamSource;
 
 import org.xml.sax.EntityResolver;
@@ -44,7 +43,6 @@ import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.SynchronizationAdapter;
-import org.apache.camel.support.builder.xml.StAX2SAXSource;
 import org.apache.camel.support.builder.xml.XMLConverterHelper;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
@@ -62,7 +60,7 @@ import static org.apache.camel.util.ObjectHelper.notNull;
  */
 public class XsltBuilder implements Processor {
 
-    private static final Logger LOG = LoggerFactory.getLogger(XsltBuilder.class);
+    protected static final Logger LOG = LoggerFactory.getLogger(XsltBuilder.class);
     private Map<String, Object> parameters = new HashMap<>();
     private XMLConverterHelper converter = new XMLConverterHelper();
     private Templates template;
@@ -73,7 +71,6 @@ public class XsltBuilder implements Processor {
     private URIResolver uriResolver;
     private boolean deleteOutputFile;
     private ErrorListener errorListener;
-    private boolean allowStAX = true;
     private EntityResolver entityResolver;
 
     private volatile Object sourceHandlerFactoryLock = new Object();
@@ -114,15 +111,7 @@ public class XsltBuilder implements Processor {
         try {
             Source source = getSourceHandlerFactory().getSource(exchange);
 
-            if (!isAllowStAX() && source instanceof StAXSource) {
-                // Always convert StAXSource to SAXSource.
-                // * Xalan and Saxon-B don't support StAXSource.
-                // * The JDK default implementation (XSLTC) doesn't handle CDATA events
-                //   (see com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX).
-                // * Saxon-HE/PE/EE seem to support StAXSource, but don't advertise this
-                //   officially (via TransformerFactory.getFeature(StAXSource.FEATURE))
-                source = new StAX2SAXSource(((StAXSource) source).getXMLStreamReader());
-            }
+            source = prepareSource(source);
 
             if (source instanceof SAXSource) {
                 tryAddEntityResolver((SAXSource) source);
@@ -138,7 +127,14 @@ public class XsltBuilder implements Processor {
             IOHelper.close(is);
         }
     }
-    
+
+    /**
+     * Allows to prepare the source before transforming.
+     */
+    protected Source prepareSource(Source source) {
+        return source;
+    }
+
     // Builder methods
     // -------------------------------------------------------------------------
 
@@ -240,16 +236,6 @@ public class XsltBuilder implements Processor {
     }
 
     /**
-     * Enables to allow using StAX.
-     * <p/>
-     * When enabled StAX is preferred as the first choice as {@link Source}.
-     */
-    public XsltBuilder allowStAX() {
-        setAllowStAX(true);
-        return this;
-    }
-
-    /**
      * Used for caching {@link Transformer}s.
      * <p/>
      * By default no caching is in use.
@@ -307,10 +293,8 @@ public class XsltBuilder implements Processor {
         if (this.sourceHandlerFactory == null) {
             synchronized (this.sourceHandlerFactoryLock) {
                 if (this.sourceHandlerFactory == null) {
-                    final XmlSourceHandlerFactoryImpl xmlSourceHandlerFactory = new XmlSourceHandlerFactoryImpl();
+                    final XmlSourceHandlerFactoryImpl xmlSourceHandlerFactory = createXmlSourceHandlerFactoryImpl();
                     xmlSourceHandlerFactory.setFailOnNullBody(isFailOnNullBody());
-                    xmlSourceHandlerFactory.setAllowStax(isAllowStAX());
-
                     this.sourceHandlerFactory = xmlSourceHandlerFactory;
                 }
             }
@@ -319,6 +303,10 @@ public class XsltBuilder implements Processor {
         return this.sourceHandlerFactory;
     }
 
+    protected XmlSourceHandlerFactoryImpl createXmlSourceHandlerFactoryImpl() {
+        return new XmlSourceHandlerFactoryImpl();
+    }
+
     public void setSourceHandlerFactory(SourceHandlerFactory sourceHandlerFactory) {
         this.sourceHandlerFactory = sourceHandlerFactory;
     }
@@ -331,14 +319,6 @@ public class XsltBuilder implements Processor {
         this.resultHandlerFactory = resultHandlerFactory;
     }
 
-    public boolean isAllowStAX() {
-        return allowStAX;
-    }
-
-    public void setAllowStAX(boolean allowStAX) {
-        this.allowStAX = allowStAX;
-    }
-
     /**
      * Sets the XSLT transformer from a Source
      *
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
index eab98e7..f7c9ff5 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
@@ -16,17 +16,13 @@
  */
 package org.apache.camel.component.xslt;
 
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-
 import javax.xml.transform.URIResolver;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
-import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.ResourceHelper;
 
 /**
@@ -39,16 +35,8 @@ public class XsltComponent extends DefaultComponent {
     private URIResolver uriResolver;
     @Metadata(label = "advanced")
     private XsltUriResolverFactory uriResolverFactory;
-    @Metadata(label = "advanced")
-    private Object saxonConfiguration;
-    @Metadata(label = "advanced")
-    private Map<String, Object> saxonConfigurationProperties = new HashMap<>();
-    @Metadata(label = "advanced", javaType = "java.lang.String")
-    private List<Object> saxonExtensionFunctions;
     @Metadata(defaultValue = "true")
     private boolean contentCache = true;
-    @Metadata
-    private boolean saxon;
 
     public XsltComponent() {
     }
@@ -88,66 +76,6 @@ public class XsltComponent extends DefaultComponent {
         this.contentCache = contentCache;
     }
 
-    public boolean isSaxon() {
-        return saxon;
-    }
-
-    /**
-     * Whether to use Saxon as the transformerFactoryClass.
-     * If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath.
-     */
-    public void setSaxon(boolean saxon) {
-        this.saxon = saxon;
-    }
-
-    public List<Object> getSaxonExtensionFunctions() {
-        return saxonExtensionFunctions;
-    }
-
-    /**
-     * 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.
-     */
-    public void setSaxonExtensionFunctions(List<Object> extensionFunctions) {
-        this.saxonExtensionFunctions = extensionFunctions;
-    }
-
-    /**
-     * 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.
-     */
-    public void setSaxonExtensionFunctions(String extensionFunctions) {
-        this.saxonExtensionFunctions = EndpointHelper.resolveReferenceListParameter(
-            getCamelContext(),
-            extensionFunctions,
-            Object.class
-        );
-    }
-
-    public Object getSaxonConfiguration() {
-        return saxonConfiguration;
-    }
-
-    /**
-     * To use a custom Saxon configuration
-     */
-    public void setSaxonConfiguration(Object saxonConfiguration) {
-        this.saxonConfiguration = saxonConfiguration;
-    }
-
-    public Map<String, Object> getSaxonConfigurationProperties() {
-        return saxonConfigurationProperties;
-    }
-
-    /**
-     * To set custom Saxon configuration properties
-     */
-    public void setSaxonConfigurationProperties(Map<String, Object> configurationProperties) {
-        this.saxonConfigurationProperties = configurationProperties;
-    }
-
     @Override
     protected Endpoint createEndpoint(String uri, final String remaining, Map<String, Object> parameters) throws Exception {
         XsltEndpoint endpoint = createXsltEndpoint(uri);
@@ -160,12 +88,9 @@ public class XsltComponent extends DefaultComponent {
         return new XsltEndpoint(uri, this);
     }
 
-    protected void configureEndpoint(XsltEndpoint endpoint, final String remaining, Map<String, Object> parameters) throws Exception {
-        endpoint.setContentCache(isContentCache());
-        endpoint.setSaxon(isSaxon());
-        endpoint.setSaxonConfiguration(saxonConfiguration);
-        endpoint.setSaxonConfigurationProperties(saxonConfigurationProperties);
-        endpoint.setSaxonExtensionFunctions(saxonExtensionFunctions);
+    protected void configureEndpoint(Endpoint endpoint, final String remaining, Map<String, Object> parameters) throws Exception {
+        XsltEndpoint xslt = (XsltEndpoint) endpoint;
+        xslt.setContentCache(isContentCache());
 
         // lookup custom resolver to use
         URIResolver resolver = resolveAndRemoveReferenceParameter(parameters, "uriResolver", URIResolver.class);
@@ -187,7 +112,7 @@ public class XsltComponent extends DefaultComponent {
 
             resolver = resolverFactory.createUriResolver(getCamelContext(), remaining);
         }
-        endpoint.setUriResolver(resolver);
+        xslt.setUriResolver(resolver);
 
         setProperties(endpoint, parameters);
 
@@ -197,11 +122,11 @@ public class XsltComponent extends DefaultComponent {
             resourceUri = ResourceHelper.appendParameters(resourceUri, parameters);
         }
         log.debug("{} using schema resource: {}", this, resourceUri);
-        endpoint.setResourceUri(resourceUri);
+        xslt.setResourceUri(resourceUri);
 
         if (!parameters.isEmpty()) {
             // additional parameters need to be stored on endpoint as they can be used to configure xslt builder additionally
-            endpoint.setParameters(parameters);
+            xslt.setParameters(parameters);
         }
     }
 }
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
index 5631a37..dcd041f 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
@@ -18,17 +18,13 @@ package org.apache.camel.component.xslt;
 
 import java.io.IOException;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.URIResolver;
 
-import org.xml.sax.EntityResolver;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.Exchange;
@@ -41,10 +37,10 @@ import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
-import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.ProcessorEndpoint;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
+import org.xml.sax.EntityResolver;
 
 /**
  * Transforms the message using a XSLT template.
@@ -52,8 +48,6 @@ import org.apache.camel.util.ObjectHelper;
 @ManagedResource(description = "Managed XsltEndpoint")
 @UriEndpoint(firstVersion = "1.3.0", scheme = "xslt", title = "XSLT", syntax = "xslt:resourceUri", producerOnly = true, label = "core,transformation")
 public class XsltEndpoint extends ProcessorEndpoint {
-    public static final String SAXON_TRANSFORMER_FACTORY_CLASS_NAME = "net.sf.saxon.TransformerFactoryImpl";
-
     private volatile boolean cacheCleared;
     private volatile XsltBuilder xslt;
     private Map<String, Object> parameters;
@@ -66,14 +60,6 @@ public class XsltEndpoint extends ProcessorEndpoint {
     private String transformerFactoryClass;
     @UriParam(label = "advanced")
     private TransformerFactory transformerFactory;
-    @UriParam
-    private boolean saxon;
-    @UriParam(label = "advanced")
-    private Object saxonConfiguration;
-    @Metadata(label = "advanced")
-    private Map<String, Object> saxonConfigurationProperties = new HashMap<>();
-    @UriParam(label = "advanced", javaType = "java.lang.String")
-    private List<Object> saxonExtensionFunctions;
     @UriParam(label = "advanced")
     private ResultHandlerFactory resultHandlerFactory;
     @UriParam(defaultValue = "true")
@@ -86,8 +72,6 @@ public class XsltEndpoint extends ProcessorEndpoint {
     private ErrorListener errorListener;
     @UriParam(label = "advanced")
     private URIResolver uriResolver;
-    @UriParam(displayName = "Allow StAX")
-    private boolean allowStAX;
     @UriParam
     private boolean deleteOutputFile;
     @UriParam(label = "advanced")
@@ -180,67 +164,6 @@ public class XsltEndpoint extends ProcessorEndpoint {
         this.transformerFactory = transformerFactory;
     }
 
-    @ManagedAttribute(description = "Whether to use Saxon as the transformerFactoryClass")
-    public boolean isSaxon() {
-        return saxon;
-    }
-
-    /**
-     * Whether to use Saxon as the transformerFactoryClass.
-     * If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath.
-     */
-    public void setSaxon(boolean saxon) {
-        this.saxon = saxon;
-    }
-
-    public List<Object> getSaxonExtensionFunctions() {
-        return saxonExtensionFunctions;
-    }
-
-    /**
-     * 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.
-     */
-    public void setSaxonExtensionFunctions(List<Object> extensionFunctions) {
-        this.saxonExtensionFunctions = extensionFunctions;
-    }
-
-    /**
-     * 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.
-     */
-    public void setSaxonExtensionFunctions(String extensionFunctions) {
-        this.saxonExtensionFunctions = EndpointHelper.resolveReferenceListParameter(
-            getCamelContext(),
-            extensionFunctions,
-            Object.class
-        );
-    }
-
-    public Object getSaxonConfiguration() {
-        return saxonConfiguration;
-    }
-
-    /**
-     * To use a custom Saxon configuration
-     */
-    public void setSaxonConfiguration(Object saxonConfiguration) {
-        this.saxonConfiguration = saxonConfiguration;
-    }
-
-    public Map<String, Object> getSaxonConfigurationProperties() {
-        return saxonConfigurationProperties;
-    }
-
-    /**
-     * To set custom Saxon configuration properties
-     */
-    public void setSaxonConfigurationProperties(Map<String, Object> configurationProperties) {
-        this.saxonConfigurationProperties = configurationProperties;
-    }
-
     public ResultHandlerFactory getResultHandlerFactory() {
         return resultHandlerFactory;
     }
@@ -329,20 +252,6 @@ public class XsltEndpoint extends ProcessorEndpoint {
         this.uriResolver = uriResolver;
     }
 
-    @ManagedAttribute(description = "Whether to allow using StAX as the javax.xml.transform.Source")
-    public boolean isAllowStAX() {
-        return allowStAX;
-    }
-
-    /**
-     * 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.
-     */
-    public void setAllowStAX(boolean allowStAX) {
-        this.allowStAX = allowStAX;
-    }
-
     public boolean isDeleteOutputFile() {
         return deleteOutputFile;
     }
@@ -414,24 +323,12 @@ public class XsltEndpoint extends ProcessorEndpoint {
 
         final XsltBuilder xslt = injector.newInstance(XsltBuilder.class);
 
-        boolean useSaxon = false;
-        if (transformerFactoryClass == null && (saxon || saxonExtensionFunctions != null)) {
-            useSaxon = true;
-            transformerFactoryClass = SAXON_TRANSFORMER_FACTORY_CLASS_NAME;
-        }
-
         TransformerFactory factory = transformerFactory;
         if (factory == null && transformerFactoryClass != null) {
             // provide the class loader of this component to work in OSGi environments
             Class<TransformerFactory> factoryClass = resolver.resolveMandatoryClass(transformerFactoryClass, TransformerFactory.class, XsltComponent.class.getClassLoader());
             log.debug("Using TransformerFactoryClass {}", factoryClass);
             factory = injector.newInstance(factoryClass);
-
-            if (useSaxon) {
-                XsltHelper.registerSaxonConfiguration(ctx, factoryClass, factory, saxonConfiguration);
-                XsltHelper.registerSaxonConfigurationProperties(ctx, factoryClass, factory, saxonConfigurationProperties);
-                XsltHelper.registerSaxonExtensionFunctions(ctx, factoryClass, factory, saxonExtensionFunctions);
-            }
         }
 
         if (factory != null) {
@@ -448,7 +345,6 @@ public class XsltEndpoint extends ProcessorEndpoint {
         xslt.transformerCacheSize(transformerCacheSize);
         xslt.setUriResolver(uriResolver);
         xslt.setEntityResolver(entityResolver);
-        xslt.setAllowStAX(allowStAX);
         xslt.setDeleteOutputFile(deleteOutputFile);
 
         configureOutput(xslt, output.name());
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltCustomizeEntityResolverTest.java b/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltCustomizeEntityResolverTest.java
index a29f9db..69c4a9e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltCustomizeEntityResolverTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltCustomizeEntityResolverTest.java
@@ -49,7 +49,7 @@ public class XsltCustomizeEntityResolverTest extends ContextTestSupport {
             @Override
             public void configure() throws Exception {
                 from("file:src/test/data/?fileName=xml_with_entity.xml&noop=true&initialDelay=0&delay=10")
-                    .to("xslt:xslt/common/copy.xsl?allowStAX=false&output=string&entityResolver=#customEntityResolver").to("mock:resultURIResolverDirect");
+                    .to("xslt:xslt/common/copy.xsl?output=string&entityResolver=#customEntityResolver").to("mock:resultURIResolverDirect");
             }
         };
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java b/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java
index 64aaf4f..9924366 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java
@@ -87,7 +87,7 @@ public class XsltDTDTest extends ContextTestSupport {
 
                 from("direct:start1").to("xslt:org/apache/camel/component/xslt/transform_dtd.xsl").to("mock:result");
 
-                from("direct:start2").to("xslt:org/apache/camel/component/xslt/transform_dtd.xsl?allowStAX=false").to("mock:result");
+                from("direct:start2").to("xslt:org/apache/camel/component/xslt/transform_dtd.xsl").to("mock:result");
             }
         };
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltSaxonTest.java b/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltSaxonTest.java
deleted file mode 100644
index dee4088..0000000
--- a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltSaxonTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.xslt;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.TestSupport;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.junit.Test;
-
-/**
- *
- */
-public class XsltSaxonTest extends TestSupport {
-
-    @Test
-    public void testSaxon() throws Exception {
-        try {
-            RouteBuilder builder = createRouteBuilder();
-            CamelContext context = new DefaultCamelContext();
-            context.addRoutes(builder);
-            context.start();
-
-            fail("Should have thrown an exception due XSLT saxon not on classpath");
-        } catch (Exception e) {
-            assertIsInstanceOf(ClassNotFoundException.class, e.getCause().getCause());
-        }
-    }
-
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            public void configure() throws Exception {
-                from("seda:a").to("xslt:org/apache/camel/component/xslt/transform.xsl?saxon=true");
-            }
-        };
-    }
-
-}
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java
index 3fe20c9..304f102 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.builder.endpoint.dsl;
 
-import java.util.List;
 import javax.annotation.Generated;
 import org.apache.camel.builder.EndpointConsumerBuilder;
 import org.apache.camel.builder.EndpointProducerBuilder;
@@ -39,34 +38,6 @@ public interface XsltEndpointBuilderFactory {
             return (AdvancedXsltEndpointBuilder) this;
         }
         /**
-         * 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.
-         *
-         * The option is a: <code>boolean</code> type.
-         *
-         * Group: producer
-         */
-        default XsltEndpointBuilder allowStAX(boolean allowStAX) {
-            doSetProperty("allowStAX", allowStAX);
-            return this;
-        }
-        /**
-         * 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.
-         *
-         * The option will be converted to a <code>boolean</code> type.
-         *
-         * Group: producer
-         */
-        default XsltEndpointBuilder allowStAX(String allowStAX) {
-            doSetProperty("allowStAX", allowStAX);
-            return this;
-        }
-        /**
          * 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
@@ -221,32 +192,6 @@ public interface XsltEndpointBuilderFactory {
             return this;
         }
         /**
-         * Whether to use Saxon as the transformerFactoryClass. If enabled then
-         * the class net.sf.saxon.TransformerFactoryImpl. You would need to add
-         * Saxon to the classpath.
-         *
-         * The option is a: <code>boolean</code> type.
-         *
-         * Group: producer
-         */
-        default XsltEndpointBuilder saxon(boolean saxon) {
-            doSetProperty("saxon", saxon);
-            return this;
-        }
-        /**
-         * Whether to use Saxon as the transformerFactoryClass. If enabled then
-         * the class net.sf.saxon.TransformerFactoryImpl. You would need to add
-         * Saxon to the classpath.
-         *
-         * The option will be converted to a <code>boolean</code> type.
-         *
-         * Group: producer
-         */
-        default XsltEndpointBuilder saxon(String saxon) {
-            doSetProperty("saxon", saxon);
-            return this;
-        }
-        /**
          * The number of javax.xml.transform.Transformer object that are cached
          * for reuse to avoid calls to Template.newTransformer().
          *
@@ -398,62 +343,6 @@ public interface XsltEndpointBuilderFactory {
             return this;
         }
         /**
-         * To use a custom Saxon configuration.
-         *
-         * The option is a: <code>java.lang.Object</code> type.
-         *
-         * Group: advanced
-         */
-        default AdvancedXsltEndpointBuilder saxonConfiguration(
-                Object saxonConfiguration) {
-            doSetProperty("saxonConfiguration", saxonConfiguration);
-            return this;
-        }
-        /**
-         * To use a custom Saxon configuration.
-         *
-         * The option will be converted to a <code>java.lang.Object</code> type.
-         *
-         * Group: advanced
-         */
-        default AdvancedXsltEndpointBuilder saxonConfiguration(
-                String saxonConfiguration) {
-            doSetProperty("saxonConfiguration", saxonConfiguration);
-            return this;
-        }
-        /**
-         * 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.
-         *
-         * The option is a: <code>java.util.List&lt;java.lang.Object&gt;</code>
-         * type.
-         *
-         * Group: advanced
-         */
-        default AdvancedXsltEndpointBuilder saxonExtensionFunctions(
-                List<Object> saxonExtensionFunctions) {
-            doSetProperty("saxonExtensionFunctions", saxonExtensionFunctions);
-            return this;
-        }
-        /**
-         * 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.
-         *
-         * The option will be converted to a
-         * <code>java.util.List&lt;java.lang.Object&gt;</code> type.
-         *
-         * Group: advanced
-         */
-        default AdvancedXsltEndpointBuilder saxonExtensionFunctions(
-                String saxonExtensionFunctions) {
-            doSetProperty("saxonExtensionFunctions", saxonExtensionFunctions);
-            return this;
-        }
-        /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported).
          *
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java
similarity index 81%
copy from core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java
copy to core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java
index 3fe20c9..09807d2 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java
@@ -28,15 +28,15 @@ import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
-public interface XsltEndpointBuilderFactory {
+public interface XsltSaxonEndpointBuilderFactory {
 
 
     /**
-     * Builder for endpoint for the XSLT component.
+     * Builder for endpoint for the XSLT Saxon component.
      */
-    public interface XsltEndpointBuilder extends EndpointProducerBuilder {
-        default AdvancedXsltEndpointBuilder advanced() {
-            return (AdvancedXsltEndpointBuilder) this;
+    public interface XsltSaxonEndpointBuilder extends EndpointProducerBuilder {
+        default AdvancedXsltSaxonEndpointBuilder advanced() {
+            return (AdvancedXsltSaxonEndpointBuilder) this;
         }
         /**
          * Whether to allow using StAX as the javax.xml.transform.Source. You
@@ -48,7 +48,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder allowStAX(boolean allowStAX) {
+        default XsltSaxonEndpointBuilder allowStAX(boolean allowStAX) {
             doSetProperty("allowStAX", allowStAX);
             return this;
         }
@@ -62,7 +62,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder allowStAX(String allowStAX) {
+        default XsltSaxonEndpointBuilder allowStAX(String allowStAX) {
             doSetProperty("allowStAX", allowStAX);
             return this;
         }
@@ -77,7 +77,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder contentCache(boolean contentCache) {
+        default XsltSaxonEndpointBuilder contentCache(boolean contentCache) {
             doSetProperty("contentCache", contentCache);
             return this;
         }
@@ -92,7 +92,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder contentCache(String contentCache) {
+        default XsltSaxonEndpointBuilder contentCache(String contentCache) {
             doSetProperty("contentCache", contentCache);
             return this;
         }
@@ -106,7 +106,8 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder deleteOutputFile(boolean deleteOutputFile) {
+        default XsltSaxonEndpointBuilder deleteOutputFile(
+                boolean deleteOutputFile) {
             doSetProperty("deleteOutputFile", deleteOutputFile);
             return this;
         }
@@ -120,7 +121,8 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder deleteOutputFile(String deleteOutputFile) {
+        default XsltSaxonEndpointBuilder deleteOutputFile(
+                String deleteOutputFile) {
             doSetProperty("deleteOutputFile", deleteOutputFile);
             return this;
         }
@@ -131,7 +133,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder failOnNullBody(boolean failOnNullBody) {
+        default XsltSaxonEndpointBuilder failOnNullBody(boolean failOnNullBody) {
             doSetProperty("failOnNullBody", failOnNullBody);
             return this;
         }
@@ -142,7 +144,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder failOnNullBody(String failOnNullBody) {
+        default XsltSaxonEndpointBuilder failOnNullBody(String failOnNullBody) {
             doSetProperty("failOnNullBody", failOnNullBody);
             return this;
         }
@@ -161,7 +163,8 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder lazyStartProducer(boolean lazyStartProducer) {
+        default XsltSaxonEndpointBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
             doSetProperty("lazyStartProducer", lazyStartProducer);
             return this;
         }
@@ -180,7 +183,8 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder lazyStartProducer(String lazyStartProducer) {
+        default XsltSaxonEndpointBuilder lazyStartProducer(
+                String lazyStartProducer) {
             doSetProperty("lazyStartProducer", lazyStartProducer);
             return this;
         }
@@ -198,7 +202,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder output(XsltOutput output) {
+        default XsltSaxonEndpointBuilder output(XsltOutput output) {
             doSetProperty("output", output);
             return this;
         }
@@ -216,37 +220,11 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder output(String output) {
+        default XsltSaxonEndpointBuilder output(String output) {
             doSetProperty("output", output);
             return this;
         }
         /**
-         * Whether to use Saxon as the transformerFactoryClass. If enabled then
-         * the class net.sf.saxon.TransformerFactoryImpl. You would need to add
-         * Saxon to the classpath.
-         *
-         * The option is a: <code>boolean</code> type.
-         *
-         * Group: producer
-         */
-        default XsltEndpointBuilder saxon(boolean saxon) {
-            doSetProperty("saxon", saxon);
-            return this;
-        }
-        /**
-         * Whether to use Saxon as the transformerFactoryClass. If enabled then
-         * the class net.sf.saxon.TransformerFactoryImpl. You would need to add
-         * Saxon to the classpath.
-         *
-         * The option will be converted to a <code>boolean</code> type.
-         *
-         * Group: producer
-         */
-        default XsltEndpointBuilder saxon(String saxon) {
-            doSetProperty("saxon", saxon);
-            return this;
-        }
-        /**
          * The number of javax.xml.transform.Transformer object that are cached
          * for reuse to avoid calls to Template.newTransformer().
          *
@@ -254,7 +232,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder transformerCacheSize(
+        default XsltSaxonEndpointBuilder transformerCacheSize(
                 int transformerCacheSize) {
             doSetProperty("transformerCacheSize", transformerCacheSize);
             return this;
@@ -267,7 +245,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: producer
          */
-        default XsltEndpointBuilder transformerCacheSize(
+        default XsltSaxonEndpointBuilder transformerCacheSize(
                 String transformerCacheSize) {
             doSetProperty("transformerCacheSize", transformerCacheSize);
             return this;
@@ -275,13 +253,69 @@ public interface XsltEndpointBuilderFactory {
     }
 
     /**
-     * Advanced builder for endpoint for the XSLT component.
+     * Advanced builder for endpoint for the XSLT Saxon component.
      */
-    public interface AdvancedXsltEndpointBuilder
+    public interface AdvancedXsltSaxonEndpointBuilder
             extends
                 EndpointProducerBuilder {
-        default XsltEndpointBuilder basic() {
-            return (XsltEndpointBuilder) this;
+        default XsltSaxonEndpointBuilder basic() {
+            return (XsltSaxonEndpointBuilder) this;
+        }
+        /**
+         * To use a custom Saxon configuration.
+         *
+         * The option is a: <code>java.lang.Object</code> type.
+         *
+         * Group: advanced
+         */
+        default AdvancedXsltSaxonEndpointBuilder saxonConfiguration(
+                Object saxonConfiguration) {
+            doSetProperty("saxonConfiguration", saxonConfiguration);
+            return this;
+        }
+        /**
+         * To use a custom Saxon configuration.
+         *
+         * The option will be converted to a <code>java.lang.Object</code> type.
+         *
+         * Group: advanced
+         */
+        default AdvancedXsltSaxonEndpointBuilder saxonConfiguration(
+                String saxonConfiguration) {
+            doSetProperty("saxonConfiguration", saxonConfiguration);
+            return this;
+        }
+        /**
+         * 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.
+         *
+         * The option is a: <code>java.util.List&lt;java.lang.Object&gt;</code>
+         * type.
+         *
+         * Group: advanced
+         */
+        default AdvancedXsltSaxonEndpointBuilder saxonExtensionFunctions(
+                List<Object> saxonExtensionFunctions) {
+            doSetProperty("saxonExtensionFunctions", saxonExtensionFunctions);
+            return this;
+        }
+        /**
+         * 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.
+         *
+         * The option will be converted to a
+         * <code>java.util.List&lt;java.lang.Object&gt;</code> type.
+         *
+         * Group: advanced
+         */
+        default AdvancedXsltSaxonEndpointBuilder saxonExtensionFunctions(
+                String saxonExtensionFunctions) {
+            doSetProperty("saxonExtensionFunctions", saxonExtensionFunctions);
+            return this;
         }
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
@@ -291,7 +325,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder basicPropertyBinding(
+        default AdvancedXsltSaxonEndpointBuilder basicPropertyBinding(
                 boolean basicPropertyBinding) {
             doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
@@ -304,7 +338,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder basicPropertyBinding(
+        default AdvancedXsltSaxonEndpointBuilder basicPropertyBinding(
                 String basicPropertyBinding) {
             doSetProperty("basicPropertyBinding", basicPropertyBinding);
             return this;
@@ -317,7 +351,8 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder entityResolver(Object entityResolver) {
+        default AdvancedXsltSaxonEndpointBuilder entityResolver(
+                Object entityResolver) {
             doSetProperty("entityResolver", entityResolver);
             return this;
         }
@@ -330,7 +365,8 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder entityResolver(String entityResolver) {
+        default AdvancedXsltSaxonEndpointBuilder entityResolver(
+                String entityResolver) {
             doSetProperty("entityResolver", entityResolver);
             return this;
         }
@@ -345,7 +381,8 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder errorListener(Object errorListener) {
+        default AdvancedXsltSaxonEndpointBuilder errorListener(
+                Object errorListener) {
             doSetProperty("errorListener", errorListener);
             return this;
         }
@@ -361,7 +398,8 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder errorListener(String errorListener) {
+        default AdvancedXsltSaxonEndpointBuilder errorListener(
+                String errorListener) {
             doSetProperty("errorListener", errorListener);
             return this;
         }
@@ -376,7 +414,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder resultHandlerFactory(
+        default AdvancedXsltSaxonEndpointBuilder resultHandlerFactory(
                 Object resultHandlerFactory) {
             doSetProperty("resultHandlerFactory", resultHandlerFactory);
             return this;
@@ -392,68 +430,12 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder resultHandlerFactory(
+        default AdvancedXsltSaxonEndpointBuilder resultHandlerFactory(
                 String resultHandlerFactory) {
             doSetProperty("resultHandlerFactory", resultHandlerFactory);
             return this;
         }
         /**
-         * To use a custom Saxon configuration.
-         *
-         * The option is a: <code>java.lang.Object</code> type.
-         *
-         * Group: advanced
-         */
-        default AdvancedXsltEndpointBuilder saxonConfiguration(
-                Object saxonConfiguration) {
-            doSetProperty("saxonConfiguration", saxonConfiguration);
-            return this;
-        }
-        /**
-         * To use a custom Saxon configuration.
-         *
-         * The option will be converted to a <code>java.lang.Object</code> type.
-         *
-         * Group: advanced
-         */
-        default AdvancedXsltEndpointBuilder saxonConfiguration(
-                String saxonConfiguration) {
-            doSetProperty("saxonConfiguration", saxonConfiguration);
-            return this;
-        }
-        /**
-         * 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.
-         *
-         * The option is a: <code>java.util.List&lt;java.lang.Object&gt;</code>
-         * type.
-         *
-         * Group: advanced
-         */
-        default AdvancedXsltEndpointBuilder saxonExtensionFunctions(
-                List<Object> saxonExtensionFunctions) {
-            doSetProperty("saxonExtensionFunctions", saxonExtensionFunctions);
-            return this;
-        }
-        /**
-         * 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.
-         *
-         * The option will be converted to a
-         * <code>java.util.List&lt;java.lang.Object&gt;</code> type.
-         *
-         * Group: advanced
-         */
-        default AdvancedXsltEndpointBuilder saxonExtensionFunctions(
-                String saxonExtensionFunctions) {
-            doSetProperty("saxonExtensionFunctions", saxonExtensionFunctions);
-            return this;
-        }
-        /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported).
          *
@@ -461,7 +443,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder synchronous(boolean synchronous) {
+        default AdvancedXsltSaxonEndpointBuilder synchronous(boolean synchronous) {
             doSetProperty("synchronous", synchronous);
             return this;
         }
@@ -473,7 +455,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder synchronous(String synchronous) {
+        default AdvancedXsltSaxonEndpointBuilder synchronous(String synchronous) {
             doSetProperty("synchronous", synchronous);
             return this;
         }
@@ -485,7 +467,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder transformerFactory(
+        default AdvancedXsltSaxonEndpointBuilder transformerFactory(
                 Object transformerFactory) {
             doSetProperty("transformerFactory", transformerFactory);
             return this;
@@ -498,7 +480,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder transformerFactory(
+        default AdvancedXsltSaxonEndpointBuilder transformerFactory(
                 String transformerFactory) {
             doSetProperty("transformerFactory", transformerFactory);
             return this;
@@ -511,7 +493,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder transformerFactoryClass(
+        default AdvancedXsltSaxonEndpointBuilder transformerFactoryClass(
                 String transformerFactoryClass) {
             doSetProperty("transformerFactoryClass", transformerFactoryClass);
             return this;
@@ -523,7 +505,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder uriResolver(Object uriResolver) {
+        default AdvancedXsltSaxonEndpointBuilder uriResolver(Object uriResolver) {
             doSetProperty("uriResolver", uriResolver);
             return this;
         }
@@ -535,7 +517,7 @@ public interface XsltEndpointBuilderFactory {
          *
          * Group: advanced
          */
-        default AdvancedXsltEndpointBuilder uriResolver(String uriResolver) {
+        default AdvancedXsltSaxonEndpointBuilder uriResolver(String uriResolver) {
             doSetProperty("uriResolver", uriResolver);
             return this;
         }
@@ -552,14 +534,14 @@ public interface XsltEndpointBuilderFactory {
         file;
     }
     /**
-     * XSLT (camel-xslt)
+     * XSLT Saxon (camel-xslt-saxon)
      * Transforms the message using a XSLT template.
      *
      * Category: core,transformation
-     * Available as of version: 1.3
-     * Maven coordinates: org.apache.camel:camel-xslt
+     * Available as of version: 3.0
+     * Maven coordinates: org.apache.camel:camel-xslt-saxon
      *
-     * Syntax: <code>xslt:resourceUri</code>
+     * Syntax: <code>xslt-saxon:resourceUri</code>
      *
      * Path parameter: resourceUri (required)
      * Path to the template. The following is supported by the default
@@ -569,12 +551,12 @@ public interface XsltEndpointBuilderFactory {
      * 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
      */
-    default XsltEndpointBuilder xslt(String path) {
-        class XsltEndpointBuilderImpl extends AbstractEndpointBuilder implements XsltEndpointBuilder, AdvancedXsltEndpointBuilder {
-            public XsltEndpointBuilderImpl(String path) {
-                super("xslt", path);
+    default XsltSaxonEndpointBuilder xsltSaxon(String path) {
+        class XsltSaxonEndpointBuilderImpl extends AbstractEndpointBuilder implements XsltSaxonEndpointBuilder, AdvancedXsltSaxonEndpointBuilder {
+            public XsltSaxonEndpointBuilderImpl(String path) {
+                super("xslt-saxon", path);
             }
         }
-        return new XsltEndpointBuilderImpl(path);
+        return new XsltSaxonEndpointBuilderImpl(path);
     }
 }
\ No newline at end of file
diff --git a/parent/pom.xml b/parent/pom.xml
index adfb887..341416c 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -2428,6 +2428,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xslt-saxon</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xstream</artifactId>
         <version>${project.version}</version>
       </dependency>
@@ -3917,6 +3922,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xslt-saxon-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xstream-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/pom.xml b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/pom.xml
new file mode 100644
index 0000000..c052038
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components-starter</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>camel-xslt-saxon-starter</artifactId>
+  <packaging>jar</packaging>
+  <name>Spring-Boot Starter :: Camel :: XSLT Saxon</name>
+  <description>Spring-Boot Starter for Camel XSLT Saxon component</description>
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xslt-saxon</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <!--START OF GENERATED CODE-->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring-boot-starter</artifactId>
+    </dependency>
+    <!--END OF GENERATED CODE-->
+  </dependencies>
+</project>
diff --git a/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentAutoConfiguration.java
new file mode 100644
index 0000000..cf2519c
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentAutoConfiguration.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xslt.saxon.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.xslt.saxon.XsltSaxonComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+        XsltSaxonComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        XsltSaxonComponentConfiguration.class})
+public class XsltSaxonComponentAutoConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(XsltSaxonComponentAutoConfiguration.class);
+    @Autowired
+    private ApplicationContext applicationContext;
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired
+    private XsltSaxonComponentConfiguration configuration;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<XsltSaxonComponent>> customizers;
+
+    static class GroupConditions extends GroupCondition {
+        public GroupConditions() {
+            super("camel.component", "camel.component.xslt-saxon");
+        }
+    }
+
+    @Lazy
+    @Bean(name = "xslt-saxon-component")
+    @ConditionalOnMissingBean(XsltSaxonComponent.class)
+    public XsltSaxonComponent configureXsltSaxonComponent() throws Exception {
+        XsltSaxonComponent component = new XsltSaxonComponent();
+        component.setCamelContext(camelContext);
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(configuration, parameters, null,
+                false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    CamelPropertiesHelper.setCamelProperties(camelContext,
+                            nestedProperty, nestedParameters, false);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
+            }
+        }
+        CamelPropertiesHelper.setCamelProperties(camelContext, component,
+                parameters, false);
+        if (ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<XsltSaxonComponent> customizer : customizers) {
+                boolean useCustomizer = (customizer instanceof HasId)
+                        ? HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.xslt-saxon.customizer",
+                                ((HasId) customizer).getId())
+                        : HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.xslt-saxon.customizer");
+                if (useCustomizer) {
+                    LOGGER.debug("Configure component {}, with customizer {}",
+                            component, customizer);
+                    customizer.customize(component);
+                }
+            }
+        }
+        return component;
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentConfiguration.java
similarity index 91%
copy from platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
copy to platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentConfiguration.java
index a337d14..b674ad2 100644
--- a/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentConfiguration.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.xslt.springboot;
+package org.apache.camel.component.xslt.saxon.springboot;
 
 import java.util.Map;
 import javax.annotation.Generated;
@@ -27,17 +27,33 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-@ConfigurationProperties(prefix = "camel.component.xslt")
-public class XsltComponentConfiguration
+@ConfigurationProperties(prefix = "camel.component.xslt-saxon")
+public class XsltSaxonComponentConfiguration
         extends
             ComponentConfigurationPropertiesCommon {
 
     /**
-     * Whether to enable auto configuration of the xslt component. This is
+     * Whether to enable auto configuration of the xslt-saxon component. This is
      * enabled by default.
      */
     private Boolean enabled;
     /**
+     * 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.
+     */
+    private String saxonExtensionFunctions;
+    /**
+     * To use a custom Saxon configuration. The option is a java.lang.Object
+     * type.
+     */
+    private String saxonConfiguration;
+    /**
+     * To set custom Saxon configuration properties
+     */
+    private Map<String, Object> saxonConfigurationProperties;
+    /**
      * To use a custom UriResolver which depends on a dynamic endpoint resource
      * URI. Should not be used together with the option 'uriResolver'. The
      * option is a org.apache.camel.component.xslt.XsltUriResolverFactory type.
@@ -58,28 +74,6 @@ public class XsltComponentConfiguration
      */
     private Boolean contentCache = true;
     /**
-     * Whether to use Saxon as the transformerFactoryClass. If enabled then the
-     * class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to
-     * the classpath.
-     */
-    private Boolean saxon = false;
-    /**
-     * 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.
-     */
-    private String saxonExtensionFunctions;
-    /**
-     * To use a custom Saxon configuration. The option is a java.lang.Object
-     * type.
-     */
-    private String saxonConfiguration;
-    /**
-     * To set custom Saxon configuration properties
-     */
-    private Map<String, Object> saxonConfigurationProperties;
-    /**
      * Whether the component should use basic property binding (Camel 2.x) or
      * the newer property binding with additional capabilities
      */
@@ -105,38 +99,6 @@ public class XsltComponentConfiguration
      */
     private Boolean bridgeErrorHandler = false;
 
-    public String getUriResolverFactory() {
-        return uriResolverFactory;
-    }
-
-    public void setUriResolverFactory(String uriResolverFactory) {
-        this.uriResolverFactory = uriResolverFactory;
-    }
-
-    public String getUriResolver() {
-        return uriResolver;
-    }
-
-    public void setUriResolver(String uriResolver) {
-        this.uriResolver = uriResolver;
-    }
-
-    public Boolean getContentCache() {
-        return contentCache;
-    }
-
-    public void setContentCache(Boolean contentCache) {
-        this.contentCache = contentCache;
-    }
-
-    public Boolean getSaxon() {
-        return saxon;
-    }
-
-    public void setSaxon(Boolean saxon) {
-        this.saxon = saxon;
-    }
-
     public String getSaxonExtensionFunctions() {
         return saxonExtensionFunctions;
     }
@@ -162,6 +124,30 @@ public class XsltComponentConfiguration
         this.saxonConfigurationProperties = saxonConfigurationProperties;
     }
 
+    public String getUriResolverFactory() {
+        return uriResolverFactory;
+    }
+
+    public void setUriResolverFactory(String uriResolverFactory) {
+        this.uriResolverFactory = uriResolverFactory;
+    }
+
+    public String getUriResolver() {
+        return uriResolver;
+    }
+
+    public void setUriResolver(String uriResolver) {
+        this.uriResolver = uriResolver;
+    }
+
+    public Boolean getContentCache() {
+        return contentCache;
+    }
+
+    public void setContentCache(Boolean contentCache) {
+        this.contentCache = contentCache;
+    }
+
     public Boolean getBasicPropertyBinding() {
         return basicPropertyBinding;
     }
diff --git a/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/LICENSE.txt b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/NOTICE.txt b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Camel distribution.                    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Please read the different LICENSE files present in the licenses directory of
+   this distribution.
diff --git a/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..df9baad
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,19 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.camel.component.xslt.saxon.springboot.XsltSaxonComponentAutoConfiguration
diff --git a/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/spring.provides b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/spring.provides
new file mode 100644
index 0000000..dfe6d45
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/resources/META-INF/spring.provides
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+provides: camel-xslt-saxon
diff --git a/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
index a337d14..caaf49e 100644
--- a/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.xslt.springboot;
 
-import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -58,28 +57,6 @@ public class XsltComponentConfiguration
      */
     private Boolean contentCache = true;
     /**
-     * Whether to use Saxon as the transformerFactoryClass. If enabled then the
-     * class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to
-     * the classpath.
-     */
-    private Boolean saxon = false;
-    /**
-     * 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.
-     */
-    private String saxonExtensionFunctions;
-    /**
-     * To use a custom Saxon configuration. The option is a java.lang.Object
-     * type.
-     */
-    private String saxonConfiguration;
-    /**
-     * To set custom Saxon configuration properties
-     */
-    private Map<String, Object> saxonConfigurationProperties;
-    /**
      * Whether the component should use basic property binding (Camel 2.x) or
      * the newer property binding with additional capabilities
      */
@@ -129,39 +106,6 @@ public class XsltComponentConfiguration
         this.contentCache = contentCache;
     }
 
-    public Boolean getSaxon() {
-        return saxon;
-    }
-
-    public void setSaxon(Boolean saxon) {
-        this.saxon = saxon;
-    }
-
-    public String getSaxonExtensionFunctions() {
-        return saxonExtensionFunctions;
-    }
-
-    public void setSaxonExtensionFunctions(String saxonExtensionFunctions) {
-        this.saxonExtensionFunctions = saxonExtensionFunctions;
-    }
-
-    public String getSaxonConfiguration() {
-        return saxonConfiguration;
-    }
-
-    public void setSaxonConfiguration(String saxonConfiguration) {
-        this.saxonConfiguration = saxonConfiguration;
-    }
-
-    public Map<String, Object> getSaxonConfigurationProperties() {
-        return saxonConfigurationProperties;
-    }
-
-    public void setSaxonConfigurationProperties(
-            Map<String, Object> saxonConfigurationProperties) {
-        this.saxonConfigurationProperties = saxonConfigurationProperties;
-    }
-
     public Boolean getBasicPropertyBinding() {
         return basicPropertyBinding;
     }
diff --git a/platforms/spring-boot/components-starter/pom.xml b/platforms/spring-boot/components-starter/pom.xml
index e5589f9..e083e0f 100644
--- a/platforms/spring-boot/components-starter/pom.xml
+++ b/platforms/spring-boot/components-starter/pom.xml
@@ -389,6 +389,7 @@
     <module>camel-xmlsecurity-starter</module>
     <module>camel-xmpp-starter</module>
     <module>camel-xpath-starter</module>
+    <module>camel-xslt-saxon-starter</module>
     <module>camel-xslt-starter</module>
     <module>camel-xstream-starter</module>
     <module>camel-yammer-starter</module>

Reply | Threaded
Open this post in threaded view
|

[camel] 02/05: CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt

davsclaus-2
In reply to this post by davsclaus-2
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch saxon
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 69ef57a508e279ab3b32f1ee8133d0a65eb9ae85
Author: Claus Ibsen <[hidden email]>
AuthorDate: Thu Nov 14 10:56:50 2019 +0100

    CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt
---
 .../karaf/features/src/main/resources/features.xml |  4 ++
 .../camel/itest/karaf/CamelXsltSaxonTest.java      | 33 +++++++++++++++
 .../camel/itest/springboot/CamelXsltSaxonTest.java | 47 ++++++++++++++++++++++
 3 files changed, 84 insertions(+)

diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 6c1af12..0ae46a0 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -2646,6 +2646,10 @@
     <bundle dependency='true'>wrap:mvn:org.minidns/minidns-core/${minidns-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-xmpp/${project.version}</bundle>
   </feature>
+  <feature name='camel-xslt-saxon' version='${project.version}' start-level='50'>
+    <feature version='${project.version}'>camel-saxon</feature>
+    <bundle>mvn:org.apache.camel/camel-xslt-saxon/${project.version}</bundle>
+  </feature>
   <feature name='camel-xstream' version='${project.version}' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
     <bundle dependency='true'>mvn:org.codehaus.jettison/jettison/${jettison-version}</bundle>
diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelXsltSaxonTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelXsltSaxonTest.java
new file mode 100644
index 0000000..f7c4f29
--- /dev/null
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelXsltSaxonTest.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.itest.karaf;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.PaxExam;
+
+@RunWith(PaxExam.class)
+public class CamelXsltSaxonTest extends BaseKarafTest {
+
+    public static final String COMPONENT = extractName(CamelXsltSaxonTest.class);
+
+    @Test
+    public void test() throws Exception {
+        testComponent(COMPONENT);
+    }
+
+}
\ No newline at end of file
diff --git a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelXsltSaxonTest.java b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelXsltSaxonTest.java
new file mode 100644
index 0000000..8b48b35
--- /dev/null
+++ b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelXsltSaxonTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.itest.springboot;
+
+import org.apache.camel.itest.springboot.util.ArquillianPackager;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+
+@RunWith(Arquillian.class)
+public class CamelXsltSaxonTest extends AbstractSpringBootTestSupport {
+
+    @Deployment
+    public static Archive<?> createSpringBootPackage() throws Exception {
+        return ArquillianPackager.springBootPackage(createTestConfig());
+    }
+
+    public static ITestConfig createTestConfig() {
+        return new ITestConfigBuilder()
+                .module(inferModuleName(CamelXsltSaxonTest.class))
+                .build();
+    }
+
+    @Test
+    public void componentTests() throws Exception {
+        this.runComponentTest(config);
+        this.runModuleUnitTestsIfEnabled(config);
+    }
+
+}

Reply | Threaded
Open this post in threaded view
|

[camel] 03/05: CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt

davsclaus-2
In reply to this post by davsclaus-2
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch saxon
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 42246cb35a2afaf0b901c0fcb2559cf8ca609532
Author: Claus Ibsen <[hidden email]>
AuthorDate: Thu Nov 14 11:28:32 2019 +0100

    CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt
---
 components/camel-xslt-saxon/pom.xml                |  6 ++
 .../src/main/docs/xslt-saxon-component.adoc        |  6 +-
 .../xslt/saxon/XsltSaxonAggregationStrategy.java   |  4 +-
 .../component/xslt/saxon/XsltSaxonComponent.java   |  7 +-
 .../component/xslt/saxon/XsltSaxonEndpoint.java    | 41 ++++++------
 .../component/xslt/saxon/XsltSaxonHelper.java      | 74 +++++-----------------
 .../component/xslt/XsltAggregationStrategy.java    |  9 ++-
 .../dsl/XsltSaxonEndpointBuilderFactory.java       |  9 +--
 .../XsltSaxonComponentConfiguration.java           |  6 +-
 9 files changed, 70 insertions(+), 92 deletions(-)

diff --git a/components/camel-xslt-saxon/pom.xml b/components/camel-xslt-saxon/pom.xml
index 5ad9aa5..8e3b123 100644
--- a/components/camel-xslt-saxon/pom.xml
+++ b/components/camel-xslt-saxon/pom.xml
@@ -33,6 +33,12 @@
     <name>Camel :: XSLT Saxon</name>
     <description>Camel XSLT Saxon component</description>
 
+    <properties>
+        <camel.osgi.import.additional>
+            net.sf.saxon.*;version="[9.9.0,10)"
+        </camel.osgi.import.additional>
+    </properties>
+
     <dependencies>
 
         <dependency>
diff --git a/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc b/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
index f0fafff..6114496 100644
--- a/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
+++ b/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
@@ -47,7 +47,7 @@ The XSLT Saxon component supports 9 options, which are listed below.
 |===
 | Name | Description | Default | Type
 | *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
-| *saxonConfiguration* (advanced) | To use a custom Saxon configuration |  | Object
+| *saxonConfiguration* (advanced) | To use a custom Saxon configuration |  | Configuration
 | *saxonConfiguration Properties* (advanced) | To set custom Saxon configuration properties |  | Map
 | *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
 | *uriResolver* (advanced) | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. |  | URIResolver
@@ -85,7 +85,7 @@ with the following path and query parameters:
 |===
 | 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
-| *saxonConfiguration* (advanced) | To use a custom Saxon configuration |  | Object
+| *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
 | *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
@@ -132,7 +132,7 @@ The component supports 10 options, which are listed below.
 | *camel.component.xslt-saxon.content-cache* | 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
 | *camel.component.xslt-saxon.enabled* | Whether to enable auto configuration of the xslt-saxon component. This is enabled by default. |  | Boolean
 | *camel.component.xslt-saxon.lazy-start-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 [...]
-| *camel.component.xslt-saxon.saxon-configuration* | To use a custom Saxon configuration. The option is a java.lang.Object type. |  | String
+| *camel.component.xslt-saxon.saxon-configuration* | To use a custom Saxon configuration. The option is a net.sf.saxon.Configuration type. |  | String
 | *camel.component.xslt-saxon.saxon-configuration-properties* | To set custom Saxon configuration properties |  | Map
 | *camel.component.xslt-saxon.saxon-extension-functions* | 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
 | *camel.component.xslt-saxon.uri-resolver* | To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'. The option is a javax.xml.transform.URIResolver type. |  | String
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
index e05637c..ecefe2e 100644
--- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.xslt.saxon;
 
+import net.sf.saxon.TransformerFactoryImpl;
+
 import org.apache.camel.component.xslt.XsltAggregationStrategy;
 import org.apache.camel.component.xslt.XsltBuilder;
 
@@ -23,7 +25,7 @@ public class XsltSaxonAggregationStrategy extends XsltAggregationStrategy {
 
     public XsltSaxonAggregationStrategy(String xslFileLocation) {
         super(xslFileLocation);
-        setTransformerFactoryClass(XsltSaxonEndpoint.SAXON_TRANSFORMER_FACTORY_CLASS_NAME);
+        setTransformerFactory(new TransformerFactoryImpl());
     }
 
     @Override
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonComponent.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonComponent.java
index 4bb0a47..bbd4b0ba 100644
--- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonComponent.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonComponent.java
@@ -20,6 +20,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import net.sf.saxon.Configuration;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.xslt.XsltComponent;
 import org.apache.camel.spi.Metadata;
@@ -33,7 +34,7 @@ import org.apache.camel.support.EndpointHelper;
 public class XsltSaxonComponent extends XsltComponent {
 
     @Metadata(label = "advanced")
-    private Object saxonConfiguration;
+    private Configuration saxonConfiguration;
     @Metadata(label = "advanced")
     private Map<String, Object> saxonConfigurationProperties = new HashMap<>();
     @Metadata(label = "advanced", javaType = "java.lang.String")
@@ -65,14 +66,14 @@ public class XsltSaxonComponent extends XsltComponent {
         );
     }
 
-    public Object getSaxonConfiguration() {
+    public Configuration getSaxonConfiguration() {
         return saxonConfiguration;
     }
 
     /**
      * To use a custom Saxon configuration
      */
-    public void setSaxonConfiguration(Object saxonConfiguration) {
+    public void setSaxonConfiguration(Configuration saxonConfiguration) {
         this.saxonConfiguration = saxonConfiguration;
     }
 
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java
index ee7ab45..b04e6ed 100644
--- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java
@@ -21,6 +21,8 @@ import java.util.List;
 import java.util.Map;
 import javax.xml.transform.TransformerFactory;
 
+import net.sf.saxon.Configuration;
+import net.sf.saxon.TransformerFactoryImpl;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.api.management.ManagedAttribute;
@@ -34,15 +36,13 @@ import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.EndpointHelper;
 
 /**
- * Transforms the message using a XSLT template.
+ * Transforms the message using a XSLT template using Saxon.
  */
 @ManagedResource(description = "Managed XsltSaxonEndpoint")
 @UriEndpoint(firstVersion = "3.0.0", scheme = "xslt-saxon", title = "XSLT Saxon", syntax = "xslt-saxon:resourceUri", producerOnly = true, label = "core,transformation")
 public class XsltSaxonEndpoint extends XsltEndpoint {
-    public static final String SAXON_TRANSFORMER_FACTORY_CLASS_NAME = "net.sf.saxon.TransformerFactoryImpl";
-
     @UriParam(label = "advanced")
-    private Object saxonConfiguration;
+    private Configuration saxonConfiguration;
     @Metadata(label = "advanced")
     private Map<String, Object> saxonConfigurationProperties = new HashMap<>();
     @UriParam(label = "advanced", javaType = "java.lang.String")
@@ -80,14 +80,14 @@ public class XsltSaxonEndpoint extends XsltEndpoint {
         );
     }
 
-    public Object getSaxonConfiguration() {
+    public Configuration getSaxonConfiguration() {
         return saxonConfiguration;
     }
 
     /**
      * To use a custom Saxon configuration
      */
-    public void setSaxonConfiguration(Object saxonConfiguration) {
+    public void setSaxonConfiguration(Configuration saxonConfiguration) {
         this.saxonConfiguration = saxonConfiguration;
     }
 
@@ -132,21 +132,24 @@ public class XsltSaxonEndpoint extends XsltEndpoint {
 
         final XsltSaxonBuilder xslt = injector.newInstance(XsltSaxonBuilder.class);
 
-        String fc = getTransformerFactoryClass();
-        if (fc == null) {
-            fc = SAXON_TRANSFORMER_FACTORY_CLASS_NAME;
-        }
-
         TransformerFactory factory = getTransformerFactory();
         if (factory == null) {
-            // provide the class loader of this component to work in OSGi environments
-            Class<TransformerFactory> factoryClass = resolver.resolveMandatoryClass(fc, TransformerFactory.class, XsltSaxonComponent.class.getClassLoader());
-            log.debug("Using TransformerFactoryClass {}", factoryClass);
-            factory = injector.newInstance(factoryClass);
-
-            XsltSaxonHelper.registerSaxonConfiguration(ctx, factoryClass, factory, saxonConfiguration);
-            XsltSaxonHelper.registerSaxonConfigurationProperties(ctx, factoryClass, factory, saxonConfigurationProperties);
-            XsltSaxonHelper.registerSaxonExtensionFunctions(ctx, factoryClass, factory, saxonExtensionFunctions);
+            if (getTransformerFactoryClass() == null) {
+                // create new saxon factory
+                factory = new TransformerFactoryImpl();
+            } else {
+                // provide the class loader of this component to work in OSGi environments
+                Class<TransformerFactory> factoryClass = resolver.resolveMandatoryClass(getTransformerFactoryClass(), TransformerFactory.class, XsltSaxonComponent.class.getClassLoader());
+                log.debug("Using TransformerFactoryClass {}", factoryClass);
+                factory = injector.newInstance(factoryClass);
+            }
+        }
+
+        if (factory instanceof TransformerFactoryImpl) {
+            TransformerFactoryImpl tf = (TransformerFactoryImpl) factory;
+            XsltSaxonHelper.registerSaxonConfiguration(tf, saxonConfiguration);
+            XsltSaxonHelper.registerSaxonConfigurationProperties(tf, saxonConfigurationProperties);
+            XsltSaxonHelper.registerSaxonExtensionFunctions(tf, saxonExtensionFunctions);
         }
 
         if (factory != null) {
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
index 0a6944d..88d7edd 100644
--- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
@@ -16,89 +16,47 @@
  */
 package org.apache.camel.component.xslt.saxon;
 
-import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
-
 import javax.xml.XMLConstants;
-import javax.xml.transform.TransformerFactory;
 
-import org.apache.camel.CamelContext;
+import net.sf.saxon.Configuration;
+import net.sf.saxon.TransformerFactoryImpl;
+import net.sf.saxon.lib.ExtensionFunctionDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 final class XsltSaxonHelper {
     private static final Logger LOG = LoggerFactory.getLogger(XsltSaxonHelper.class);
 
-    // TODO: Avoid dynamic class-loading
-
-    private static final String SAXON_CONFIGURATION_CLASS_NAME = "net.sf.saxon.Configuration";
-    private static final String SAXON_EXTENDED_FUNCTION_DEFINITION_CLASS_NAME = "net.sf.saxon.lib.ExtensionFunctionDefinition";
-
     private XsltSaxonHelper() {
     }
 
-    public static void registerSaxonConfiguration(
-            CamelContext camelContext, Class<?> factoryClass, TransformerFactory factory, Object saxonConfiguration) throws Exception {
-
+    public static void registerSaxonConfiguration(TransformerFactoryImpl factory, Configuration saxonConfiguration) throws Exception {
         if (saxonConfiguration != null) {
-            Class<?> configurationClass = camelContext.getClassResolver().resolveClass(SAXON_CONFIGURATION_CLASS_NAME);
-            if (configurationClass != null) {
-                Method method = factoryClass.getMethod("setConfiguration", configurationClass);
-                if (method != null) {
-                    method.invoke(factory, configurationClass.cast(saxonConfiguration));
-                }
-            }
+            factory.setConfiguration(saxonConfiguration);
         }
     }
 
-    public static void registerSaxonConfigurationProperties(
-            CamelContext camelContext, Class<?> factoryClass, TransformerFactory factory, Map<String, Object> saxonConfigurationProperties) throws Exception {
-
+    public static void registerSaxonConfigurationProperties(TransformerFactoryImpl factory,
+                                                            Map<String, Object> saxonConfigurationProperties) throws Exception {
         if (saxonConfigurationProperties != null && !saxonConfigurationProperties.isEmpty()) {
-            Method method = factoryClass.getMethod("getConfiguration");
-            if (method != null) {
-                Object configuration = method.invoke(factory);
-                if (configuration != null) {
-                    method = configuration.getClass().getMethod("setConfigurationProperty", String.class, Object.class);
-                    for (Map.Entry<String, Object> entry : saxonConfigurationProperties.entrySet()) {
-                        method.invoke(configuration, entry.getKey(), entry.getValue());
-                    }
-                }
+            for (Map.Entry<String, Object> entry : saxonConfigurationProperties.entrySet()) {
+                factory.getConfiguration().setConfigurationProperty(entry.getKey(), entry.getValue());
             }
         }
     }
 
-    public static void registerSaxonExtensionFunctions(
-            CamelContext camelContext, Class<?> factoryClass, TransformerFactory factory, List<Object> saxonExtensionFunctions) throws Exception {
-
+    public static void registerSaxonExtensionFunctions(TransformerFactoryImpl factory, List<Object> saxonExtensionFunctions) throws Exception {
         if (saxonExtensionFunctions != null && !saxonExtensionFunctions.isEmpty()) {
-            Method method = factoryClass.getMethod("getConfiguration");
-            if (method != null) {
-                Object configuration = method.invoke(factory);
-                if (configuration != null) {
-                    Class<?> extensionClass = camelContext.getClassResolver().resolveMandatoryClass(
-                        SAXON_EXTENDED_FUNCTION_DEFINITION_CLASS_NAME, XsltSaxonComponent.class.getClassLoader()
-                    );
-
-                    method = configuration.getClass().getMethod("registerExtensionFunction", extensionClass);
-                    if (method != null) {
-                        factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-                        for (Object extensionFunction : saxonExtensionFunctions) {
-                            if (extensionClass.isInstance(extensionFunction)) {
-                                LOG.debug("Saxon.registerExtensionFunction {}", extensionFunction);
-                                method.invoke(configuration, extensionFunction);
-                            }
-                        }
-                    } else {
-                        LOG.warn("Unable to get reference to method registerExtensionFunction on {}", configuration.getClass().getName());
-                    }
-                } else {
-                    LOG.warn("Unable to get Saxon configuration ({}) on {}", SAXON_CONFIGURATION_CLASS_NAME, factory.getClass().getName());
+            factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+            for (Object extensionFunction : saxonExtensionFunctions) {
+                if (extensionFunction instanceof ExtensionFunctionDefinition) {
+                    LOG.debug("Saxon.registerExtensionFunction {}", extensionFunction);
+                    factory.getConfiguration().registerExtensionFunction((ExtensionFunctionDefinition) extensionFunction);
                 }
-            } else {
-                LOG.warn("Unable to get reference to method getConfiguration on {}", factoryClass.getName());
             }
         }
     }
+    
 }
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
index 8cfbd00..63d2ad3 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
@@ -70,6 +70,7 @@ public class XsltAggregationStrategy extends ServiceSupport implements Aggregati
 
     private String propertyName;
     private final String xslFile;
+    private TransformerFactory transformerFactory;
     private String transformerFactoryClass;
     private XsltOutput output = XsltOutput.string;
 
@@ -136,6 +137,10 @@ public class XsltAggregationStrategy extends ServiceSupport implements Aggregati
         this.transformerFactoryClass = transformerFactoryClass;
     }
 
+    public void setTransformerFactory(TransformerFactory transformerFactory) {
+        this.transformerFactory = transformerFactory;
+    }
+
     public String getPropertyName() {
         return propertyName;
     }
@@ -218,11 +223,13 @@ public class XsltAggregationStrategy extends ServiceSupport implements Aggregati
         // initialize the XsltBuilder
         this.xslt = createXsltBuilder();
 
-        if (transformerFactoryClass != null) {
+        if (transformerFactory == null && transformerFactoryClass != null) {
             Class<?> factoryClass = camelContext.getClassResolver().resolveMandatoryClass(transformerFactoryClass,
                 XsltAggregationStrategy.class.getClassLoader());
             TransformerFactory factory = (TransformerFactory) camelContext.getInjector().newInstance(factoryClass);
             xslt.setTransformerFactory(factory);
+        } else if (transformerFactory != null) {
+            xslt.setTransformerFactory(transformerFactory);
         }
 
         if (uriResolver == null) {
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java
index 09807d2..e6e5371 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java
@@ -23,7 +23,7 @@ import org.apache.camel.builder.EndpointProducerBuilder;
 import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
 
 /**
- * Transforms the message using a XSLT template.
+ * Transforms the message using a XSLT template using Saxon.
  *
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
@@ -264,7 +264,7 @@ public interface XsltSaxonEndpointBuilderFactory {
         /**
          * To use a custom Saxon configuration.
          *
-         * The option is a: <code>java.lang.Object</code> type.
+         * The option is a: <code>net.sf.saxon.Configuration</code> type.
          *
          * Group: advanced
          */
@@ -276,7 +276,8 @@ public interface XsltSaxonEndpointBuilderFactory {
         /**
          * To use a custom Saxon configuration.
          *
-         * The option will be converted to a <code>java.lang.Object</code> type.
+         * The option will be converted to a
+         * <code>net.sf.saxon.Configuration</code> type.
          *
          * Group: advanced
          */
@@ -535,7 +536,7 @@ public interface XsltSaxonEndpointBuilderFactory {
     }
     /**
      * XSLT Saxon (camel-xslt-saxon)
-     * Transforms the message using a XSLT template.
+     * Transforms the message using a XSLT template using Saxon.
      *
      * Category: core,transformation
      * Available as of version: 3.0
diff --git a/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentConfiguration.java
index b674ad2..c0238d8 100644
--- a/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-xslt-saxon-starter/src/main/java/org/apache/camel/component/xslt/saxon/springboot/XsltSaxonComponentConfiguration.java
@@ -22,7 +22,7 @@ import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
- * Transforms the message using a XSLT template.
+ * Transforms the message using a XSLT template using Saxon.
  *
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
@@ -45,8 +45,8 @@ public class XsltSaxonComponentConfiguration
      */
     private String saxonExtensionFunctions;
     /**
-     * To use a custom Saxon configuration. The option is a java.lang.Object
-     * type.
+     * To use a custom Saxon configuration. The option is a
+     * net.sf.saxon.Configuration type.
      */
     private String saxonConfiguration;
     /**

Reply | Threaded
Open this post in threaded view
|

[camel] 04/05: CAMEL-14167: Avoid using deprecated api in saxon

davsclaus-2
In reply to this post by davsclaus-2
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch saxon
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 129e94094ebe8257d3b4cd1c95dd76b7738e4963
Author: Claus Ibsen <[hidden email]>
AuthorDate: Thu Nov 14 11:42:00 2019 +0100

    CAMEL-14167: Avoid using deprecated api in saxon
---
 .../main/java/org/apache/camel/component/xquery/XQueryBuilder.java | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java b/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
index 16b3894..dee9bd8 100644
--- a/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
+++ b/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
@@ -40,6 +40,7 @@ import javax.xml.transform.stax.StAXSource;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
+import net.sf.saxon.om.TreeInfo;
 import org.w3c.dom.Node;
 
 import net.sf.saxon.Configuration;
@@ -508,7 +509,7 @@ public abstract class XQueryBuilder implements Expression, Predicate, NamespaceA
         if (item != null) {
             dynamicQueryContext.setContextItem(item);
         } else {
-            Object body = null;
+            Object body;
             if (ObjectHelper.isNotEmpty(getHeaderName())) {
                 body = in.getHeader(getHeaderName());
             } else {
@@ -536,8 +537,8 @@ public abstract class XQueryBuilder implements Expression, Predicate, NamespaceA
                     throw new NoTypeConversionAvailableException(body, Source.class);
                 }
 
-                DocumentInfo doc = config.buildDocument(source);
-                dynamicQueryContext.setContextItem(doc);
+                TreeInfo doc = config.buildDocumentTree(source);
+                dynamicQueryContext.setContextItem(doc.getRootNode());
             } finally {
                 // can deal if is is null
                 IOHelper.close(is);

Reply | Threaded
Open this post in threaded view
|

[camel] 05/05: CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt

davsclaus-2
In reply to this post by davsclaus-2
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch saxon
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ec6cd959b6bed9bc949e424d93e556065aa3459e
Author: Claus Ibsen <[hidden email]>
AuthorDate: Thu Nov 14 12:37:11 2019 +0100

    CAMEL-14167: camel-xslt - Split up into camel-saxon-xslt
---
 .../org/apache/camel/component/xslt/ManagedXsltOutputBytesTest.java    | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/core/camel-management/src/test/java/org/apache/camel/component/xslt/ManagedXsltOutputBytesTest.java b/core/camel-management/src/test/java/org/apache/camel/component/xslt/ManagedXsltOutputBytesTest.java
index 474b20b..9c9225c 100644
--- a/core/camel-management/src/test/java/org/apache/camel/component/xslt/ManagedXsltOutputBytesTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/component/xslt/ManagedXsltOutputBytesTest.java
@@ -54,9 +54,6 @@ public class ManagedXsltOutputBytesTest extends ContextTestSupport {
         String uri = (String) mbeanServer.getAttribute(on, "EndpointUri");
         assertEquals("xslt://org/apache/camel/component/xslt/example.xsl?output=bytes", uri);
 
-        Boolean saxon = (Boolean) mbeanServer.getAttribute(on, "Saxon");
-        assertEquals(false, saxon.booleanValue());
-
         XsltOutput output = (XsltOutput) mbeanServer.getAttribute(on, "Output");
         assertEquals(XsltOutput.bytes, output);