You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/01/27 16:28:09 UTC

[camel] branch master updated: Xslt (#2736)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 363ca7d  Xslt (#2736)
363ca7d is described below

commit 363ca7d07647cdff2b371fe5ef0278846c5d9adb
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jan 27 17:28:03 2019 +0100

    Xslt (#2736)
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * Regen
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
    
    * CAMEL-13124: camel3 - move xslt componet out of camel-core
---
 apache-camel/pom.xml                               |  10 +
 apache-camel/src/main/descriptors/common-bin.xml   |   2 +
 .../apache/camel/converter/jaxp/XmlConverter.java  |   1 +
 camel-core/pom.xml                                 |   5 +
 camel-core/readme.adoc                             |   5 +-
 .../camel/builder/XsltAggregationStrategy.java     |   8 +-
 .../apache/camel/component/xslt/XmlConverter.java  |  43 -----
 .../apache/camel/builder/xml/XsltBuilderTest.java  |  19 +-
 .../camel/builder/xml/XsltOutputFileTest.java      |   2 +-
 .../org/apache/camel/builder/xml/XsltTest.java     |   2 +-
 .../builder/xml/XsltTestErrorListenerTest.java     |  54 ------
 .../camel/builder/xml/XsltUriResolverTest.java     |   1 +
 .../component/xslt/XsltReferenceParameterTest.java |  86 ---------
 .../component/xslt/XsltUriResolverFactoryTest.java |   1 -
 .../camel/converter/jaxp/StAX2SAXSourceTest.java   |   1 +
 .../camel/support/builder/xml}/StAX2SAXSource.java |   2 +-
 .../helper => builder/xml}/XMLConverterHelper.java | 118 +++++++++++-
 .../processor/validation/ValidatingProcessor.java  |   2 +-
 components/camel-saxon/pom.xml                     |   4 +
 .../camel/component/xslt/SaxonUriResolverTest.java |   1 -
 components/camel-spring-ws/pom.xml                 |   4 +
 .../impl/HeaderTransformationMessageFilter.java    |   2 +-
 .../package.html => components/camel-xslt/pom.xml  |  32 +++-
 .../camel-xslt}/src/main/docs/xslt-component.adoc  |   6 +-
 .../xslt}/DefaultTransformErrorHandler.java        |   2 +-
 .../xslt/DefaultXsltUriResolverFactory.java        |   1 -
 .../camel/component/xslt}/DomResultHandler.java    |   3 +-
 .../component/xslt}/DomResultHandlerFactory.java   |   2 +-
 .../camel/component/xslt}/FileResultHandler.java   |   2 +-
 .../component/xslt}/FileResultHandlerFactory.java  |   2 +-
 .../camel/component/xslt}/ResultHandler.java       |   2 +-
 .../component/xslt}/ResultHandlerFactory.java      |   4 +-
 .../camel/component/xslt}/StreamResultHandler.java |   3 +-
 .../xslt}/StreamResultHandlerFactory.java          |   2 +-
 .../camel/component/xslt}/StringResultHandler.java |   3 +-
 .../xslt}/StringResultHandlerFactory.java          |   2 +-
 .../apache/camel/component/xslt}/XsltBuilder.java  |  29 ++-
 .../apache/camel/component/xslt/XsltComponent.java |  15 +-
 .../apache/camel/component/xslt/XsltEndpoint.java  |  20 +-
 .../camel/component/xslt}/XsltErrorListener.java   |   2 +-
 .../apache/camel/component/xslt/XsltHelper.java    |   0
 .../apache/camel/component/xslt/XsltOutput.java    |   0
 .../camel/component/xslt}/XsltUriResolver.java     |   2 +-
 .../component/xslt/XsltUriResolverFactory.java     |   0
 .../org/apache/camel/component/xslt/package.html   |   0
 components/pom.xml                                 |   1 +
 components/readme.adoc                             |   4 +-
 docs/components/modules/ROOT/nav.adoc              |   1 +
 .../modules/ROOT/pages}/xslt-component.adoc        |   6 +-
 parent/pom.xml                                     |  10 +
 .../karaf/features/src/main/resources/features.xml |   1 +
 .../springboot/XsltComponentConfiguration.java     |  38 ----
 .../components-starter/camel-xslt-starter}/pom.xml |  67 ++-----
 .../springboot/XsltComponentAutoConfiguration.java | 128 +++++++++++++
 .../springboot/XsltComponentConfiguration.java     |  38 ----
 .../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 ++
 platforms/spring-boot/components-starter/pom.xml   |   1 +
 60 files changed, 624 insertions(+), 428 deletions(-)

diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index 399f573..d54ec32 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -1440,6 +1440,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xslt</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-xstream</artifactId>
       <version>${project.version}</version>
     </dependency>
@@ -2739,6 +2744,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xslt-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 d2bbbca..6a012ee 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -309,6 +309,7 @@
         <include>org.apache.camel:camel-xchange</include>
         <include>org.apache.camel:camel-xmlsecurity</include>
         <include>org.apache.camel:camel-xmpp</include>
+        <include>org.apache.camel:camel-xslt</include>
         <include>org.apache.camel:camel-xstream</include>
         <include>org.apache.camel:camel-yammer</include>
         <include>org.apache.camel:camel-zendesk</include>
@@ -606,6 +607,7 @@
         <include>org.apache.camel:camel-xchange-starter</include>
         <include>org.apache.camel:camel-xmlsecurity-starter</include>
         <include>org.apache.camel:camel-xmpp-starter</include>
+        <include>org.apache.camel:camel-xslt-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/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java b/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
index 17fff76..5fd6eac 100644
--- a/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
+++ b/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
@@ -71,6 +71,7 @@ import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
 import org.apache.camel.StringSource;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.builder.xml.StAX2SAXSource;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
diff --git a/camel-core/pom.xml b/camel-core/pom.xml
index 0cae089..2fc45a0 100644
--- a/camel-core/pom.xml
+++ b/camel-core/pom.xml
@@ -215,6 +215,11 @@
       <artifactId>camel-vm</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xslt</artifactId>
+      <version>${project.version}</version>
+    </dependency>
 
     <!-- required dependencies by camel-core -->
     <!-- which we shade into camel-core so its available for everybody out of the box -->
diff --git a/camel-core/readme.adoc b/camel-core/readme.adoc
index d53fd09..a402aa4 100644
--- a/camel-core/readme.adoc
+++ b/camel-core/readme.adoc
@@ -5,7 +5,7 @@
 
 
 // components: START
-Number of Components: 8 in 1 JAR artifacts (0 deprecated)
+Number of Components: 7 in 1 JAR artifacts (0 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -32,9 +32,6 @@ Number of Components: 8 in 1 JAR artifacts (0 deprecated)
 | link:src/main/docs/test-component.adoc[Test] (camel-core) +
 `test:name` | 1.3 | The test component extends the mock component by on startup to pull messages from another endpoint to set the expected message bodies.
 
-| link:src/main/docs/xslt-component.adoc[XSLT] (camel-core) +
-`xslt:resourceUri` | 1.3 | Transforms the message using a XSLT template.
-
 |===
 // components: END
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/XsltAggregationStrategy.java b/camel-core/src/main/java/org/apache/camel/builder/XsltAggregationStrategy.java
index 03d7455..16862b2 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/XsltAggregationStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/XsltAggregationStrategy.java
@@ -30,8 +30,8 @@ import org.apache.camel.AggregationStrategy;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
-import org.apache.camel.builder.xml.XsltBuilder;
-import org.apache.camel.builder.xml.XsltUriResolver;
+import org.apache.camel.component.xslt.XsltBuilder;
+import org.apache.camel.component.xslt.XsltUriResolver;
 import org.apache.camel.component.xslt.XsltEndpoint;
 import org.apache.camel.component.xslt.XsltOutput;
 import org.apache.camel.support.service.ServiceSupport;
@@ -66,6 +66,8 @@ import org.slf4j.LoggerFactory;
  */
 public class XsltAggregationStrategy extends ServiceSupport implements AggregationStrategy, CamelContextAware {
 
+    // TODO: move to camel-xslt in org.apache.camel.component.xslt package (not having split osgi packages)
+
     private static final Logger LOG = LoggerFactory.getLogger(XsltAggregationStrategy.class);
     private static final String DEFAULT_PROPERTY_NAME = "new-exchange";
 
@@ -228,7 +230,7 @@ public class XsltAggregationStrategy extends ServiceSupport implements Aggregati
             Class<?> factoryClass = camelContext.getClassResolver().resolveMandatoryClass(transformerFactoryClass,
                 XsltAggregationStrategy.class.getClassLoader());
             TransformerFactory factory = (TransformerFactory) camelContext.getInjector().newInstance(factoryClass);
-            xslt.getConverter().setTransformerFactory(factory);
+            xslt.setTransformerFactory(factory);
         }
 
         if (uriResolver == null) {
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/XmlConverter.java b/camel-core/src/main/java/org/apache/camel/component/xslt/XmlConverter.java
deleted file mode 100644
index 3ba62e7..0000000
--- a/camel-core/src/main/java/org/apache/camel/component/xslt/XmlConverter.java
+++ /dev/null
@@ -1,43 +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 javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.TransformerFactory;
-
-public class XmlConverter extends org.apache.camel.converter.jaxp.XmlConverter {
-
-    @Override
-    public DocumentBuilderFactory getDocumentBuilderFactory() {
-        return super.getDocumentBuilderFactory();
-    }
-
-    @Override
-    public void setDocumentBuilderFactory(DocumentBuilderFactory documentBuilderFactory) {
-        super.setDocumentBuilderFactory(documentBuilderFactory);
-    }
-
-    @Override
-    public TransformerFactory getTransformerFactory() {
-        return super.getTransformerFactory();
-    }
-
-    @Override
-    public void setTransformerFactory(TransformerFactory transformerFactory) {
-        super.setTransformerFactory(transformerFactory);
-    }
-}
diff --git a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
index 68b0ceb..e4a4fed 100644
--- a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
+++ b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
@@ -26,6 +26,8 @@ import javax.xml.transform.Source;
 import javax.xml.transform.Templates;
 import javax.xml.transform.sax.SAXSource;
 
+import org.apache.camel.component.xslt.StreamResultHandlerFactory;
+import org.apache.camel.component.xslt.XsltBuilder;
 import org.w3c.dom.Document;
 
 import org.xml.sax.InputSource;
@@ -263,23 +265,6 @@ public class XsltBuilderTest extends ContextTestSupport {
     }
 
     @Test
-    public void testXsltSetConverter() throws Exception {
-        URL styleSheet = getClass().getResource("example.xsl");
-
-        XsltBuilder builder = XsltBuilder.xslt(styleSheet);
-        XmlConverter converter = new XmlConverter();
-        builder.setConverter(converter);
-        assertSame(converter, builder.getConverter());
-
-        Exchange exchange = new DefaultExchange(context);
-        exchange.getIn().setBody("<hello>world!</hello>");
-
-        builder.process(exchange);
-
-        assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?><goodbye>world!</goodbye>", exchange.getOut().getBody());
-    }
-
-    @Test
     public void testXsltResultHandler() throws Exception {
         URL styleSheet = getClass().getResource("example.xsl");
 
diff --git a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltOutputFileTest.java b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltOutputFileTest.java
index 55a06cf..d44155d 100644
--- a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltOutputFileTest.java
+++ b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltOutputFileTest.java
@@ -27,7 +27,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-import static org.apache.camel.builder.xml.XsltBuilder.xslt;
+import static org.apache.camel.component.xslt.XsltBuilder.xslt;
 
 public class XsltOutputFileTest extends ContextTestSupport {
 
diff --git a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTest.java b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTest.java
index c101f01..9acb3da 100644
--- a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTest.java
+++ b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-import static org.apache.camel.builder.xml.XsltBuilder.xslt;
+import static org.apache.camel.component.xslt.XsltBuilder.xslt;
 
 public class XsltTest extends ContextTestSupport {
 
diff --git a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTestErrorListenerTest.java b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTestErrorListenerTest.java
deleted file mode 100644
index 233882c..0000000
--- a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltTestErrorListenerTest.java
+++ /dev/null
@@ -1,54 +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.builder.xml;
-
-import java.net.URL;
-
-import javax.xml.transform.ErrorListener;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-public class XsltTestErrorListenerTest extends Assert {
-
-    private XsltBuilder xsltBuilder = new XsltBuilder();
-    private ErrorListener errorListener = mock(ErrorListener.class);
-
-    @Test
-    public void testErrorListener() throws Exception {
-        // Xalan transformer cannot work as expected, so we just skip the test
-        if (xsltBuilder.getConverter().getTransformerFactory().getClass().getName().startsWith("org.apache.xalan")) {
-            return;
-        }
-
-        URL styleSheet = getClass().getResource("example-with-errors.xsl");
-        try {
-            xsltBuilder.setErrorListener(errorListener);
-            xsltBuilder.setTransformerURL(styleSheet);
-            fail("Should throw exception");
-        } catch (Exception ex) {
-            // expected
-        }
-        verify(errorListener, atLeastOnce()).error(any());
-        verify(errorListener).fatalError(any());
-    }
-}
diff --git a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltUriResolverTest.java b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltUriResolverTest.java
index c36aa99..856d1c0 100644
--- a/camel-core/src/test/java/org/apache/camel/builder/xml/XsltUriResolverTest.java
+++ b/camel-core/src/test/java/org/apache/camel/builder/xml/XsltUriResolverTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.builder.xml;
 import javax.xml.transform.Source;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.component.xslt.XsltUriResolver;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/camel-core/src/test/java/org/apache/camel/component/xslt/XsltReferenceParameterTest.java b/camel-core/src/test/java/org/apache/camel/component/xslt/XsltReferenceParameterTest.java
deleted file mode 100644
index 29981b4..0000000
--- a/camel-core/src/test/java/org/apache/camel/component/xslt/XsltReferenceParameterTest.java
+++ /dev/null
@@ -1,86 +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 javax.xml.transform.TransformerFactory;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.TestSupport;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.builder.xml.XsltBuilder;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.impl.JndiRegistry;
-import org.apache.camel.support.ProcessorEndpoint;
-import org.apache.camel.support.jndi.JndiContext;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- *
- */
-public class XsltReferenceParameterTest extends TestSupport {
-
-    private static final String TEST_URI_1 =
-        "xslt:org/apache/camel/component/xslt/transform.xsl?converter=#testConverter&transformerFactory=#testTransformerFactory";
-
-    private TestConverter testConverter;
-    private TransformerFactory testTransformerFactory;
-
-    private XsltBuilder builder1;
-
-    @Before
-    public void setUp() throws Exception {
-        JndiRegistry registry = new JndiRegistry(new JndiContext());
-        RouteBuilder builder = createRouteBuilder();
-        CamelContext context = new DefaultCamelContext(registry);
-
-        testConverter = new TestConverter();
-        testTransformerFactory = TransformerFactory.newInstance();
-
-        registry.bind("testConverter", testConverter);
-        registry.bind("testTransformerFactory", testTransformerFactory);
-
-        ProcessorEndpoint pep1 = context.getEndpoint(TEST_URI_1, ProcessorEndpoint.class);
-
-        context.addRoutes(builder);
-        context.start();
-
-        builder1 = (XsltBuilder)pep1.getProcessor();
-    }
-
-    @Test
-    public void testConverterReference() {
-        assertSame(testConverter, builder1.getConverter());
-    }
-
-    @Test
-    public void testTransformerFactoryReference() {
-        assertSame(testTransformerFactory, builder1.getConverter().getTransformerFactory());
-    }
-
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            public void configure() throws Exception {
-                from("direct:a").to(TEST_URI_1);
-            }
-        };
-    }
-
-    private static class TestConverter extends XmlConverter {
-    }
-
-}
diff --git a/camel-core/src/test/java/org/apache/camel/component/xslt/XsltUriResolverFactoryTest.java b/camel-core/src/test/java/org/apache/camel/component/xslt/XsltUriResolverFactoryTest.java
index 7ff4f4a..ad4edf1 100644
--- a/camel-core/src/test/java/org/apache/camel/component/xslt/XsltUriResolverFactoryTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/xslt/XsltUriResolverFactoryTest.java
@@ -28,7 +28,6 @@ import javax.xml.transform.URIResolver;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.builder.xml.XsltUriResolver;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.model.language.ConstantExpression;
diff --git a/camel-core/src/test/java/org/apache/camel/converter/jaxp/StAX2SAXSourceTest.java b/camel-core/src/test/java/org/apache/camel/converter/jaxp/StAX2SAXSourceTest.java
index 6c8847c..6f283f6 100644
--- a/camel-core/src/test/java/org/apache/camel/converter/jaxp/StAX2SAXSourceTest.java
+++ b/camel-core/src/test/java/org/apache/camel/converter/jaxp/StAX2SAXSourceTest.java
@@ -31,6 +31,7 @@ import javax.xml.transform.stream.StreamSource;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultExchange;
+import org.apache.camel.support.builder.xml.StAX2SAXSource;
 import org.junit.Test;
 
 import static org.hamcrest.core.IsEqual.equalTo;
diff --git a/camel-base/src/main/java/org/apache/camel/converter/jaxp/StAX2SAXSource.java b/camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
similarity index 99%
rename from camel-base/src/main/java/org/apache/camel/converter/jaxp/StAX2SAXSource.java
rename to camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
index 2d4c847..81d0642 100644
--- a/camel-base/src/main/java/org/apache/camel/converter/jaxp/StAX2SAXSource.java
+++ b/camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.converter.jaxp;
+package org.apache.camel.support.builder.xml;
 
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
diff --git a/camel-support/src/main/java/org/apache/camel/support/processor/validation/helper/XMLConverterHelper.java b/camel-support/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
similarity index 62%
rename from camel-support/src/main/java/org/apache/camel/support/processor/validation/helper/XMLConverterHelper.java
rename to camel-support/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
index fc8d3cf..d2eac49 100644
--- a/camel-support/src/main/java/org/apache/camel/support/processor/validation/helper/XMLConverterHelper.java
+++ b/camel-support/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.support.processor.validation.helper;
+package org.apache.camel.support.builder.xml;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -25,7 +25,11 @@ import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.ErrorListener;
+import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
 import javax.xml.transform.dom.DOMSource;
 
 import org.w3c.dom.Document;
@@ -36,19 +40,23 @@ import org.xml.sax.ErrorHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
-import org.apache.camel.support.processor.validation.ValidatingProcessor;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * XML converter support.
+ */
 public class XMLConverterHelper {
-    
-    private static final Logger LOG = LoggerFactory.getLogger(ValidatingProcessor.class);
+
+    private static final Logger LOG = LoggerFactory.getLogger(XMLConverterHelper.class);
     private static final ErrorHandler DOCUMENT_BUILDER_LOGGING_ERROR_HANDLER = new DocumentBuilderLoggingErrorHandler();
     private static final String DOCUMENT_BUILDER_FACTORY_FEATURE = "org.apache.camel.xmlconverter.documentBuilderFactory.feature";
+    private static final String JDK_FALLBACK_TRANSFORMER_FACTORY = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl";
 
     private volatile DocumentBuilderFactory documentBuilderFactory;
+    private volatile TransformerFactory transformerFactory;
 
     public XMLConverterHelper() {
     }
@@ -57,6 +65,21 @@ public class XMLConverterHelper {
         this.documentBuilderFactory = documentBuilderFactory;
     }
 
+    public void setDocumentBuilderFactory(DocumentBuilderFactory documentBuilderFactory) {
+        this.documentBuilderFactory = documentBuilderFactory;
+    }
+
+    public TransformerFactory getTransformerFactory() {
+        if (transformerFactory == null) {
+            transformerFactory = createTransformerFactory();
+        }
+        return transformerFactory;
+    }
+
+    public void setTransformerFactory(TransformerFactory transformerFactory) {
+        this.transformerFactory = transformerFactory;
+    }
+
     public Document toDOMDocument(final Node node) throws ParserConfigurationException, TransformerException {
         ObjectHelper.notNull(node, "node");
 
@@ -125,6 +148,72 @@ public class XMLConverterHelper {
         return factory;
     }
 
+    public TransformerFactory createTransformerFactory() {
+        TransformerFactory factory;
+        TransformerFactoryConfigurationError cause;
+        try {
+            factory = TransformerFactory.newInstance();
+        } catch (TransformerFactoryConfigurationError e) {
+            cause = e;
+            // try fallback from the JDK
+            try {
+                LOG.debug("Cannot create/load TransformerFactory due: {}. Will attempt to use JDK fallback TransformerFactory: {}", e.getMessage(), JDK_FALLBACK_TRANSFORMER_FACTORY);
+                factory = TransformerFactory.newInstance(JDK_FALLBACK_TRANSFORMER_FACTORY, null);
+            } catch (Throwable t) {
+                // okay we cannot load fallback then throw original exception
+                throw cause;
+            }
+        }
+        LOG.debug("Created TransformerFactory: {}", factory);
+
+        // Enable the Security feature by default
+        try {
+            factory.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);
+        } catch (TransformerConfigurationException e) {
+            LOG.warn("TransformerFactory doesn't support the feature {} with value {}, due to {}.", javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, "true", e);
+        }
+        factory.setErrorListener(new XmlErrorListener());
+        configureSaxonTransformerFactory(factory);
+        return factory;
+    }
+
+    /**
+     * Make a Saxon TransformerFactory more JAXP compliant by configuring it to
+     * send &lt;xsl:message&gt; output to the ErrorListener.
+     */
+    private void configureSaxonTransformerFactory(TransformerFactory factory) {
+        // check whether we have a Saxon TransformerFactory ("net.sf.saxon" for open source editions (HE / B)
+        // and "com.saxonica" for commercial editions (PE / EE / SA))
+        Class<?> factoryClass = factory.getClass();
+        if (factoryClass.getName().startsWith("net.sf.saxon")
+            || factoryClass.getName().startsWith("com.saxonica")) {
+
+            // just in case there are multiple class loaders with different Saxon versions, use the
+            // TransformerFactory's class loader to find Saxon support classes
+            ClassLoader loader = factoryClass.getClassLoader();
+
+            // try to find Saxon's MessageWarner class that redirects <xsl:message> to the ErrorListener
+            Class<?> messageWarner = null;
+            try {
+                // Saxon >= 9.3
+                messageWarner = loader.loadClass("net.sf.saxon.serialize.MessageWarner");
+            } catch (ClassNotFoundException cnfe) {
+                try {
+                    // Saxon < 9.3 (including Saxon-B / -SA)
+                    messageWarner = loader.loadClass("net.sf.saxon.event.MessageWarner");
+                } catch (ClassNotFoundException cnfe2) {
+                    LOG.warn("Error loading Saxon's net.sf.saxon.serialize.MessageWarner class from the classpath!"
+                        + " <xsl:message> output will not be redirected to the ErrorListener!");
+                }
+            }
+
+            if (messageWarner != null) {
+                // set net.sf.saxon.FeatureKeys.MESSAGE_EMITTER_CLASS
+                factory.setAttribute("http://saxon.sf.net/feature/messageEmitterClass", messageWarner.getName());
+            }
+        }
+    }
+
     public Document createDocument() throws ParserConfigurationException {
         DocumentBuilder builder = createDocumentBuilder();
         return builder.newDocument();
@@ -194,4 +283,25 @@ public class XMLConverterHelper {
             LOG.error(exception.getMessage(), exception);
         }
     }
+
+    /**
+     * A {@link javax.xml.transform.ErrorListener} that logs the errors.
+     */
+    private static class XmlErrorListener implements ErrorListener {
+
+        @Override
+        public void warning(TransformerException e) throws TransformerException {
+            LOG.warn(e.getMessage(), e);
+        }
+
+        @Override
+        public void error(TransformerException e) throws TransformerException {
+            LOG.error(e.getMessage(), e);
+        }
+
+        @Override
+        public void fatalError(TransformerException e) throws TransformerException {
+            LOG.error(e.getMessage(), e);
+        }
+    }
 }
diff --git a/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java b/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
index da079f9..108e190 100644
--- a/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
+++ b/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
@@ -49,7 +49,7 @@ import org.apache.camel.ExpectedBodyTypeException;
 import org.apache.camel.RuntimeTransformException;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.support.AsyncProcessorSupport;
-import org.apache.camel.support.processor.validation.helper.XMLConverterHelper;
+import org.apache.camel.support.builder.xml.XMLConverterHelper;
 import org.apache.camel.util.IOHelper;
 
 import static org.apache.camel.support.processor.validation.SchemaReader.ACCESS_EXTERNAL_DTD;
diff --git a/components/camel-saxon/pom.xml b/components/camel-saxon/pom.xml
index 1b26d17..c98a5f1 100644
--- a/components/camel-saxon/pom.xml
+++ b/components/camel-saxon/pom.xml
@@ -40,6 +40,10 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-core</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xslt</artifactId>
+    </dependency>
 
     <dependency>
       <groupId>net.sf.saxon</groupId>
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonUriResolverTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonUriResolverTest.java
index 09b233c..54e672a 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonUriResolverTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonUriResolverTest.java
@@ -28,7 +28,6 @@ import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
 import net.sf.saxon.TransformerFactoryImpl;
-import org.apache.camel.builder.xml.XsltUriResolver;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.camel.support.ResourceHelper;
 import org.junit.Assert;
diff --git a/components/camel-spring-ws/pom.xml b/components/camel-spring-ws/pom.xml
index 2de38a1..2b9d58b 100644
--- a/components/camel-spring-ws/pom.xml
+++ b/components/camel-spring-ws/pom.xml
@@ -51,6 +51,10 @@
       <artifactId>camel-spring</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xslt</artifactId>
+    </dependency>
+    <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>
       <version>${javax.servlet-api-version}</version>
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/HeaderTransformationMessageFilter.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/HeaderTransformationMessageFilter.java
index be0a853..c6b023f 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/HeaderTransformationMessageFilter.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/HeaderTransformationMessageFilter.java
@@ -29,10 +29,10 @@ import javax.xml.transform.TransformerFactory;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
-import org.apache.camel.builder.xml.XsltUriResolver;
 import org.apache.camel.component.spring.ws.filter.MessageFilter;
 import org.apache.camel.component.xslt.XsltComponent;
 import org.apache.camel.component.xslt.XsltEndpoint;
+import org.apache.camel.component.xslt.XsltUriResolver;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.support.ObjectHelper;
 import org.slf4j.Logger;
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/package.html b/components/camel-xslt/pom.xml
similarity index 52%
copy from camel-core/src/main/java/org/apache/camel/component/xslt/package.html
copy to components/camel-xslt/pom.xml
index c3db17a..b5e7238 100644
--- a/camel-core/src/main/java/org/apache/camel/component/xslt/package.html
+++ b/components/camel-xslt/pom.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
 
     Licensed to the Apache Software Foundation (ASF) under one or more
@@ -16,12 +17,29 @@
     limitations under the License.
 
 -->
-<html>
-<head>
-</head>
-<body>
+<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">
 
-The <a href="http://activemq.apache.org/camel/xslt.html">XSLT Component</a> for transforming messages with XSLT
+  <modelVersion>4.0.0</modelVersion>
 
-</body>
-</html>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>camel-xslt</artifactId>
+  <packaging>jar</packaging>
+  <name>Camel :: XSLT</name>
+  <description>Camel XSLT component</description>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-support</artifactId>
+    </dependency>
+
+  </dependencies>
+
+</project>
diff --git a/camel-core/src/main/docs/xslt-component.adoc b/components/camel-xslt/src/main/docs/xslt-component.adoc
similarity index 97%
copy from camel-core/src/main/docs/xslt-component.adoc
copy to components/camel-xslt/src/main/docs/xslt-component.adoc
index 5884dc9..415e578 100644
--- a/camel-core/src/main/docs/xslt-component.adoc
+++ b/components/camel-xslt/src/main/docs/xslt-component.adoc
@@ -54,14 +54,13 @@ directly in the camel-core.
 === Options
 
 // component options: START
-The XSLT component supports 9 options, which are listed below.
+The XSLT component supports 8 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *xmlConverter* (advanced) | To use a custom implementation of org.apache.camel.converter.jaxp.XmlConverter |  | XmlConverter
 | *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
@@ -93,7 +92,7 @@ with the following path and query parameters:
 |===
 
 
-==== Query Parameters (17 parameters):
+==== Query Parameters (16 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -106,7 +105,6 @@ with the following path and query parameters:
 | *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
-| *converter* (advanced) | To use a custom implementation of org.apache.camel.converter.jaxp.XmlConverter |  | XmlConverter
 | *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
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/DefaultTransformErrorHandler.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DefaultTransformErrorHandler.java
similarity index 98%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/DefaultTransformErrorHandler.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DefaultTransformErrorHandler.java
index f2f253d..f1d25de 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/DefaultTransformErrorHandler.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DefaultTransformErrorHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.TransformerException;
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/DefaultXsltUriResolverFactory.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DefaultXsltUriResolverFactory.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/component/xslt/DefaultXsltUriResolverFactory.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DefaultXsltUriResolverFactory.java
index 533150a..0fb8286 100644
--- a/camel-core/src/main/java/org/apache/camel/component/xslt/DefaultXsltUriResolverFactory.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DefaultXsltUriResolverFactory.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.xslt;
 import javax.xml.transform.URIResolver;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.builder.xml.XsltUriResolver;
 
 /**
  * Default URI resolver factory which instantiates the camel default XSLT URI
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/DomResultHandler.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DomResultHandler.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/DomResultHandler.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DomResultHandler.java
index 9a1d854..8dabf1d 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/DomResultHandler.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DomResultHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import javax.xml.transform.Result;
 import javax.xml.transform.dom.DOMResult;
@@ -25,6 +25,7 @@ import org.apache.camel.Message;
  * Uses DOM to handle results of the transformation
  */
 public class DomResultHandler implements ResultHandler {
+
     private DOMResult result = new DOMResult();
 
     public Result getResult() {
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/DomResultHandlerFactory.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DomResultHandlerFactory.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/DomResultHandlerFactory.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DomResultHandlerFactory.java
index 7acac8b..2bb83b2 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/DomResultHandlerFactory.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/DomResultHandlerFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import org.apache.camel.Exchange;
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/FileResultHandler.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/FileResultHandler.java
similarity index 97%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/FileResultHandler.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/FileResultHandler.java
index bceaf0e..fc6b1b5 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/FileResultHandler.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/FileResultHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import java.io.File;
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/FileResultHandlerFactory.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/FileResultHandlerFactory.java
similarity index 97%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/FileResultHandlerFactory.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/FileResultHandlerFactory.java
index 71cfd0c..0775bc9 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/FileResultHandlerFactory.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/FileResultHandlerFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import java.io.File;
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/ResultHandler.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/ResultHandler.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/ResultHandler.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/ResultHandler.java
index 2bf111a..e6f7495 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/ResultHandler.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/ResultHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import javax.xml.transform.Result;
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/ResultHandlerFactory.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/ResultHandlerFactory.java
similarity index 91%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/ResultHandlerFactory.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/ResultHandlerFactory.java
index dc48774..2fdbf75 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/ResultHandlerFactory.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/ResultHandlerFactory.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import org.apache.camel.Exchange;
 
 /**
- * Factory for {@link org.apache.camel.builder.xml.ResultHandler}
+ * Factory for {@link ResultHandler}
  */
 public interface ResultHandlerFactory {
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/StreamResultHandler.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StreamResultHandler.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/StreamResultHandler.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StreamResultHandler.java
index 7dd5252..26ed42a 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/StreamResultHandler.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StreamResultHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import java.io.ByteArrayOutputStream;
 
@@ -27,6 +27,7 @@ import org.apache.camel.Message;
  * Processes the XSLT result as a byte[]
  */
 public class StreamResultHandler implements ResultHandler {
+
     private ByteArrayOutputStream buffer = new ByteArrayOutputStream();
     private StreamResult result = new StreamResult(buffer);
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/StreamResultHandlerFactory.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StreamResultHandlerFactory.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/StreamResultHandlerFactory.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StreamResultHandlerFactory.java
index 933e47b..fb32796 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/StreamResultHandlerFactory.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StreamResultHandlerFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import org.apache.camel.Exchange;
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/StringResultHandler.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StringResultHandler.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/StringResultHandler.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StringResultHandler.java
index 703829c..a06621d 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/StringResultHandler.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StringResultHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import java.io.StringWriter;
 
@@ -27,6 +27,7 @@ import org.apache.camel.Message;
  * Processes the XSLT result as a String
  */
 public class StringResultHandler implements ResultHandler {
+
     private StringWriter buffer = new StringWriter();
     private StreamResult result = new StreamResult(buffer);
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/StringResultHandlerFactory.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StringResultHandlerFactory.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/StringResultHandlerFactory.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StringResultHandlerFactory.java
index d9b7a8b..2bc1cf5 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/StringResultHandlerFactory.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/StringResultHandlerFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import org.apache.camel.Exchange;
 
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
similarity index 97%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
index 15ccdc5..e7d4f64 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import java.io.File;
 import java.io.IOException;
@@ -25,7 +25,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
-
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.Result;
@@ -33,6 +32,7 @@ import javax.xml.transform.Source;
 import javax.xml.transform.Templates;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.URIResolver;
 import javax.xml.transform.dom.DOMSource;
@@ -41,7 +41,6 @@ import javax.xml.transform.stax.StAXSource;
 import javax.xml.transform.stream.StreamSource;
 
 import org.w3c.dom.Node;
-
 import org.xml.sax.EntityResolver;
 
 import org.apache.camel.Exchange;
@@ -50,10 +49,10 @@ import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeTransformException;
 import org.apache.camel.TypeConverter;
-import org.apache.camel.converter.jaxp.StAX2SAXSource;
-import org.apache.camel.converter.jaxp.XmlConverter;
 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;
 import org.slf4j.Logger;
@@ -61,7 +60,6 @@ import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.util.ObjectHelper.notNull;
 
-
 /**
  * Creates a <a href="http://camel.apache.org/processor.html">Processor</a>
  * which performs an XSLT transformation of the IN message body.
@@ -70,9 +68,10 @@ import static org.apache.camel.util.ObjectHelper.notNull;
  * you want using the <tt>outputXXX</tt> methods.
  */
 public class XsltBuilder implements Processor {
+
     private static final Logger LOG = LoggerFactory.getLogger(XsltBuilder.class);
     private Map<String, Object> parameters = new HashMap<>();
-    private XmlConverter converter = new XmlConverter();
+    private XMLConverterHelper converter = new XMLConverterHelper();
     private Templates template;
     private volatile BlockingQueue<Transformer> transformers;
     private ResultHandlerFactory resultHandlerFactory = new StringResultHandlerFactory();
@@ -281,7 +280,7 @@ public class XsltBuilder implements Processor {
         return this;
     }
 
-        // Properties
+    // Properties
     // -------------------------------------------------------------------------
 
     public Map<String, Object> getParameters() {
@@ -381,14 +380,6 @@ public class XsltBuilder implements Processor {
         setTransformerSource(new StreamSource(in));
     }
 
-    public XmlConverter getConverter() {
-        return converter;
-    }
-
-    public void setConverter(XmlConverter converter) {
-        this.converter = converter;
-    }
-
     public URIResolver getUriResolver() {
         return uriResolver;
     }
@@ -419,6 +410,10 @@ public class XsltBuilder implements Processor {
 
     // Implementation methods
     // -------------------------------------------------------------------------
+    public void setTransformerFactory(TransformerFactory transformerFactory) {
+        this.converter.setTransformerFactory(transformerFactory);
+    }
+
     private void releaseTransformer(Transformer transformer) {
         if (transformers != null) {
             transformer.reset();
@@ -524,7 +519,7 @@ public class XsltBuilder implements Processor {
             } else {
                 try {
                     source = converter.toDOMSource(converter.createDocument());
-                } catch (ParserConfigurationException e) {
+                } catch (ParserConfigurationException | TransformerException e) {
                     throw new RuntimeTransformException(e);
                 }
             }
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
similarity index 94%
rename from camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
index 36f8467..cad73a8 100644
--- a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
@@ -36,8 +36,6 @@ import org.apache.camel.support.ResourceHelper;
 public class XsltComponent extends DefaultComponent {
 
     @Metadata(label = "advanced")
-    private XmlConverter xmlConverter;
-    @Metadata(label = "advanced")
     private URIResolver uriResolver;
     @Metadata(label = "advanced")
     private XsltUriResolverFactory uriResolverFactory;
@@ -49,22 +47,12 @@ public class XsltComponent extends DefaultComponent {
     private List<Object> saxonExtensionFunctions;
     @Metadata(defaultValue = "true")
     private boolean contentCache = true;
+    @Metadata
     private boolean saxon;
 
     public XsltComponent() {
     }
 
-    public XmlConverter getXmlConverter() {
-        return xmlConverter;
-    }
-
-    /**
-     * To use a custom implementation of {@link org.apache.camel.converter.jaxp.XmlConverter}
-     */
-    public void setXmlConverter(XmlConverter xmlConverter) {
-        this.xmlConverter = xmlConverter;
-    }
-
     public XsltUriResolverFactory getUriResolverFactory() {
         return uriResolverFactory;
     }
@@ -163,7 +151,6 @@ public class XsltComponent extends DefaultComponent {
     @Override
     protected Endpoint createEndpoint(String uri, final String remaining, Map<String, Object> parameters) throws Exception {
         XsltEndpoint endpoint = new XsltEndpoint(uri, this);
-        endpoint.setConverter(getXmlConverter());
         endpoint.setContentCache(isContentCache());
         endpoint.setSaxon(isSaxon());
         endpoint.setSaxonConfiguration(saxonConfiguration);
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
similarity index 96%
rename from camel-core/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
index 420a6a3..b712046 100644
--- a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
@@ -35,8 +35,6 @@ import org.apache.camel.Exchange;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedOperation;
 import org.apache.camel.api.management.ManagedResource;
-import org.apache.camel.builder.xml.ResultHandlerFactory;
-import org.apache.camel.builder.xml.XsltBuilder;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.Metadata;
@@ -65,8 +63,6 @@ public class XsltEndpoint extends ProcessorEndpoint {
     @UriParam(defaultValue = "true")
     private boolean contentCache = true;
     @UriParam(label = "advanced")
-    private XmlConverter converter;
-    @UriParam(label = "advanced")
     private String transformerFactoryClass;
     @UriParam(label = "advanced")
     private TransformerFactory transformerFactory;
@@ -162,17 +158,6 @@ public class XsltEndpoint extends ProcessorEndpoint {
         this.resourceUri = resourceUri;
     }
 
-    public XmlConverter getConverter() {
-        return converter;
-    }
-
-    /**
-     * To use a custom implementation of {@link org.apache.camel.converter.jaxp.XmlConverter}
-     */
-    public void setConverter(XmlConverter converter) {
-        this.converter = converter;
-    }
-
     public String getTransformerFactoryClass() {
         return transformerFactoryClass;
     }
@@ -420,9 +405,6 @@ public class XsltEndpoint extends ProcessorEndpoint {
         log.debug("{} using schema resource: {}", this, resourceUri);
 
         this.xslt = injector.newInstance(XsltBuilder.class);
-        if (converter != null) {
-            xslt.setConverter(converter);
-        }
 
         boolean useSaxon = false;
         if (transformerFactoryClass == null && (saxon || saxonExtensionFunctions != null)) {
@@ -446,7 +428,7 @@ public class XsltEndpoint extends ProcessorEndpoint {
 
         if (factory != null) {
             log.debug("Using TransformerFactory {}", factory);
-            xslt.getConverter().setTransformerFactory(factory);
+            xslt.setTransformerFactory(factory);
         }
         if (resultHandlerFactory != null) {
             xslt.setResultHandlerFactory(resultHandlerFactory);
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/XsltErrorListener.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltErrorListener.java
similarity index 97%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/XsltErrorListener.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltErrorListener.java
index b8bd94b..ac958e0 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/XsltErrorListener.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltErrorListener.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.TransformerException;
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltHelper.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltHelper.java
similarity index 100%
rename from camel-core/src/main/java/org/apache/camel/component/xslt/XsltHelper.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltHelper.java
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltOutput.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltOutput.java
similarity index 100%
rename from camel-core/src/main/java/org/apache/camel/component/xslt/XsltOutput.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltOutput.java
diff --git a/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltUriResolver.java
similarity index 99%
rename from camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltUriResolver.java
index 2f5bfc0..73b4b12 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltUriResolver.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder.xml;
+package org.apache.camel.component.xslt;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltUriResolverFactory.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltUriResolverFactory.java
similarity index 100%
rename from camel-core/src/main/java/org/apache/camel/component/xslt/XsltUriResolverFactory.java
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltUriResolverFactory.java
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/package.html b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/package.html
similarity index 100%
rename from camel-core/src/main/java/org/apache/camel/component/xslt/package.html
rename to components/camel-xslt/src/main/java/org/apache/camel/component/xslt/package.html
diff --git a/components/pom.xml b/components/pom.xml
index 59631e6..aaf1b57 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -307,6 +307,7 @@
     <module>camel-xchange</module>
     <module>camel-xmlsecurity</module>
     <module>camel-xmpp</module>
+    <module>camel-xslt</module>
     <module>camel-xstream</module>
     <module>camel-yammer</module>
     <module>camel-zendesk</module>
diff --git a/components/readme.adoc b/components/readme.adoc
index 2937945..0803b04 100644
--- a/components/readme.adoc
+++ b/components/readme.adoc
@@ -1,7 +1,7 @@
 ==== Components
 
 // components: START
-Number of Components: 289 in 208 JAR artifacts (0 deprecated)
+Number of Components: 289 in 209 JAR artifacts (0 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -859,7 +859,7 @@ Number of Components: 289 in 208 JAR artifacts (0 deprecated)
 | link:camel-saxon/src/main/docs/xquery-component.adoc[XQuery] (camel-saxon) +
 `xquery:resourceUri` | 1.0 | Transforms the message using a XQuery template using Saxon.
 
-| link:../camel-core/src/main/docs/xslt-component.adoc[XSLT] (camel-core) +
+| link:camel-xslt/src/main/docs/xslt-component.adoc[XSLT] (camel-xslt) +
 `xslt:resourceUri` | 1.3 | Transforms the message using a XSLT template.
 
 | link:camel-yammer/src/main/docs/yammer-component.adoc[Yammer] (camel-yammer) +
diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index 45fa5a3..d40d98e 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -351,6 +351,7 @@
 * xref:secureXML-dataformat.adoc[XML Security DataFormat]
 * xref:xmlsecurity-component.adoc[XML Security Component]
 * xref:xmpp-component.adoc[XMPP Component]
+* xref:xslt-component.adoc[XSLT Component]
 * xref:json-xstream-dataformat.adoc[JSon XStream DataFormat]
 * xref:xstream-dataformat.adoc[XStream DataFormat]
 * xref:yammer-component.adoc[Yammer Component]
diff --git a/camel-core/src/main/docs/xslt-component.adoc b/docs/components/modules/ROOT/pages/xslt-component.adoc
similarity index 97%
rename from camel-core/src/main/docs/xslt-component.adoc
rename to docs/components/modules/ROOT/pages/xslt-component.adoc
index 5884dc9..415e578 100644
--- a/camel-core/src/main/docs/xslt-component.adoc
+++ b/docs/components/modules/ROOT/pages/xslt-component.adoc
@@ -54,14 +54,13 @@ directly in the camel-core.
 === Options
 
 // component options: START
-The XSLT component supports 9 options, which are listed below.
+The XSLT component supports 8 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *xmlConverter* (advanced) | To use a custom implementation of org.apache.camel.converter.jaxp.XmlConverter |  | XmlConverter
 | *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
@@ -93,7 +92,7 @@ with the following path and query parameters:
 |===
 
 
-==== Query Parameters (17 parameters):
+==== Query Parameters (16 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -106,7 +105,6 @@ with the following path and query parameters:
 | *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
-| *converter* (advanced) | To use a custom implementation of org.apache.camel.converter.jaxp.XmlConverter |  | XmlConverter
 | *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
diff --git a/parent/pom.xml b/parent/pom.xml
index 7d2a517..f25b909 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -2248,6 +2248,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xslt</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xstream</artifactId>
         <version>${project.version}</version>
       </dependency>
@@ -3547,6 +3552,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xslt-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/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 7c70994..cae15fd 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -63,6 +63,7 @@
     <bundle>mvn:org.apache.camel/camel-seda/${project.version}</bundle>
     <bundle>mvn:org.apache.camel/camel-validator/${project.version}</bundle>
     <bundle>mvn:org.apache.camel/camel-vm/${project.version}</bundle>
+    <bundle>mvn:org.apache.camel/camel-xslt/${project.version}</bundle>
     <bundle>mvn:org.apache.camel/camel-management-impl/${project.version}</bundle>
     <bundle>mvn:org.apache.camel/camel-base/${project.version}</bundle>
     <bundle>mvn:org.apache.camel/camel-core/${project.version}</bundle>
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
index 0e61974..3cd6752 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
@@ -17,8 +17,6 @@
 package org.apache.camel.component.xslt.springboot;
 
 import javax.annotation.Generated;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.TransformerFactory;
 import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -39,11 +37,6 @@ public class XsltComponentConfiguration
      */
     private Boolean enabled;
     /**
-     * To use a custom implementation of
-     * org.apache.camel.converter.jaxp.XmlConverter
-     */
-    private XmlConverterNestedConfiguration xmlConverter;
-    /**
      * 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.
@@ -93,14 +86,6 @@ public class XsltComponentConfiguration
      */
     private Boolean resolvePropertyPlaceholders = true;
 
-    public XmlConverterNestedConfiguration getXmlConverter() {
-        return xmlConverter;
-    }
-
-    public void setXmlConverter(XmlConverterNestedConfiguration xmlConverter) {
-        this.xmlConverter = xmlConverter;
-    }
-
     public String getUriResolverFactory() {
         return uriResolverFactory;
     }
@@ -166,27 +151,4 @@ public class XsltComponentConfiguration
             Boolean resolvePropertyPlaceholders) {
         this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
     }
-
-    public static class XmlConverterNestedConfiguration {
-        public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.xslt.XmlConverter.class;
-        private DocumentBuilderFactory documentBuilderFactory;
-        private TransformerFactory transformerFactory;
-
-        public DocumentBuilderFactory getDocumentBuilderFactory() {
-            return documentBuilderFactory;
-        }
-
-        public void setDocumentBuilderFactory(
-                DocumentBuilderFactory documentBuilderFactory) {
-            this.documentBuilderFactory = documentBuilderFactory;
-        }
-
-        public TransformerFactory getTransformerFactory() {
-            return transformerFactory;
-        }
-
-        public void setTransformerFactory(TransformerFactory transformerFactory) {
-            this.transformerFactory = transformerFactory;
-        }
-    }
 }
\ No newline at end of file
diff --git a/components/camel-saxon/pom.xml b/platforms/spring-boot/components-starter/camel-xslt-starter/pom.xml
similarity index 52%
copy from components/camel-saxon/pom.xml
copy to platforms/spring-boot/components-starter/camel-xslt-starter/pom.xml
index 1b26d17..1f2f5d1 100644
--- a/components/camel-saxon/pom.xml
+++ b/platforms/spring-boot/components-starter/camel-xslt-starter/pom.xml
@@ -19,72 +19,35 @@
 -->
 <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</artifactId>
+    <artifactId>components-starter</artifactId>
     <version>3.0.0-SNAPSHOT</version>
   </parent>
-
-  <artifactId>camel-saxon</artifactId>
+  <artifactId>camel-xslt-starter</artifactId>
   <packaging>jar</packaging>
-  <name>Camel :: Saxon</name>
-  <description>Camel Saxon (XQuery/XPath) support</description>
-
-  <properties>
-  </properties>
-
+  <name>Spring-Boot Starter :: Camel :: XSLT</name>
+  <description>Spring-Boot Starter for Camel XSLT component</description>
   <dependencies>
-
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-core</artifactId>
-    </dependency>
-
     <dependency>
-      <groupId>net.sf.saxon</groupId>
-      <artifactId>Saxon-HE</artifactId>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot-version}</version>
     </dependency>
-    
-    <!-- test dependencies -->
     <dependency>
       <groupId>org.apache.camel</groupId>
-      <artifactId>camel-test-spring</artifactId>      
-      <scope>test</scope>
-    </dependency>      
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-api</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-core</artifactId>
-      <scope>test</scope>
+      <artifactId>camel-xslt</artifactId>
+      <version>${project.version}</version>
     </dependency>
+    <!--START OF GENERATED CODE-->
     <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-slf4j-impl</artifactId>
-      <scope>test</scope>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core-starter</artifactId>
     </dependency>
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring-boot-starter</artifactId>
     </dependency>
+    <!--END OF GENERATED CODE-->
   </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>
-
 </project>
diff --git a/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentAutoConfiguration.java
new file mode 100644
index 0000000..adb6e4e
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentAutoConfiguration.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.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.XsltComponent;
+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,
+        XsltComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        XsltComponentConfiguration.class})
+public class XsltComponentAutoConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(XsltComponentAutoConfiguration.class);
+    @Autowired
+    private ApplicationContext applicationContext;
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired
+    private XsltComponentConfiguration configuration;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<XsltComponent>> customizers;
+
+    static class GroupConditions extends GroupCondition {
+        public GroupConditions() {
+            super("camel.component", "camel.component.xslt");
+        }
+    }
+
+    @Lazy
+    @Bean(name = "xslt-component")
+    @ConditionalOnMissingBean(XsltComponent.class)
+    public XsltComponent configureXsltComponent() throws Exception {
+        XsltComponent component = new XsltComponent();
+        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<XsltComponent> customizer : customizers) {
+                boolean useCustomizer = (customizer instanceof HasId)
+                        ? HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.xslt.customizer",
+                                ((HasId) customizer).getId())
+                        : HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.xslt.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-core-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
similarity index 79%
copy from platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
copy to platforms/spring-boot/components-starter/camel-xslt-starter/src/main/java/org/apache/camel/component/xslt/springboot/XsltComponentConfiguration.java
index 0e61974..3cd6752 100644
--- a/platforms/spring-boot/components-starter/camel-core-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
@@ -17,8 +17,6 @@
 package org.apache.camel.component.xslt.springboot;
 
 import javax.annotation.Generated;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.TransformerFactory;
 import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -39,11 +37,6 @@ public class XsltComponentConfiguration
      */
     private Boolean enabled;
     /**
-     * To use a custom implementation of
-     * org.apache.camel.converter.jaxp.XmlConverter
-     */
-    private XmlConverterNestedConfiguration xmlConverter;
-    /**
      * 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.
@@ -93,14 +86,6 @@ public class XsltComponentConfiguration
      */
     private Boolean resolvePropertyPlaceholders = true;
 
-    public XmlConverterNestedConfiguration getXmlConverter() {
-        return xmlConverter;
-    }
-
-    public void setXmlConverter(XmlConverterNestedConfiguration xmlConverter) {
-        this.xmlConverter = xmlConverter;
-    }
-
     public String getUriResolverFactory() {
         return uriResolverFactory;
     }
@@ -166,27 +151,4 @@ public class XsltComponentConfiguration
             Boolean resolvePropertyPlaceholders) {
         this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
     }
-
-    public static class XmlConverterNestedConfiguration {
-        public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.xslt.XmlConverter.class;
-        private DocumentBuilderFactory documentBuilderFactory;
-        private TransformerFactory transformerFactory;
-
-        public DocumentBuilderFactory getDocumentBuilderFactory() {
-            return documentBuilderFactory;
-        }
-
-        public void setDocumentBuilderFactory(
-                DocumentBuilderFactory documentBuilderFactory) {
-            this.documentBuilderFactory = documentBuilderFactory;
-        }
-
-        public TransformerFactory getTransformerFactory() {
-            return transformerFactory;
-        }
-
-        public void setTransformerFactory(TransformerFactory transformerFactory) {
-            this.transformerFactory = transformerFactory;
-        }
-    }
 }
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/resources/META-INF/LICENSE.txt b/platforms/spring-boot/components-starter/camel-xslt-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-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-starter/src/main/resources/META-INF/NOTICE.txt b/platforms/spring-boot/components-starter/camel-xslt-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-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-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..eb2eb94
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-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.springboot.XsltComponentAutoConfiguration
diff --git a/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/resources/META-INF/spring.provides b/platforms/spring-boot/components-starter/camel-xslt-starter/src/main/resources/META-INF/spring.provides
new file mode 100644
index 0000000..fa026e8
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xslt-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
diff --git a/platforms/spring-boot/components-starter/pom.xml b/platforms/spring-boot/components-starter/pom.xml
index 89dea3f..4f1c3df 100644
--- a/platforms/spring-boot/components-starter/pom.xml
+++ b/platforms/spring-boot/components-starter/pom.xml
@@ -353,6 +353,7 @@
     <module>camel-xchange-starter</module>
     <module>camel-xmlsecurity-starter</module>
     <module>camel-xmpp-starter</module>
+    <module>camel-xslt-starter</module>
     <module>camel-xstream-starter</module>
     <module>camel-yammer-starter</module>
     <module>camel-zendesk-starter</module>