You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2019/05/17 14:23:31 UTC

[camel] branch master updated (d1b8ce1 -> 722a99a)

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

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


    from d1b8ce1  CAMEL-13390 - Fixed CS in the example
     new 6ca9d79  [CAMEL-13511] Use AbstractCamelContext instead of AbstractModelCamelContext
     new 7d0dc0b  CAMEL-13528 - fix remaining textual references to spoolChiper
     new 722a99a  [CAMEL-13371] Make xml and jaxb more optional in camel-base / camel-core

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


Summary of changes:
 apache-camel/pom.xml                               |   5 +
 apache-camel/src/main/descriptors/common-bin.xml   |   1 +
 bom/camel-bom/pom.xml                              |  10 ++
 .../blueprint/handler/CamelNamespaceHandler.java   |   5 +-
 .../component/cxf/util/SplitterWithXqureyTest.java |   2 +-
 .../camel-jaxp/src/main/schema/xtokenize.json      |  22 +++
 ...XQueryHeaderNameResultTypeAndNamespaceTest.java |   2 +-
 .../saxon/XQueryWithNamespacesFilterTest.java      |   2 +-
 .../spring/handler/CamelNamespaceHandler.java      |   5 +-
 .../spring/LifecycleStrategyInjectionTest.java     |   2 +-
 .../MultipleLifecycleStrategyInjectionTest.java    |   2 +-
 .../apache/camel/swagger/RestSwaggerSupport.java   |   2 +-
 components/camel-validator/pom.xml                 |   4 +
 components/camel-xpath/pom.xml                     |   5 +-
 .../language/xpath/MessageVariableResolver.java    |  10 +-
 .../apache/camel/language/xpath/XPathBuilder.java  |  12 +-
 components/camel-xslt/pom.xml                      |   4 +
 components/readme.adoc                             |   4 +-
 .../camel/impl/engine/AbstractCamelContext.java    |  29 +++-
 .../apache/camel/impl/engine/BaseRouteService.java |  52 +++----
 .../impl/engine}/DefaultTransformerRegistry.java   |  23 +--
 .../impl/engine}/DefaultValidatorRegistry.java     |  22 +--
 .../impl/engine/RestRegistryFactoryResolver.java   |   3 +-
 core/camel-core/pom.xml                            |  30 +++-
 core/camel-core/readme.adoc                        |   4 +-
 .../org/apache/camel/builder/BuilderSupport.java   |   2 +-
 .../apache/camel/builder/ExpressionBuilder.java    |  51 ++++++-
 .../org/apache/camel/builder/ExpressionClause.java |   2 +-
 .../camel/builder/ExpressionClauseSupport.java     |   2 +-
 .../org/apache/camel/builder/ValueBuilder.java     |   6 +-
 .../camel/impl/AbstractModelCamelContext.java      |  32 +++-
 .../org/apache/camel/impl/DefaultCamelContext.java |   5 +-
 .../java/org/apache/camel/impl/DefaultModel.java   |   7 +-
 .../apache/camel/impl/ReloadStrategySupport.java   |   2 +-
 .../java/org/apache/camel/impl/RouteService.java   |   8 +-
 .../java/org/apache/camel/model/ModelHelper.java   |   2 +-
 .../model/language/XMLTokenizerExpression.java     |   3 +-
 .../org/apache/camel/reifier/RouteReifier.java     |   6 +-
 .../builder/xml/DefaultNamespaceContextTest.java   |   2 +-
 .../builder/xml/ExtractXPathWithNamespaceTest.java |   2 +-
 .../XPathHeaderNameResultTypeAndNamespaceTest.java |   2 +-
 .../builder/xml/XPathNamespaceResultTypeTest.java  |   2 +-
 .../camel/builder/xml/XPathNamespaceTest.java      |   2 +-
 .../builder/xml/XPathNestedNamespaceTest.java      |   2 +-
 .../org/apache/camel/builder/xml/XPathTest.java    |   2 +-
 .../xml/XPathWithNamespacesFromDomTest.java        |   5 +-
 .../camel/impl/MultipleLifecycleStrategyTest.java  |   2 +-
 .../apache/camel/language/XMLTokenSplitTest.java   |   2 +-
 .../tokenizer/XMLTokenizeLanguageGroupingTest.java |   2 +-
 .../XMLTokenizeLanguageStreamingFileTest.java      |   2 +-
 .../XMLTokenizeLanguageStreamingTest.java          |   2 +-
 .../tokenizer/XMLTokenizeLanguageTest.java         |   2 +-
 .../XMLTokenizeWrapLanguageGroupingTest.java       |   2 +-
 .../tokenizer/XMLTokenizeWrapLanguageTest.java     |   2 +-
 .../processor/SplitGroupMultiXmlTokenTest.java     |   2 +-
 .../SplitGroupWrappedMultiXmlTokenTest.java        |   2 +-
 .../camel/processor/SplitterWithXqureyTest.java    |   2 +-
 ...ithNamespaceBuilderFilterAndResultTypeTest.java |   2 +-
 .../XPathWithNamespaceBuilderFilterTest.java       |   2 +-
 .../processor/XPathWithNamespacesFilterTest.java   |   2 +-
 .../camel/util/DumpModelAsXmlNamespaceTest.java    |   2 +-
 core/camel-jaxp/pom.xml                            | 167 +++++++++++++++++++++
 .../src/main/docs/xtokenize-language.adoc          |   0
 .../apache/camel/converter/jaxp/DomConverter.java  |   0
 .../apache/camel/converter/jaxp/StaxConverter.java |   0
 .../converter/jaxp/StreamSourceConverter.java      |   0
 .../apache/camel/converter/jaxp/XMLReaderPool.java |   0
 .../converter/jaxp/XMLStreamReaderInputStream.java |   0
 .../converter/jaxp/XMLStreamReaderReader.java      |   0
 .../apache/camel/converter/jaxp/XmlConverter.java  |   0
 .../camel/converter/jaxp/XmlErrorListener.java     |   0
 .../org/apache/camel/converter/jaxp/package.html   |   0
 .../language/xtokenizer}/RecordableReader.java     |   2 +-
 .../xtokenizer}/XMLTokenExpressionIterator.java    |  59 +++-----
 .../language/xtokenizer}/XMLTokenizeLanguage.java  |  59 ++++----
 .../apache/camel/language/xtokenizer}/package.html |   2 +-
 .../support/builder/xml/NamespacesHelper.java      |  37 +++++
 .../camel/support/builder/xml/StAX2SAXSource.java  |   4 +-
 .../support/builder/xml/XMLConverterHelper.java    |   0
 .../validation/DefaultValidationErrorHandler.java  |   0
 .../validation/NoXmlBodyValidationException.java   |   0
 .../validation/NoXmlHeaderValidationException.java |   0
 .../validation/PredicateValidatingProcessor.java   |   0
 .../validation/PredicateValidationException.java   |   0
 .../support/processor/validation/SchemaReader.java |   0
 .../validation/SchemaValidationException.java      |   0
 .../processor/validation/ValidatingProcessor.java  |   0
 .../validation/ValidatorErrorHandler.java          |   0
 .../support/processor/validation/package.html      |   0
 .../camel/util/xml}/XmlLineNumberParser.java       |   4 +-
 core/camel-jaxp/src/main/schema/xtokenize.json     |  22 +++
 .../language/xtokenizer}/AttributedQNameTest.java  |   4 +-
 .../XMLTokenExpressionIteratorCharsetTest.java     |   2 +-
 .../XMLTokenExpressionIteratorGroupingTest.java    |  10 +-
 .../XMLTokenExpressionIteratorInvalidXMLTest.java  |   2 +-
 .../XMLTokenExpressionIteratorTest.java            |  64 +-------
 .../camel/util/xml}/XmlLineNumberParserTest.java   |   2 +-
 .../management/mbean/ManagedCamelContext.java      |   2 +-
 .../management/ManagedNonManagedServiceTest.java   |   2 +-
 ...edProducerRouteAddRemoveRegisterAlwaysTest.java |   2 +-
 .../management/ManagedRouteAddRemoveTest.java      |   2 +-
 .../camel/support/builder/ExpressionBuilder.java   |   2 +-
 .../support/builder/{xml => }/Namespaces.java      |  34 +----
 core/pom.xml                                       |   1 +
 .../modules/ROOT/pages/stream-caching.adoc         |   4 +-
 parent/pom.xml                                     |  10 ++
 .../commands/AbstractLocalCamelController.java     |   2 +-
 .../apache/camel/commands/ContextInfoCommand.java  |   6 +-
 .../springboot/XPathLanguageAutoConfiguration.java | 117 ---------------
 .../springboot/XPathLanguageConfiguration.java     | 132 ----------------
 .../src/main/resources/META-INF/spring.factories   |   2 -
 .../components-starter/camel-jaxp-starter/pom.xml  |  53 +++++++
 .../XMLTokenizeLanguageAutoConfiguration.java      |   4 +-
 .../XMLTokenizeLanguageConfiguration.java          |   2 +-
 .../src/main/resources/META-INF/LICENSE.txt        |   0
 .../src/main/resources/META-INF/NOTICE.txt         |   0
 .../additional-spring-configuration-metadata.json  |  10 ++
 .../src/main/resources/META-INF/spring.factories   |  12 +-
 .../src/main/resources/META-INF/spring.provides}   |  12 +-
 platforms/spring-boot/components-starter/pom.xml   |   1 +
 .../camel-spring-boot-dependencies/pom.xml         |  10 ++
 .../camel/itest/issues/RssToHttpIssueTest.java     |   2 +-
 .../camel/tools/apt/TypeConverterProcessor.java    |   3 +-
 .../camel/maven/packaging/PackageLanguageMojo.java |   3 +
 .../maven/packaging/SpringBootStarterMojo.java     |   4 +
 125 files changed, 703 insertions(+), 610 deletions(-)
 create mode 100644 components/camel-jaxp/src/main/schema/xtokenize.json
 rename core/{camel-core/src/main/java/org/apache/camel/impl => camel-base/src/main/java/org/apache/camel/impl/engine}/DefaultTransformerRegistry.java (79%)
 rename core/{camel-core/src/main/java/org/apache/camel/impl => camel-base/src/main/java/org/apache/camel/impl/engine}/DefaultValidatorRegistry.java (71%)
 create mode 100644 core/camel-jaxp/pom.xml
 rename core/{camel-core => camel-jaxp}/src/main/docs/xtokenize-language.adoc (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java (100%)
 rename core/{camel-base => camel-jaxp}/src/main/java/org/apache/camel/converter/jaxp/package.html (100%)
 rename core/{camel-core/src/main/java/org/apache/camel/builder => camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer}/RecordableReader.java (98%)
 rename core/{camel-core/src/main/java/org/apache/camel/builder => camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer}/XMLTokenExpressionIterator.java (92%)
 rename core/{camel-core/src/main/java/org/apache/camel/language/tokenizer => camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer}/XMLTokenizeLanguage.java (75%)
 copy core/{camel-support/src/main/java/org/apache/camel/support/processor/validation => camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer}/package.html (91%)
 create mode 100644 core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/NamespacesHelper.java
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java (99%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java (100%)
 rename core/{camel-support => camel-jaxp}/src/main/java/org/apache/camel/support/processor/validation/package.html (100%)
 rename core/{camel-util/src/main/java/org/apache/camel/util => camel-jaxp/src/main/java/org/apache/camel/util/xml}/XmlLineNumberParser.java (99%)
 create mode 100644 core/camel-jaxp/src/main/schema/xtokenize.json
 rename core/{camel-core/src/test/java/org/apache/camel/builder => camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer}/AttributedQNameTest.java (96%)
 rename core/{camel-core/src/test/java/org/apache/camel/builder => camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer}/XMLTokenExpressionIteratorCharsetTest.java (98%)
 rename core/{camel-core/src/test/java/org/apache/camel/builder => camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer}/XMLTokenExpressionIteratorGroupingTest.java (98%)
 rename core/{camel-core/src/test/java/org/apache/camel/builder => camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer}/XMLTokenExpressionIteratorInvalidXMLTest.java (98%)
 rename core/{camel-core/src/test/java/org/apache/camel/builder => camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer}/XMLTokenExpressionIteratorTest.java (87%)
 rename core/{camel-core/src/test/java/org/apache/camel/util => camel-jaxp/src/test/java/org/apache/camel/util/xml}/XmlLineNumberParserTest.java (99%)
 rename core/camel-support/src/main/java/org/apache/camel/support/builder/{xml => }/Namespaces.java (70%)
 delete mode 100644 platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageAutoConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageConfiguration.java
 create mode 100644 platforms/spring-boot/components-starter/camel-jaxp-starter/pom.xml
 rename platforms/spring-boot/components-starter/{camel-core-starter/src/main/java/org/apache/camel/language/tokenizer => camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer}/springboot/XMLTokenizeLanguageAutoConfiguration.java (97%)
 rename platforms/spring-boot/components-starter/{camel-core-starter/src/main/java/org/apache/camel/language/tokenizer => camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer}/springboot/XMLTokenizeLanguageConfiguration.java (97%)
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-jaxp-starter}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-jaxp-starter}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
 copy platforms/spring-boot/components-starter/{camel-core-starter => camel-jaxp-starter}/src/main/resources/META-INF/spring.factories (55%)
 copy platforms/spring-boot/components-starter/{camel-core-starter/src/main/resources/META-INF/spring.factories => camel-jaxp-starter/src/main/resources/META-INF/spring.provides} (52%)


[camel] 02/03: CAMEL-13528 - fix remaining textual references to spoolChiper

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 7d0dc0bb365347da5d4358b7bfa3d03b280a583c
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu May 16 22:35:30 2019 +0200

    CAMEL-13528 - fix remaining textual references to spoolChiper
---
 docs/user-manual/modules/ROOT/pages/stream-caching.adoc             | 4 ++--
 .../org/apache/camel/commands/AbstractLocalCamelController.java     | 2 +-
 .../src/main/java/org/apache/camel/commands/ContextInfoCommand.java | 6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/docs/user-manual/modules/ROOT/pages/stream-caching.adoc b/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
index 39dd7e4..9cc3bee 100644
--- a/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
+++ b/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
@@ -208,7 +208,7 @@ The strategy has the following options:
 | spoolDirectory | ${java.io.tmpdir}/camel/camel-tmp-\#uuid#
 | Base directory where temporary files for spooled streams should be stored. This option supports naming patterns as documented below.
 
-| spoolChiper | null
+| spoolCipher | null
 | If set, the temporary files are encrypted using the specified cipher transformation (i.e., a valid stream or 8-bit cipher name such as "RC4", "AES/CTR/NoPadding". An empty name "" is treated as null).
 
 | spoolThreshold | 128 KB
@@ -275,7 +275,7 @@ context.getStreamCachingStrategy().setSpoolDirectory"/tmp/cachedir");
 context.getStreamCachingStrategy().setSpoolThreshold(64 * 1024);
 context.getStreamCachingStrategy().setBufferSize(16 * 1024);
 // to enable encryption using RC4
-// context.getStreamCachingStrategy().setSpoolChiper("RC4");
+// context.getStreamCachingStrategy().setSpoolCipher("RC4");
 ----
 
 And remember to enable Stream caching on the CamelContext or on routes:
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
index cadb52b..69050fa 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
@@ -132,7 +132,7 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll
             if (context.getStreamCachingStrategy().isEnabled()) {
                 answer.put("streamCachingEnabled", true);
                 answer.put("streamCaching.spoolDirectory", context.getStreamCachingStrategy().getSpoolDirectory());
-                answer.put("streamCaching.spoolChiper", context.getStreamCachingStrategy().getSpoolCipher());
+                answer.put("streamCaching.spoolCipher", context.getStreamCachingStrategy().getSpoolCipher());
                 answer.put("streamCaching.spoolThreshold", context.getStreamCachingStrategy().getSpoolThreshold());
                 answer.put("streamCaching.spoolUsedHeapMemoryThreshold", context.getStreamCachingStrategy().getSpoolUsedHeapMemoryThreshold());
                 answer.put("streamCaching.spoolUsedHeapMemoryLimit", context.getStreamCachingStrategy().getSpoolUsedHeapMemoryLimit());
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
index a96dc7f..0666e03 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
@@ -137,7 +137,7 @@ public class ContextInfoCommand extends AbstractContextCommand {
             enabled = (boolean) row.get("streamCachingEnabled");
             if (enabled) {
                 Object spoolDirectory = safeNull(row.get("streamCaching.spoolDirectory"));
-                Object spoolChiper = safeNull(row.get("streamCaching.spoolChiper"));
+                Object spoolCipher = safeNull(row.get("streamCaching.spoolCipher"));
                 Object spoolThreshold = safeNull(row.get("streamCaching.spoolThreshold"));
                 Object spoolUsedHeapMemoryThreshold = safeNull(row.get("streamCaching.spoolUsedHeapMemoryThreshold"));
                 Object spoolUsedHeapMemoryLimit = safeNull(row.get("streamCaching.spoolUsedHeapMemoryLimit"));
@@ -146,9 +146,9 @@ public class ContextInfoCommand extends AbstractContextCommand {
                 Object removeSpoolDirectoryWhenStopping = safeNull(row.get("streamCaching.removeSpoolDirectoryWhenStopping"));
                 boolean statisticsEnabled = (boolean) row.get("streamCaching.statisticsEnabled");
 
-                String text = String.format("\tStream caching: [spoolDirectory=%s, spoolChiper=%s, spoolThreshold=%s, spoolUsedHeapMemoryThreshold=%s, "
+                String text = String.format("\tStream caching: [spoolDirectory=%s, spoolCipher=%s, spoolThreshold=%s, spoolUsedHeapMemoryThreshold=%s, "
                                 + "spoolUsedHeapMemoryLimit=%s, anySpoolRules=%s, bufferSize=%s, removeSpoolDirectoryWhenStopping=%s, statisticsEnabled=%s]",
-                        spoolDirectory, spoolChiper, spoolThreshold, spoolUsedHeapMemoryThreshold, spoolUsedHeapMemoryLimit, anySpoolRules, bufferSize,
+                        spoolDirectory, spoolCipher, spoolThreshold, spoolUsedHeapMemoryThreshold, spoolUsedHeapMemoryLimit, anySpoolRules, bufferSize,
                         removeSpoolDirectoryWhenStopping, statisticsEnabled);
                 out.println(stringEscape.unescapeJava(text));
 


Re: [camel] 03/03: [CAMEL-13371] Make xml and jaxb more optional in camel-base / camel-core

Posted by Andrea Cosentino <an...@yahoo.com.INVALID>.
We have trouble with the validation of Karaf feature with this change.

--
Andrea Cosentino 
----------------------------------
Apache Camel PMC Chair
Apache Karaf Committer
Apache Servicemix PMC Member
Email: ancosen1985@yahoo.com
Twitter: @oscerd2
Github: oscerd






On Friday, May 17, 2019, 4:23:33 PM GMT+2, <gn...@apache.org> wrote: 





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

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

commit 722a99a8a9ed584dfef8973dd2c15464ba8b04e1
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu May 16 22:32:19 2019 +0200

    [CAMEL-13371] Make xml and jaxb more optional in camel-base / camel-core
---
apache-camel/pom.xml                              |  5 +
apache-camel/src/main/descriptors/common-bin.xml  |  1 +
bom/camel-bom/pom.xml                              |  10 +
.../blueprint/handler/CamelNamespaceHandler.java  |  5 +-
.../component/cxf/util/SplitterWithXqureyTest.java |  2 +-
.../camel-jaxp/src/main/schema/xtokenize.json      |  22 +++
...XQueryHeaderNameResultTypeAndNamespaceTest.java |  2 +-
.../saxon/XQueryWithNamespacesFilterTest.java      |  2 +-
.../spring/handler/CamelNamespaceHandler.java      |  5 +-
.../spring/LifecycleStrategyInjectionTest.java    |  2 +-
.../MultipleLifecycleStrategyInjectionTest.java    |  2 +-
.../apache/camel/swagger/RestSwaggerSupport.java  |  2 +-
components/camel-validator/pom.xml                |  4 +
components/camel-xpath/pom.xml                    |  5 +-
.../language/xpath/MessageVariableResolver.java    |  10 +-
.../apache/camel/language/xpath/XPathBuilder.java  |  12 +-
components/camel-xslt/pom.xml                      |  4 +
components/readme.adoc                            |  4 +-
.../camel/impl/engine/AbstractCamelContext.java    |  29 ++-
.../apache/camel/impl/engine/BaseRouteService.java |  52 ++----
.../impl/engine}/DefaultTransformerRegistry.java  |  23 +--
.../impl/engine}/DefaultValidatorRegistry.java    |  22 +--
.../impl/engine/RestRegistryFactoryResolver.java  |  3 +-
core/camel-core/pom.xml                            |  30 ++-
core/camel-core/readme.adoc                        |  4 +-
.../org/apache/camel/builder/BuilderSupport.java  |  2 +-
.../apache/camel/builder/ExpressionBuilder.java    |  51 +++++-
.../org/apache/camel/builder/ExpressionClause.java |  2 +-
.../camel/builder/ExpressionClauseSupport.java    |  2 +-
.../org/apache/camel/builder/ValueBuilder.java    |  6 +-
.../camel/impl/AbstractModelCamelContext.java      |  32 +++-
.../org/apache/camel/impl/DefaultCamelContext.java |  5 +-
.../java/org/apache/camel/impl/DefaultModel.java  |  4 +-
.../apache/camel/impl/ReloadStrategySupport.java  |  2 +-
.../java/org/apache/camel/impl/RouteService.java  |  8 +-
.../java/org/apache/camel/model/ModelHelper.java  |  2 +-
.../model/language/XMLTokenizerExpression.java    |  3 +-
.../org/apache/camel/reifier/RouteReifier.java    |  6 +-
.../builder/xml/DefaultNamespaceContextTest.java  |  2 +-
.../builder/xml/ExtractXPathWithNamespaceTest.java |  2 +-
.../XPathHeaderNameResultTypeAndNamespaceTest.java |  2 +-
.../builder/xml/XPathNamespaceResultTypeTest.java  |  2 +-
.../camel/builder/xml/XPathNamespaceTest.java      |  2 +-
.../builder/xml/XPathNestedNamespaceTest.java      |  2 +-
.../org/apache/camel/builder/xml/XPathTest.java    |  2 +-
.../xml/XPathWithNamespacesFromDomTest.java        |  5 +-
.../camel/impl/MultipleLifecycleStrategyTest.java  |  2 +-
.../apache/camel/language/XMLTokenSplitTest.java  |  2 +-
.../tokenizer/XMLTokenizeLanguageGroupingTest.java |  2 +-
.../XMLTokenizeLanguageStreamingFileTest.java      |  2 +-
.../XMLTokenizeLanguageStreamingTest.java          |  2 +-
.../tokenizer/XMLTokenizeLanguageTest.java        |  2 +-
.../XMLTokenizeWrapLanguageGroupingTest.java      |  2 +-
.../tokenizer/XMLTokenizeWrapLanguageTest.java    |  2 +-
.../processor/SplitGroupMultiXmlTokenTest.java    |  2 +-
.../SplitGroupWrappedMultiXmlTokenTest.java        |  2 +-
.../camel/processor/SplitterWithXqureyTest.java    |  2 +-
...ithNamespaceBuilderFilterAndResultTypeTest.java |  2 +-
.../XPathWithNamespaceBuilderFilterTest.java      |  2 +-
.../processor/XPathWithNamespacesFilterTest.java  |  2 +-
.../camel/util/DumpModelAsXmlNamespaceTest.java    |  2 +-
core/camel-jaxp/pom.xml                            | 167 +++++++++++++++++
.../src/main/docs/xtokenize-language.adoc          |  0
.../apache/camel/converter/jaxp/DomConverter.java  |  0
.../apache/camel/converter/jaxp/StaxConverter.java |  0
.../converter/jaxp/StreamSourceConverter.java      |  0
.../apache/camel/converter/jaxp/XMLReaderPool.java |  0
.../converter/jaxp/XMLStreamReaderInputStream.java |  0
.../converter/jaxp/XMLStreamReaderReader.java      |  0
.../apache/camel/converter/jaxp/XmlConverter.java  |  0
.../camel/converter/jaxp/XmlErrorListener.java    |  0
.../org/apache/camel/converter/jaxp/package.html  |  0
.../language/xtokenizer}/RecordableReader.java    |  2 +-
.../xtokenizer}/XMLTokenExpressionIterator.java    |  59 +++---
.../language/xtokenizer}/XMLTokenizeLanguage.java  |  59 +++---
.../apache/camel/language/xtokenizer}/package.html |  2 +-
.../support/builder/xml/NamespacesHelper.java      |  37 ++++
.../camel/support/builder/xml/StAX2SAXSource.java  |  4 +-
.../support/builder/xml/XMLConverterHelper.java    |  0
.../validation/DefaultValidationErrorHandler.java  |  0
.../validation/NoXmlBodyValidationException.java  |  0
.../validation/NoXmlHeaderValidationException.java |  0
.../validation/PredicateValidatingProcessor.java  |  0
.../validation/PredicateValidationException.java  |  0
.../support/processor/validation/SchemaReader.java |  0
.../validation/SchemaValidationException.java      |  0
.../processor/validation/ValidatingProcessor.java  |  0
.../validation/ValidatorErrorHandler.java          |  0
.../support/processor/validation/package.html      |  0
.../camel/util/xml}/XmlLineNumberParser.java      |  4 +-
core/camel-jaxp/src/main/schema/xtokenize.json    |  22 +++
.../language/xtokenizer}/AttributedQNameTest.java  |  4 +-
.../XMLTokenExpressionIteratorCharsetTest.java    |  2 +-
.../XMLTokenExpressionIteratorGroupingTest.java    |  10 +-
.../XMLTokenExpressionIteratorInvalidXMLTest.java  |  2 +-
.../XMLTokenExpressionIteratorTest.java            |  64 +------
.../camel/util/xml}/XmlLineNumberParserTest.java  |  2 +-
.../management/mbean/ManagedCamelContext.java      |  2 +-
.../management/ManagedNonManagedServiceTest.java  |  2 +-
...edProducerRouteAddRemoveRegisterAlwaysTest.java |  2 +-
.../management/ManagedRouteAddRemoveTest.java      |  2 +-
.../camel/support/builder/ExpressionBuilder.java  |  2 +-
.../support/builder/{xml => }/Namespaces.java      |  34 +---
core/pom.xml                                      |  1 +
parent/pom.xml                                    |  10 +
.../springboot/XPathLanguageAutoConfiguration.java | 117 ------------
.../springboot/XPathLanguageConfiguration.java    | 132 --------------
.../src/main/resources/META-INF/spring.factories  |  2 -
.../components-starter/camel-jaxp-starter/pom.xml  |  53 ++++++
.../XMLTokenizeLanguageAutoConfiguration.java      |  4 +-
.../XMLTokenizeLanguageConfiguration.java          |  2 +-
.../src/main/resources/META-INF/LICENSE.txt        | 203 +++++++++++++++++++++
.../src/main/resources/META-INF/NOTICE.txt        |  11 ++
.../additional-spring-configuration-metadata.json  |  10 +
.../src/main/resources/META-INF/spring.factories  |  12 +-
.../src/main/resources/META-INF/spring.provides}  |  12 +-
platforms/spring-boot/components-starter/pom.xml  |  1 +
.../camel-spring-boot-dependencies/pom.xml        |  10 +
.../camel/itest/issues/RssToHttpIssueTest.java    |  2 +-
.../camel/tools/apt/TypeConverterProcessor.java    |  3 +-
.../camel/maven/packaging/PackageLanguageMojo.java |  3 +
.../maven/packaging/SpringBootStarterMojo.java    |  4 +
122 files changed, 909 insertions(+), 603 deletions(-)

diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index 3775f12..c1ec489 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -2237,6 +2237,11 @@
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-jaxp-starter</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
      <artifactId>camel-jbpm-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 2df413f..9e43763 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -507,6 +507,7 @@
        <include>org.apache.camel:camel-jacksonxml-starter</include>
        <include>org.apache.camel:camel-jasypt-starter</include>
        <include>org.apache.camel:camel-jaxb-starter</include>
+        <include>org.apache.camel:camel-jaxp-starter</include>
        <include>org.apache.camel:camel-jbpm-starter</include>
        <include>org.apache.camel:camel-jcache-starter</include>
        <include>org.apache.camel:camel-jclouds-starter</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 7b2d678..0eaf5ef 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -1389,6 +1389,16 @@
      </dependency>
      <dependency>
        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jbpm</artifactId>
        <version>${project.version}</version>
      </dependency>
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
index cbd683d..0aa371d 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
@@ -94,7 +94,8 @@ import org.apache.camel.spi.LanguageResolver;
import org.apache.camel.spi.NamespaceAware;
import org.apache.camel.spi.PropertiesComponent;
import org.apache.camel.support.ObjectHelper;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
+import org.apache.camel.support.builder.xml.NamespacesHelper;
import org.apache.camel.support.jsse.KeyStoreParameters;
import org.apache.camel.support.jsse.SSLContextParameters;
import org.apache.camel.support.jsse.SecureRandomParameters;
@@ -342,7 +343,7 @@ public class CamelNamespaceHandler implements NamespaceHandler {
                if (object instanceof NamespaceAware) {
                    NamespaceAware namespaceAware = (NamespaceAware) object;
                    if (namespaces == null) {
-                        namespaces = new Namespaces(element);
+                        namespaces = NamespacesHelper.namespaces(element);
                    }
                    namespaces.configure(namespaceAware);
                }
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/SplitterWithXqureyTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/SplitterWithXqureyTest.java
index b728172..816539b 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/SplitterWithXqureyTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/SplitterWithXqureyTest.java
@@ -22,7 +22,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;

diff --git a/components/camel-jaxp/src/main/schema/xtokenize.json b/components/camel-jaxp/src/main/schema/xtokenize.json
new file mode 100644
index 0000000..52bf377
--- /dev/null
+++ b/components/camel-jaxp/src/main/schema/xtokenize.json
@@ -0,0 +1,22 @@
+{
+ "model": {
+    "kind": "model",
+    "name": "xtokenize",
+    "title": "XML Tokenize",
+    "description": "To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.",
+    "firstVersion": "2.14.0",
+    "javaType": "org.apache.camel.model.language.XMLTokenizerExpression",
+    "label": "language,core,xml",
+    "deprecated": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "headerName": { "kind": "attribute", "displayName": "Header Name", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Name of header to tokenize instead of using the message body." },
+    "mode": { "kind": "attribute", "displayName": "Mode", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element" },
+    "group": { "kind": "attribute", "displayName": "Group", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "secret": false, "description": "To group N parts together" },
+    "trim": { "kind": "attribute", "displayName": "Trim", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Sets the id of this node" }
+  }
+}
+
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java
index 936a773..75655c6 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.builder.saxon;

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;

diff --git a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java
index c95528c..8055da1 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder.saxon;
import org.apache.camel.Endpoint;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Before;
import org.junit.Test;
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java b/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
index 76f6660..cc76290 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
@@ -51,7 +51,8 @@ import org.apache.camel.spring.CamelThreadPoolFactoryBean;
import org.apache.camel.spring.SpringModelJAXBContextFactory;
import org.apache.camel.spring.remoting.CamelProxyFactoryBean;
import org.apache.camel.spring.remoting.CamelServiceExporter;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
+import org.apache.camel.support.builder.xml.NamespacesHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.spring.KeyStoreParametersFactoryBean;
@@ -483,7 +484,7 @@ public class CamelNamespaceHandler extends NamespaceHandlerSupport {
                if (object instanceof NamespaceAware) {
                    NamespaceAware namespaceAware = (NamespaceAware) object;
                    if (namespaces == null) {
-                        namespaces = new Namespaces(element);
+                        namespaces = NamespacesHelper.namespaces(element);
                    }
                    namespaces.configure(namespaceAware);
                }
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/LifecycleStrategyInjectionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/LifecycleStrategyInjectionTest.java
index 4bc45ea..0681551 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/LifecycleStrategyInjectionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/LifecycleStrategyInjectionTest.java
@@ -32,7 +32,7 @@ public class LifecycleStrategyInjectionTest extends SpringTestSupport {

    @Test
    public void testInjectedStrategy() throws Exception {
-        assertEquals(2, context.getLifecycleStrategies().size());
+        assertEquals(1, context.getLifecycleStrategies().size());
        assertIsInstanceOf(DummyLifecycleStrategy.class, context.getLifecycleStrategies().get(0));
    }
    
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/MultipleLifecycleStrategyInjectionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/MultipleLifecycleStrategyInjectionTest.java
index 5c0587e..dd17fe4 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/MultipleLifecycleStrategyInjectionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/MultipleLifecycleStrategyInjectionTest.java
@@ -32,7 +32,7 @@ public class MultipleLifecycleStrategyInjectionTest extends SpringTestSupport {

    @Test
    public void testInjectedStrategy() throws Exception {
-        assertEquals(3, context.getLifecycleStrategies().size());
+        assertEquals(2, context.getLifecycleStrategies().size());
        assertIsInstanceOf(DummyLifecycleStrategy.class, context.getLifecycleStrategies().get(0));
        assertIsInstanceOf(DummyLifecycleStrategy.class, context.getLifecycleStrategies().get(1));
    }
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
index 285ce02..361a492 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
@@ -57,7 +57,7 @@ import org.apache.camel.support.PatternHelper;
import org.apache.camel.util.CamelVersionHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.URISupport;
-import org.apache.camel.util.XmlLineNumberParser;
+import org.apache.camel.util.xml.XmlLineNumberParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

diff --git a/components/camel-validator/pom.xml b/components/camel-validator/pom.xml
index 82dc1e8..d995f92 100644
--- a/components/camel-validator/pom.xml
+++ b/components/camel-validator/pom.xml
@@ -39,6 +39,10 @@
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-support</artifactId>
        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jaxp</artifactId>
+        </dependency>

    </dependencies>
</project>
diff --git a/components/camel-xpath/pom.xml b/components/camel-xpath/pom.xml
index fd54835..a708614 100644
--- a/components/camel-xpath/pom.xml
+++ b/components/camel-xpath/pom.xml
@@ -38,7 +38,10 @@
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-support</artifactId>
-            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jaxp</artifactId>
        </dependency>

    </dependencies>
diff --git a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/MessageVariableResolver.java b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/MessageVariableResolver.java
index 3814e00..bd2f808 100644
--- a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/MessageVariableResolver.java
+++ b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/MessageVariableResolver.java
@@ -27,11 +27,11 @@ import org.apache.camel.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

-import static org.apache.camel.support.builder.xml.Namespaces.ENVIRONMENT_VARIABLES;
-import static org.apache.camel.support.builder.xml.Namespaces.EXCHANGE_PROPERTY;
-import static org.apache.camel.support.builder.xml.Namespaces.IN_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.OUT_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.SYSTEM_PROPERTIES_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.ENVIRONMENT_VARIABLES;
+import static org.apache.camel.support.builder.Namespaces.EXCHANGE_PROPERTY;
+import static org.apache.camel.support.builder.Namespaces.IN_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.OUT_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.SYSTEM_PROPERTIES_NAMESPACE;

/**
  * A variable resolver for XPath expressions which support properties on the
diff --git a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
index c930b85..8c5df66 100644
--- a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
+++ b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
@@ -61,7 +61,7 @@ import org.apache.camel.spi.NamespaceAware;
import org.apache.camel.support.DefaultExchange;
import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.MessageHelper;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.support.service.ServiceSupport;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
@@ -69,11 +69,11 @@ import org.apache.camel.util.StringHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

-import static org.apache.camel.support.builder.xml.Namespaces.DEFAULT_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.FUNCTION_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.IN_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.OUT_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.isMatchingNamespaceOrEmptyNamespace;
+import static org.apache.camel.support.builder.Namespaces.DEFAULT_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.FUNCTION_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.IN_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.OUT_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.isMatchingNamespaceOrEmptyNamespace;

/**
  * Creates an XPath expression builder which creates a nodeset result by
diff --git a/components/camel-xslt/pom.xml b/components/camel-xslt/pom.xml
index ca99199..2ef5b90 100644
--- a/components/camel-xslt/pom.xml
+++ b/components/camel-xslt/pom.xml
@@ -39,6 +39,10 @@
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-support</artifactId>
        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jaxp</artifactId>
+        </dependency>

    </dependencies>
</project>
diff --git a/components/readme.adoc b/components/readme.adoc
index 0d68d85..cd8e5e8 100644
--- a/components/readme.adoc
+++ b/components/readme.adoc
@@ -1000,7 +1000,7 @@ Number of Data Formats: 43 in 35 JAR artifacts (0 deprecated)
==== Expression Languages

// languages: START
-Number of Languages: 17 in 10 JAR artifacts (0 deprecated)
+Number of Languages: 16 in 10 JAR artifacts (0 deprecated)

[width="100%",cols="4,1,5",options="header"]
|===
@@ -1034,8 +1034,6 @@ Number of Languages: 17 in 10 JAR artifacts (0 deprecated)

| link:../core/camel-core/src/main/docs/tokenize-language.adoc[Tokenize] (camel-core) | 2.0 | To use Camel message body or header with a tokenizer in Camel expressions or predicates.

-| link:../core/camel-core/src/main/docs/xtokenize-language.adoc[XML Tokenize] (camel-core) | 2.14 | To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.
-
| link:camel-xpath/src/main/docs/xpath-language.adoc[XPath] (camel-xpath) | 1.1 | To use XPath (XML) in Camel expressions or predicates.

| link:camel-saxon/src/main/docs/xquery-language.adoc[XQuery] (camel-saxon) | 1.0 | To use XQuery (XML) in Camel expressions or predicates.
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 51aa0aa..83a5c28 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -122,6 +122,7 @@ import org.apache.camel.spi.Registry;
import org.apache.camel.spi.ReloadStrategy;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestRegistry;
+import org.apache.camel.spi.RestRegistryFactory;
import org.apache.camel.spi.RouteController;
import org.apache.camel.spi.RouteError.Phase;
import org.apache.camel.spi.RoutePolicyFactory;
@@ -225,6 +226,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam
    private volatile DataFormatResolver dataFormatResolver;
    private volatile ManagementStrategy managementStrategy;
    private volatile ManagementMBeanAssembler managementMBeanAssembler;
+    private volatile RestRegistryFactory restRegistryFactory;
    private volatile RestRegistry restRegistry;
    private volatile HeadersMapFactory headersMapFactory;
    private volatile BeanProxyFactory beanProxyFactory;
@@ -3133,7 +3135,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam
        getPackageScanClassResolver();
        getProducerServicePool();
        getPollingConsumerServicePool();
-        getRestRegistry();
+        getRestRegistryFactory();

        if (isTypeConverterStatisticsEnabled() != null) {
            getTypeConverterRegistry().getStatistics().setStatisticsEnabled(isTypeConverterStatisticsEnabled());
@@ -3689,6 +3691,29 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam
        this.restRegistry = doAddService(restRegistry);
    }

+    protected RestRegistry createRestRegistry() {
+        RestRegistryFactory factory = getRestRegistryFactory();
+        if (factory == null) {
+            throw new IllegalStateException("No RestRegistryFactory implementation found.  You need to add camel-rest to the classpath.");
+        }
+        return factory.createRegistry();
+    }
+
+    public RestRegistryFactory getRestRegistryFactory() {
+        if (restRegistryFactory == null) {
+            synchronized (lock) {
+                if (restRegistryFactory == null) {
+                    setRestRegistryFactory(createRestRegistryFactory());
+                }
+            }
+        }
+        return restRegistryFactory;
+    }
+
+    public void setRestRegistryFactory(RestRegistryFactory restRegistryFactory) {
+        this.restRegistryFactory = doAddService(restRegistryFactory);
+    }
+
    @Override
    public String getGlobalOption(String key) {
        String value = getGlobalOptions().get(key);
@@ -3902,7 +3927,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam

    protected abstract LanguageResolver createLanguageResolver();

-    protected abstract RestRegistry createRestRegistry();
+    protected abstract RestRegistryFactory createRestRegistryFactory();

    protected abstract EndpointRegistry<EndpointKey> createEndpointRegistry(Map<EndpointKey, Endpoint> endpoints);

diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
index bc76fe4..78bd717 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
@@ -31,7 +31,6 @@ import org.apache.camel.Consumer;
import org.apache.camel.Endpoint;
import org.apache.camel.EndpointAware;
import org.apache.camel.ErrorHandlerFactory;
-import org.apache.camel.FailedToCreateRouteException;
import org.apache.camel.FailedToStartRouteException;
import org.apache.camel.Processor;
import org.apache.camel.Route;
@@ -42,7 +41,6 @@ import org.apache.camel.processor.ErrorHandler;
import org.apache.camel.spi.LifecycleStrategy;
import org.apache.camel.spi.RouteContext;
import org.apache.camel.spi.RoutePolicy;
-import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.ChildServiceSupport;
import org.apache.camel.support.EventHelper;
import org.apache.camel.support.service.ServiceHelper;
@@ -60,21 +58,19 @@ public abstract class BaseRouteService extends ChildServiceSupport {
    private final AbstractCamelContext camelContext;
    private final RouteContext routeContext;
    private final Route route;
-    private final String id;
    private boolean removingRoutes;
    private final Map<Route, Consumer> inputs = new HashMap<>();
    private final AtomicBoolean warmUpDone = new AtomicBoolean(false);
    private final AtomicBoolean endpointDone = new AtomicBoolean(false);

-    public BaseRouteService(AbstractCamelContext camelContext, RouteContext routeContext, Route route, String id) {
-        this.camelContext = camelContext;
-        this.routeContext = routeContext;
+    public BaseRouteService(Route route) {
        this.route = route;
-        this.id = id;
+        this.routeContext = this.route.getRouteContext();
+        this.camelContext = this.routeContext.getCamelContext().adapt(AbstractCamelContext.class);
    }

    public String getId() {
-        return id;
+        return route.getId();
    }

    public CamelContext getCamelContext() {
@@ -132,7 +128,7 @@ public abstract class BaseRouteService extends ChildServiceSupport {
        try {
            doWarmUp();
        } catch (Exception e) {
-            throw new FailedToStartRouteException(id, getRouteDescription(), e);
+            throw new FailedToStartRouteException(getId(), getRouteDescription(), e);
        }
    }

@@ -213,11 +209,7 @@ public abstract class BaseRouteService extends ChildServiceSupport {
            ServiceHelper.startService(route);

            // invoke callbacks on route policy
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onStart(route);
-                }
-            }
+            routePolicyCallback(RoutePolicy::onStart);

            // fire event
            EventHelper.notifyRouteStarted(camelContext, route);
@@ -253,11 +245,8 @@ public abstract class BaseRouteService extends ChildServiceSupport {
            }

            // invoke callbacks on route policy
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onStop(route);
-                }
-            }
+            routePolicyCallback(RoutePolicy::onStop);
+
            // fire event
            EventHelper.notifyRouteStopped(camelContext, route);
        }
@@ -285,12 +274,9 @@ public abstract class BaseRouteService extends ChildServiceSupport {
            // endpoints should only be stopped when Camel is shutting down
            // see more details in the warmUp method
            ServiceHelper.stopAndShutdownServices(route.getEndpoint());
+
            // invoke callbacks on route policy
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onRemove(route);
-                }
-            }
+            routePolicyCallback(RoutePolicy::onRemove);

            // fire event
            EventHelper.notifyRouteRemoved(camelContext, route);
@@ -318,11 +304,7 @@ public abstract class BaseRouteService extends ChildServiceSupport {
        // suspend and resume logic is provided by DefaultCamelContext which leverages ShutdownStrategy
        // to safely suspend and resume
        try (MDCHelper mdcHelper = new MDCHelper(route.getId())) {
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onSuspend(route);
-                }
-            }
+            routePolicyCallback(RoutePolicy::onSuspend);
        }
    }

@@ -331,10 +313,14 @@ public abstract class BaseRouteService extends ChildServiceSupport {
        // suspend and resume logic is provided by DefaultCamelContext which leverages ShutdownStrategy
        // to safely suspend and resume
        try (MDCHelper mdcHelper = new MDCHelper(route.getId())) {
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onResume(route);
-                }
+            routePolicyCallback(RoutePolicy::onResume);
+        }
+    }
+
+    private void routePolicyCallback(java.util.function.BiConsumer<RoutePolicy, Route> callback) {
+        if (routeContext.getRoutePolicyList() != null) {
+            for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
+                callback.accept(routePolicy, route);
            }
        }
    }
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
similarity index 79%
rename from core/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
index a5c0dea..c4530b1 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
@@ -14,18 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl;
+package org.apache.camel.impl.engine;

-import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.camel.CamelContext;
-import org.apache.camel.impl.engine.AbstractDynamicRegistry;
import org.apache.camel.impl.transformer.TransformerKey;
-import org.apache.camel.model.transformer.TransformerDefinition;
-import org.apache.camel.reifier.transformer.TransformerReifier;
import org.apache.camel.spi.DataType;
import org.apache.camel.spi.Transformer;
import org.apache.camel.spi.TransformerRegistry;
@@ -39,18 +34,9 @@ public class DefaultTransformerRegistry extends AbstractDynamicRegistry<Transfor

    private final Map<TransformerKey, TransformerKey> aliasMap;

-    public DefaultTransformerRegistry(CamelContext context) throws Exception {
-        this(context, new ArrayList<>());
-    }
-
-    public DefaultTransformerRegistry(CamelContext context, List<TransformerDefinition> definitions) throws Exception {
+    public DefaultTransformerRegistry(CamelContext context) {
        super(context, CamelContextHelper.getMaximumTransformerCacheSize(context));
        this.aliasMap = new ConcurrentHashMap<>();
-        for (TransformerDefinition def : definitions) {
-            Transformer transformer = TransformerReifier.reifier(def).createTransformer(context);
-            context.addService(transformer);
-            put(createKey(def), transformer);
-        }
    }

    @Override
@@ -120,9 +106,4 @@ public class DefaultTransformerRegistry extends AbstractDynamicRegistry<Transfor
        return "TransformerRegistry for " + context.getName() + ", capacity: " + maxCacheSize;
    }

-    private TransformerKey createKey(TransformerDefinition def) {
-        return ObjectHelper.isNotEmpty(def.getScheme()) ? new TransformerKey(def.getScheme())
-            : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
-    }
-
}
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultValidatorRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
similarity index 71%
rename from core/camel-core/src/main/java/org/apache/camel/impl/DefaultValidatorRegistry.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
index a91b9ec..cef86eb 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultValidatorRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
@@ -14,15 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl;
-
-import java.util.List;
+package org.apache.camel.impl.engine;

import org.apache.camel.CamelContext;
-import org.apache.camel.impl.engine.AbstractDynamicRegistry;
import org.apache.camel.impl.validator.ValidatorKey;
-import org.apache.camel.model.validator.ValidatorDefinition;
-import org.apache.camel.reifier.validator.ValidatorReifier;
import org.apache.camel.spi.DataType;
import org.apache.camel.spi.Validator;
import org.apache.camel.spi.ValidatorRegistry;
@@ -34,19 +29,10 @@ import org.apache.camel.util.ObjectHelper;
  */
public class DefaultValidatorRegistry extends AbstractDynamicRegistry<ValidatorKey, Validator> implements ValidatorRegistry<ValidatorKey> {

-    public DefaultValidatorRegistry(CamelContext context) throws Exception {
+    public DefaultValidatorRegistry(CamelContext context) {
        super(context, CamelContextHelper.getMaximumValidatorCacheSize(context));
    }

-    public DefaultValidatorRegistry(CamelContext context, List<ValidatorDefinition> definitions) throws Exception {
-        this(context);
-        for (ValidatorDefinition def : definitions) {
-            Validator validator = ValidatorReifier.reifier(def).createValidator(context);
-            context.addService(validator);
-            put(createKey(def), validator);
-        }
-    }
-
    public Validator resolveValidator(ValidatorKey key) {
        Validator answer = get(key);
        if (answer == null && ObjectHelper.isNotEmpty(key.getType().getName())) {
@@ -70,8 +56,4 @@ public class DefaultValidatorRegistry extends AbstractDynamicRegistry<ValidatorK
        return "ValidatorRegistry for " + context.getName() + ", capacity: " + maxCacheSize;
    }

-    private ValidatorKey createKey(ValidatorDefinition def) {
-        return new ValidatorKey(new DataType(def.getType()));
-    }
-
}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/RestRegistryFactoryResolver.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/RestRegistryFactoryResolver.java
index 27bc0d0..5b0d9e4 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/RestRegistryFactoryResolver.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/RestRegistryFactoryResolver.java
@@ -59,7 +59,8 @@ public class RestRegistryFactoryResolver {
            }
        }

-        throw new IllegalArgumentException("No RestRegistryFactory implementation found.  You need to add camel-rest to the classpath.");
+        LOG.debug("No RestRegistryFactory implementation found.  You need to add camel-rest to the classpath.");
+        return null;
    }

    private Class<?> findFactory(String name, CamelContext context) throws ClassNotFoundException, IOException {
diff --git a/core/camel-core/pom.xml b/core/camel-core/pom.xml
index 5515347..a809544 100644
--- a/core/camel-core/pom.xml
+++ b/core/camel-core/pom.xml
@@ -85,6 +85,12 @@
        <!-- required dependencies by camel-core -->
        <dependency>
            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jaxp</artifactId>
+        </dependency>
+
+        <!-- required dependencies by camel-core -->
+        <dependency>
+            <groupId>org.apache.camel</groupId>
            <artifactId>camel-support</artifactId>
        </dependency>

@@ -461,7 +467,7 @@
                    </execution>
                    <!-- we need to copy the method.json schema file from camel-core to camel-bean because camel-bean is built before
                          camel-core and we would have a chicken-and-egg situation where camel-bean needs method.json during its build phase
-                        but this file is not available, so we have copied the file to camel-xpath and then we use this maven plugin
+                        but this file is not available, so we have copied the file to camel-bean and then we use this maven plugin
                          to copy over the file so its kept up to date -->
                    <execution>
                        <id>copy-bean-schema</id>
@@ -481,6 +487,28 @@
                            </resources>
                        </configuration>
                    </execution>
+                    <!-- we need to copy the xtokenize.json schema file from camel-core to camel-jaxp because camel-jaxp is built before
+                        camel-core and we would have a chicken-and-egg situation where camel-jaxp needs xtokenize.json during its build phase
+                        but this file is not available, so we have copied the file to camel-jaxp and then we use this maven plugin
+                        to copy over the file so its kept up to date -->
+                    <execution>
+                        <id>copy-jaxp-schema</id>
+                        <goals>
+                            <goal>resources</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <outputDirectory>${basedir}/../../components/camel-jaxp/src/main/schema</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/target/classes/org/apache/camel/model/language</directory>
+                                    <includes>
+                                        <include>xtokenize.json</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
                    <!-- we need to copy the xpath.json schema file from camel-core to camel-xpath because camel-xpath is built before
                          camel-core and we would have a chicken-and-egg situation where camel-xpath needs xpath.json during its build phase
                          but this file is not available, so we have copied the file to camel-xpath and then we use this maven plugin
diff --git a/core/camel-core/readme.adoc b/core/camel-core/readme.adoc
index 90ec683..92571b6 100644
--- a/core/camel-core/readme.adoc
+++ b/core/camel-core/readme.adoc
@@ -10,7 +10,7 @@
==== Expression Languages

// languages: START
-Number of Languages: 8 in 1 JAR artifacts (0 deprecated)
+Number of Languages: 7 in 1 JAR artifacts (0 deprecated)

[width="100%",cols="4,1,5",options="header"]
|===
@@ -29,8 +29,6 @@ Number of Languages: 8 in 1 JAR artifacts (0 deprecated)
| link:src/main/docs/simple-language.adoc[Simple] (camel-core) | 1.1 | To use Camels built-in Simple language in Camel expressions or predicates.

| link:src/main/docs/tokenize-language.adoc[Tokenize] (camel-core) | 2.0 | To use Camel message body or header with a tokenizer in Camel expressions or predicates.
-
-| link:src/main/docs/xtokenize-language.adoc[XML Tokenize] (camel-core) | 2.14 | To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.
|===
// languages: END

diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java b/core/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
index 8e3b79f..f2d137c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
@@ -29,7 +29,7 @@ import org.apache.camel.model.language.ExchangePropertyExpression;
import org.apache.camel.model.language.HeaderExpression;
import org.apache.camel.model.language.JsonPathExpression;
import org.apache.camel.model.language.XPathExpression;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.util.ObjectHelper;

/**
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
index 446c4ac..fe7ec30 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
@@ -16,9 +16,16 @@
  */
package org.apache.camel.builder;

+import org.apache.camel.Exchange;
import org.apache.camel.Expression;
+import org.apache.camel.spi.Language;
+import org.apache.camel.support.ExpressionAdapter;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.util.StringHelper;

+import static org.apache.camel.support.IntrospectionSupport.setProperty;
+
/**
  * A helper class for working with <a href="http://camel.apache.org/expression.html">expressions</a>.
  */
@@ -48,14 +55,52 @@ public final class ExpressionBuilder extends org.apache.camel.support.builder.Ex
    }

    public static Expression tokenizeXMLAwareExpression(String path, char mode) {
-        StringHelper.notEmpty(path, "path");
-        return new XMLTokenExpressionIterator(path, mode);
+        return tokenizeXMLAwareExpression(null, path, mode, 1, null);
    }

    public static Expression tokenizeXMLAwareExpression(String path, char mode, int group) {
+        return tokenizeXMLAwareExpression(null, path, mode, group, null);
+    }
+
+    public static Expression tokenizeXMLAwareExpression(String path, char mode, int group, Namespaces namespaces) {
+        return tokenizeXMLAwareExpression(null, path, mode, group, namespaces);
+    }
+
+    public static Expression tokenizeXMLAwareExpression(String headerName, String path, char mode, int group, Namespaces namespaces) {
        StringHelper.notEmpty(path, "path");
-        return new XMLTokenExpressionIterator(path, mode, group);
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                Language language = exchange.getContext().resolveLanguage("xtokenize");
+                if (headerName != null) {
+                    setProperty(language, "headerName", headerName);
+                }
+                if (mode != 'i') {
+                    setProperty(language, "mode", mode);
+                }
+                if (group > 1) {
+                    setProperty(language, "group", group);
+                }
+                if (namespaces != null) {
+                    setProperty(language, "namespaces", namespaces);
+                }
+                setProperty(language, "path", path);
+                return language.createExpression(null).evaluate(exchange, Object.class);
+            }
+
+            @Override
+            public String toString() {
+                return "xtokenize(" + path + ")";
+            }
+        };
    }

+    private static void setProperty(Object bean, String name, Object value) {
+        try {
+            IntrospectionSupport.setProperty(bean, name, value);
+        } catch (Exception e) {
+            throw new IllegalArgumentException("Failed to set property " + name + " on " + bean
+                    + ". Reason: " + e, e);
+        }
+    }

}
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
index fb0045c..5f49dfe 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
@@ -28,7 +28,7 @@ import org.apache.camel.Message;
import org.apache.camel.Predicate;
import org.apache.camel.support.ExpressionAdapter;
import org.apache.camel.support.ExpressionToPredicateAdapter;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;

/**
  * Represents an expression clause within the DSL which when the expression is
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
index c899ab0..a077cec 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
@@ -38,7 +38,7 @@ import org.apache.camel.model.language.TokenizerExpression;
import org.apache.camel.model.language.XMLTokenizerExpression;
import org.apache.camel.model.language.XPathExpression;
import org.apache.camel.model.language.XQueryExpression;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;

/**
  * A support class for building expression clauses.
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
index 7c8a039..e10cd2b 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
@@ -23,8 +23,7 @@ import java.util.List;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
import org.apache.camel.Predicate;
-import org.apache.camel.spi.NamespaceAware;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;

/**
  * A builder of expressions or predicates based on values.
@@ -197,8 +196,7 @@ public class ValueBuilder implements Expression, Predicate {
    }

    public ValueBuilder xtokenize(String path, char mode, Namespaces namespaces) {
-        Expression newExp = ExpressionBuilder.tokenizeXMLAwareExpression(path, mode);
-        ((NamespaceAware)newExp).setNamespaces(namespaces.getNamespaces());
+        Expression newExp = ExpressionBuilder.tokenizeXMLAwareExpression(path, mode, 1, namespaces);
        return onNewValueBuilder(newExp);
    }

diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
index 7f6e2ae..449a2fd 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
@@ -29,6 +29,8 @@ import org.apache.camel.builder.ErrorHandlerBuilderSupport;
import org.apache.camel.health.HealthCheckRegistry;
import org.apache.camel.impl.engine.AbstractCamelContext;
import org.apache.camel.impl.engine.BaseRouteService;
+import org.apache.camel.impl.engine.DefaultTransformerRegistry;
+import org.apache.camel.impl.engine.DefaultValidatorRegistry;
import org.apache.camel.impl.transformer.TransformerKey;
import org.apache.camel.impl.validator.ValidatorKey;
import org.apache.camel.model.DataFormatDefinition;
@@ -43,12 +45,18 @@ import org.apache.camel.model.transformer.TransformerDefinition;
import org.apache.camel.model.validator.ValidatorDefinition;
import org.apache.camel.processor.MulticastProcessor;
import org.apache.camel.reifier.dataformat.DataFormatReifier;
+import org.apache.camel.reifier.transformer.TransformerReifier;
+import org.apache.camel.reifier.validator.ValidatorReifier;
import org.apache.camel.runtimecatalog.RuntimeCamelCatalog;
import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataType;
import org.apache.camel.spi.Registry;
+import org.apache.camel.spi.Transformer;
import org.apache.camel.spi.TransformerRegistry;
+import org.apache.camel.spi.Validator;
import org.apache.camel.spi.ValidatorRegistry;
import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.util.ObjectHelper;

/**
  * Represents the context used to configure routes and the policies to use.
@@ -224,11 +232,31 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp
    }

    protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws Exception {
-        return new DefaultValidatorRegistry(this, getValidators());
+        DefaultValidatorRegistry registry = new DefaultValidatorRegistry(this);
+        for (ValidatorDefinition def : getValidators()) {
+            Validator validator = ValidatorReifier.reifier(def).createValidator(this);
+            registry.put(createKey(def), doAddService(validator));
+        }
+        return registry;
+    }
+
+    private ValidatorKey createKey(ValidatorDefinition def) {
+        return new ValidatorKey(new DataType(def.getType()));
    }

    protected TransformerRegistry<TransformerKey> createTransformerRegistry() throws Exception {
-        return new DefaultTransformerRegistry(this, getTransformers());
+        DefaultTransformerRegistry registry = new DefaultTransformerRegistry(this);
+        for (TransformerDefinition def : getTransformers()) {
+            Transformer transformer = TransformerReifier.reifier(def).createTransformer(this);
+            registry.put(createKey(def), doAddService(transformer));
+        }
+        return registry;
+    }
+
+    private TransformerKey createKey(TransformerDefinition def) {
+        return ObjectHelper.isNotEmpty(def.getScheme())
+                ? new TransformerKey(def.getScheme())
+                : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
    }

    protected abstract HealthCheckRegistry createHealthCheckRegistry();
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index c35b01a..dad1661 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -82,6 +82,7 @@ import org.apache.camel.spi.PackageScanClassResolver;
import org.apache.camel.spi.ProcessorFactory;
import org.apache.camel.spi.Registry;
import org.apache.camel.spi.RestRegistry;
+import org.apache.camel.spi.RestRegistryFactory;
import org.apache.camel.spi.RouteController;
import org.apache.camel.spi.ShutdownStrategy;
import org.apache.camel.spi.StreamCachingStrategy;
@@ -311,8 +312,8 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
    }

    @Override
-    protected RestRegistry createRestRegistry() {
-        return new RestRegistryFactoryResolver().resolve(this).createRegistry();
+    protected RestRegistryFactory createRestRegistryFactory() {
+        return new RestRegistryFactoryResolver().resolve(this);
    }

    protected EndpointRegistry<EndpointKey> createEndpointRegistry(Map<EndpointKey, Endpoint> endpoints) {
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
index 7b506d5..56b4f86 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -292,8 +292,8 @@ public class DefaultModel implements Model {
        mcc.setStartingRoutes(true);
        try {

-            Route route = new RouteReifier(routeDefinition).addRoutes(mcc);
-            RouteService routeService = new RouteService(mcc, routeDefinition, route.getRouteContext(), route);
+            Route route = new RouteReifier(routeDefinition).createRoute(mcc);
+            RouteService routeService = new RouteService(route);
            mcc.startRouteService(routeService, true);
        } finally {
            // we are done staring routes
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java b/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
index 1354b57..81cf3f8 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
@@ -40,7 +40,7 @@ import org.apache.camel.support.service.ServiceSupport;
import org.apache.camel.util.CollectionStringBuffer;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
-import org.apache.camel.util.XmlLineNumberParser;
+import org.apache.camel.util.xml.XmlLineNumberParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java b/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
index 8db66c7..b4e02e6 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
@@ -22,14 +22,12 @@ import org.apache.camel.ErrorHandlerFactory;
import org.apache.camel.Processor;
import org.apache.camel.Route;
import org.apache.camel.Service;
-import org.apache.camel.impl.engine.AbstractCamelContext;
import org.apache.camel.impl.engine.BaseRouteService;
import org.apache.camel.model.OnCompletionDefinition;
import org.apache.camel.model.OnExceptionDefinition;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.RouteDefinitionHelper;
-import org.apache.camel.spi.RouteContext;
import org.apache.camel.support.CamelContextHelper;

/**
@@ -40,9 +38,9 @@ public class RouteService extends BaseRouteService {

    private final RouteDefinition routeDefinition;

-    public RouteService(AbstractCamelContext camelContext, RouteDefinition routeDefinition, RouteContext routeContext, Route route) {
-        super(camelContext, routeContext, route, routeDefinition.idOrCreate(camelContext.getNodeIdFactory()));
-        this.routeDefinition = routeDefinition;
+    public RouteService(Route route) {
+        super(route);
+        this.routeDefinition = (RouteDefinition) route.getRouteContext().getRoute();
    }

    public RouteDefinition getRouteDefinition() {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
index ff08b58..5a7f399 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
@@ -55,7 +55,7 @@ import org.apache.camel.spi.ModelJAXBContextFactory;
import org.apache.camel.spi.NamespaceAware;
import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.XmlLineNumberParser;
+import org.apache.camel.util.xml.XmlLineNumberParser;

import static org.apache.camel.model.ProcessorDefinitionHelper.filterTypeInOutputs;

diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java b/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
index b29e982..7c09111 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
@@ -24,13 +24,12 @@ import javax.xml.bind.annotation.XmlRootElement;
import org.apache.camel.CamelContext;
import org.apache.camel.Expression;
import org.apache.camel.Predicate;
-import org.apache.camel.language.tokenizer.XMLTokenizeLanguage;
import org.apache.camel.spi.Metadata;

/**
  * To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.
  *
- * @see XMLTokenizeLanguage
+ * @see org.apache.camel.language.xtokenizer.XMLTokenizeLanguage
  */
@Metadata(firstVersion = "2.14.0", label = "language,core,xml", title = "XML Tokenize")
@XmlRootElement(name = "xtokenize")
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
index 3fbffa9..2f6ca2a 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -87,7 +87,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
        throw new UnsupportedOperationException("Not implemented for RouteDefinition");
    }

-    public Route addRoutes(CamelContext camelContext) throws Exception {
+    public Route createRoute(CamelContext camelContext) throws Exception {
        @SuppressWarnings("deprecation")
        ErrorHandlerFactory handler = camelContext.getErrorHandlerFactory();
        if (handler != null) {
@@ -95,7 +95,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
        }

        try {
-            return addRoutes(camelContext, definition.getInput());
+            return createRoute(camelContext, definition.getInput());
        } catch (FailedToCreateRouteException e) {
            throw e;
        } catch (Exception e) {
@@ -202,7 +202,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {

    // Implementation methods
    // -------------------------------------------------------------------------
-    protected Route addRoutes(CamelContext camelContext, FromDefinition fromType) throws Exception {
+    protected Route createRoute(CamelContext camelContext, FromDefinition fromType) throws Exception {
        DefaultRouteContext routeContext = new DefaultRouteContext(camelContext, definition, fromType);

        // configure tracing
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/DefaultNamespaceContextTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/DefaultNamespaceContextTest.java
index 495318f..5e91618 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/DefaultNamespaceContextTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/DefaultNamespaceContextTest.java
@@ -23,7 +23,7 @@ import java.util.Map;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.language.xpath.DefaultNamespaceContext;
import org.apache.camel.language.xpath.XPathBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

public class DefaultNamespaceContextTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/ExtractXPathWithNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/ExtractXPathWithNamespaceTest.java
index e701ae0..662a7dc 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/ExtractXPathWithNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/ExtractXPathWithNamespaceTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder.xml;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

/**
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathHeaderNameResultTypeAndNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathHeaderNameResultTypeAndNamespaceTest.java
index 1db0a10..6b5841a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathHeaderNameResultTypeAndNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathHeaderNameResultTypeAndNamespaceTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder.xml;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

/**
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceResultTypeTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceResultTypeTest.java
index 30e0bb4..826d08d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceResultTypeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceResultTypeTest.java
@@ -17,7 +17,7 @@
package org.apache.camel.builder.xml;

import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;

/**
  * XPath with namespace test
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceTest.java
index 0e3734b..72344b4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder.xml;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

/**
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNestedNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNestedNamespaceTest.java
index 73af8d8..c1f19ca 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNestedNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNestedNamespaceTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.builder.xml;

import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

public class XPathNestedNamespaceTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathTest.java
index 2000a3b..b9c73d6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathTest.java
@@ -43,7 +43,7 @@ import org.apache.camel.Expression;
import org.apache.camel.Predicate;
import org.apache.camel.language.xpath.InvalidXPathException;
import org.apache.camel.language.xpath.XPathBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.util.StringHelper;
import org.junit.Test;

diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathWithNamespacesFromDomTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathWithNamespacesFromDomTest.java
index e30b52a..97fea60 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathWithNamespacesFromDomTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathWithNamespacesFromDomTest.java
@@ -22,7 +22,8 @@ import org.w3c.dom.Element;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.language.xpath.DefaultNamespaceContext;
import org.apache.camel.language.xpath.XPathBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
+import org.apache.camel.support.builder.xml.NamespacesHelper;
import org.junit.Test;

public class XPathWithNamespacesFromDomTest extends ContextTestSupport {
@@ -35,7 +36,7 @@ public class XPathWithNamespacesFromDomTest extends ContextTestSupport {
        assertNotNull("Could not find element for id 'a'", element);

        XPathBuilder builder = XPathBuilder.xpath("//y:foo[@id='z']");
-        Namespaces ns = new Namespaces(element);
+        Namespaces ns = NamespacesHelper.namespaces(element);
        ns.configure(builder);
        builder.start();
        DefaultNamespaceContext namespaceContext = builder.getNamespaceContext();
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
index 4c0ffc8..caffd55 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
@@ -52,7 +52,7 @@ public class MultipleLifecycleStrategyTest extends TestSupport {
        List<String> expectedEvents = Arrays.asList("onContextStart",
            "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
            "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
-            "onServiceAdd", "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop");
+            "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop");
        
        assertEquals(expectedEvents, dummy1.getEvents());
        assertEquals(expectedEvents, dummy2.getEvents());
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/XMLTokenSplitTest.java b/core/camel-core/src/test/java/org/apache/camel/language/XMLTokenSplitTest.java
index d103b15..6107a74 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/XMLTokenSplitTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/XMLTokenSplitTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Before;
import org.junit.Test;

diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageGroupingTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageGroupingTest.java
index 40c6eff..db2fdcd 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageGroupingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageGroupingTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.language.tokenizer;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

public class XMLTokenizeLanguageGroupingTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingFileTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingFileTest.java
index e3316e3..30ca9a8 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingFileTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingFileTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.language.tokenizer;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Before;
import org.junit.Test;

diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingTest.java
index add5d4f..cc1f232 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingTest.java
@@ -17,7 +17,7 @@
package org.apache.camel.language.tokenizer;

import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;

public class XMLTokenizeLanguageStreamingTest extends XMLTokenizeLanguageTest {

diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageTest.java
index 6fd58c8..13faec3 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.language.tokenizer;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

public class XMLTokenizeLanguageTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageGroupingTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageGroupingTest.java
index 50c33db..5e6b9e6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageGroupingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageGroupingTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.language.tokenizer;

import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

public class XMLTokenizeWrapLanguageGroupingTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageTest.java
index 9419c0a..04d2ca6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.language.tokenizer;

import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

public class XMLTokenizeWrapLanguageTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
index 0982ae2..d9605f5 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Before;
import org.junit.Test;

diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupWrappedMultiXmlTokenTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupWrappedMultiXmlTokenTest.java
index a548dfb..d5da8bd 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupWrappedMultiXmlTokenTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupWrappedMultiXmlTokenTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Before;
import org.junit.Test;

diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWithXqureyTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWithXqureyTest.java
index f2c027e..a150ca2 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWithXqureyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWithXqureyTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

public class SplitterWithXqureyTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterAndResultTypeTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterAndResultTypeTest.java
index a770d4f..f518196 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterAndResultTypeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterAndResultTypeTest.java
@@ -17,7 +17,7 @@
package org.apache.camel.processor;

import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;

public class XPathWithNamespaceBuilderFilterAndResultTypeTest extends XPathWithNamespaceBuilderFilterTest {

diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java
index 318f8b9..634bbe6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.Endpoint;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Before;
import org.junit.Test;

diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespacesFilterTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespacesFilterTest.java
index 90553c0..556d87c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespacesFilterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespacesFilterTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.Endpoint;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Before;
import org.junit.Test;

diff --git a/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
index b43cab4..ad1ce88 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
@@ -22,7 +22,7 @@ import org.w3c.dom.Element;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.ModelHelper;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.junit.Test;

public class DumpModelAsXmlNamespaceTest extends ContextTestSupport {
diff --git a/core/camel-jaxp/pom.xml b/core/camel-jaxp/pom.xml
new file mode 100644
index 0000000..3e4c36f
--- /dev/null
+++ b/core/camel-jaxp/pom.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>core</artifactId>
+        <version>3.0.0-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>camel-jaxp</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Camel :: JAXP</name>
+    <description>Camel JAXP Support</description>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>spi-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>meta-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-support</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <version>${project.version}</version>
+                <configuration>
+                    <!-- set to true to make build fail fast if missing documentation in docs files -->
+                    <failFast>false</failFast>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>generate</id>
+                        <goals>
+                            <goal>generate-jaxb-list</goal>
+                            <goal>generate-eips-list</goal>
+                            <goal>generate-components-list</goal>
+                            <goal>generate-dataformats-list</goal>
+                            <goal>generate-languages-list</goal>
+                        </goals>
+                        <phase>process-classes</phase>
+                    </execution>
+                    <execution>
+                        <id>validate</id>
+                        <goals>
+                            <goal>validate-components</goal>
+                            <goal>prepare-spring-boot-starter</goal>
+                            <goal>prepare-spring-boot-auto-configuration</goal>
+                            <goal>generate-legal</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                    </execution>
+                    <execution>
+                        <id>readme</id>
+                        <goals>
+                            <goal>update-readme</goal>
+                        </goals>
+                        <phase>package</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-generated-resources</id>
+                        <goals>
+                            <goal>resources</goal>
+                        </goals>
+                        <phase>process-classes</phase>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/components</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/dataformats</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/languages</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/models</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/jaxb</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/legal</directory>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+
+        <!-- enables the APT dependency so that it can be disabled in IDE builds -->
+        <profile>
+            <id>apt</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+
+            <dependencies>
+
+                <!-- enable the APT processor -->
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>apt</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+
+            </dependencies>
+        </profile>
+
+    </profiles>
+</project>
diff --git a/core/camel-core/src/main/docs/xtokenize-language.adoc b/core/camel-jaxp/src/main/docs/xtokenize-language.adoc
similarity index 100%
rename from core/camel-core/src/main/docs/xtokenize-language.adoc
rename to core/camel-jaxp/src/main/docs/xtokenize-language.adoc
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/package.html b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/package.html
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/package.html
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/RecordableReader.java b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/RecordableReader.java
similarity index 98%
rename from core/camel-core/src/main/java/org/apache/camel/builder/RecordableReader.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/RecordableReader.java
index 46ff821..51020bb 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/RecordableReader.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/RecordableReader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;

import java.io.CharArrayWriter;
import java.io.FilterReader;
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/XMLTokenExpressionIterator.java b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
similarity index 92%
rename from core/camel-core/src/main/java/org/apache/camel/builder/XMLTokenExpressionIterator.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
index ce44a39..8cb503f 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/XMLTokenExpressionIterator.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;

import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -51,20 +52,22 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
- * An {@link org.apache.camel.language.tokenizer.XMLTokenizeLanguage} based iterator.
+ * An {@link org.apache.camel.language.xtokenizer.XMLTokenizeLanguage} based iterator.
  */
public class XMLTokenExpressionIterator extends ExpressionAdapter implements NamespaceAware {
+    protected final String headerName;
    protected final String path;
    protected char mode;
    protected int group;
    protected Map<String, String> nsmap;

    public XMLTokenExpressionIterator(String path, char mode) {
-        this(path, mode, 1);
+        this(null, path, mode, 1);
    }

-    public XMLTokenExpressionIterator(String path, char mode, int group) {
+    public XMLTokenExpressionIterator(String headerName, String path, char mode, int group) {
        StringHelper.notEmpty(path, "path");
+        this.headerName = headerName;
        this.path = path;
        this.mode = mode;
        this.group = group > 1 ? group : 1;
@@ -97,7 +100,7 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
    }

    protected Iterator<?> createIterator(InputStream in, String charset) throws XMLStreamException, UnsupportedEncodingException {
-        return new XMLTokenIterator(path, nsmap, mode, group, in, charset);
+        return createIterator(new InputStreamReader(in, charset));
    }

    protected Iterator<?> createIterator(Reader in) throws XMLStreamException {
@@ -126,29 +129,35 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
      * @return the evaluated value
      */
    protected Object doEvaluate(Exchange exchange, boolean closeStream) {
-        InputStream in = null;
+        Reader reader = null;
        try {
-            in = exchange.getIn().getMandatoryBody(InputStream.class);
-            String charset = ExchangeHelper.getCharsetName(exchange);
-            return createIterator(in, charset);
+            if (headerName != null) {
+                String val = exchange.getIn().getHeader(headerName, String.class);
+                reader = new StringReader(val);
+            } else {
+                InputStream in = exchange.getIn().getMandatoryBody(InputStream.class);
+                String charset = ExchangeHelper.getCharsetName(exchange);
+                reader = new InputStreamReader(in, charset);
+            }
+            return createIterator(reader);
        } catch (InvalidPayloadException e) {
            exchange.setException(e);
            // must close input stream
-            IOHelper.close(in);
+            IOHelper.close(reader);
            return null;
        } catch (XMLStreamException e) {
            exchange.setException(e);
            // must close input stream
-            IOHelper.close(in);
+            IOHelper.close(reader);
            return null;
        } catch (UnsupportedEncodingException e) {
            exchange.setException(e);
            // must close input stream
-            IOHelper.close(in);
+            IOHelper.close(reader);
            return null;
        } finally {
            if (closeStream) {
-                IOHelper.close(in);
+                IOHelper.close(reader);
            }
        }
    }
@@ -158,8 +167,6 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
        private static final Logger LOG = LoggerFactory.getLogger(XMLTokenIterator.class);
        private static final Pattern NAMESPACE_PATTERN = Pattern.compile("xmlns(:\\w+|)\\s*=\\s*('[^']*'|\"[^\"]*\")");

-        private transient InputStream originalInputStream;
-
        private AttributedQName[] splitpath;
        private int index;
        private char mode;
@@ -180,24 +187,6 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam

        private Object nextToken;
        
-        XMLTokenIterator(String path, Map<String, String> nsmap, char mode, InputStream in, String charset) 
-            throws XMLStreamException, UnsupportedEncodingException {
-            // woodstox's getLocation().etCharOffset() does not return the offset correctly for InputStream, so use Reader instead.
-            this(path, nsmap, mode, 1, new InputStreamReader(in, charset));
-            this.originalInputStream = in;
-        }
-
-        XMLTokenIterator(String path, Map<String, String> nsmap, char mode, int group, InputStream in, String charset) 
-            throws XMLStreamException, UnsupportedEncodingException {
-            // woodstox's getLocation().etCharOffset() does not return the offset correctly for InputStream, so use Reader instead.
-            this(path, nsmap, mode, group, new InputStreamReader(in, charset));
-            this.originalInputStream = in;
-        }
-
-        XMLTokenIterator(String path, Map<String, String> nsmap, char mode, Reader in) throws XMLStreamException {
-            this(path, nsmap, mode, 1, in);
-        }
-
        XMLTokenIterator(String path, Map<String, String> nsmap, char mode, int group, Reader in) throws XMLStreamException {
            final String[] sl = path.substring(1).split("/");
            this.splitpath = new AttributedQName[sl.length];
@@ -608,9 +597,7 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
                // ignore
            }
            // need to close the original input stream as well as the reader do not delegate close it
-            if (originalInputStream != null) {
-                IOHelper.close(originalInputStream);
-            }
+            IOHelper.close(in);
        }
    }

diff --git a/core/camel-core/src/main/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguage.java b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
similarity index 75%
rename from core/camel-core/src/main/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguage.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
index 13e9b15..da9a524 100644
--- a/core/camel-core/src/main/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguage.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.language.tokenizer;
+package org.apache.camel.language.xtokenizer;

import org.apache.camel.Expression;
import org.apache.camel.Predicate;
-import org.apache.camel.builder.ExpressionBuilder;
import org.apache.camel.spi.annotations.Language;
import org.apache.camel.support.ExpressionToPredicateAdapter;
import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.util.ObjectHelper;

/**
@@ -37,20 +37,18 @@ import org.apache.camel.util.ObjectHelper;
@Language("xtokenize")
public class XMLTokenizeLanguage extends LanguageSupport {

-    private String path;
    private String headerName;
+    private String path;
    private char mode;
    private int group;
+    private Namespaces namespaces;

    public static Expression tokenize(String path) {
-        return tokenize(path, 'i');
+        return tokenize(null, path, 'i');
    }

    public static Expression tokenize(String path, char mode) {
-        XMLTokenizeLanguage language = new XMLTokenizeLanguage();
-        language.setPath(path);
-        language.setMode(mode);
-        return language.createExpression(null);
+        return tokenize(null, path, mode);
    }

    public static Expression tokenize(String headerName, String path) {
@@ -58,11 +56,16 @@ public class XMLTokenizeLanguage extends LanguageSupport {
    }

    public static Expression tokenize(String headerName, String path, char mode) {
+        return tokenize(headerName, path, mode, 1, null);
+    }
+
+    public static Expression tokenize(String headerName, String path, char mode, int group, Namespaces namespaces) {
        XMLTokenizeLanguage language = new XMLTokenizeLanguage();
        language.setHeaderName(headerName);
-        language.setPath(path);
        language.setMode(mode);
-        return language.createExpression(null);
+        language.setGroup(group);
+        language.setNamespaces(namespaces);
+        return language.createExpression(path);
    }

    public Predicate createPredicate(String expression) {
@@ -72,18 +75,22 @@ public class XMLTokenizeLanguage extends LanguageSupport {
    /**
      * Creates a tokenize expression.
      */
-    public Expression createExpression() {
+    public Expression createExpression(String expression) {
+        String path = expression != null ? expression : this.path;
        ObjectHelper.notNull(path, "path");
+        XMLTokenExpressionIterator expr = new XMLTokenExpressionIterator(headerName, path, mode, group);
+        if (namespaces != null) {
+            expr.setNamespaces(namespaces.getNamespaces());
+        }
+        return expr;
+    }

-        Expression answer = ExpressionBuilder.tokenizeXMLAwareExpression(path, mode);
-        return answer;
+    public String getHeaderName() {
+        return headerName;
    }

-    public Expression createExpression(String expression) {
-        if (ObjectHelper.isNotEmpty(expression)) {
-            this.path = expression;
-        }
-        return createExpression();
+    public void setHeaderName(String headerName) {
+        this.headerName = headerName;
    }

    public String getPath() {
@@ -94,14 +101,6 @@ public class XMLTokenizeLanguage extends LanguageSupport {
        this.path = path;
    }

-    public String getHeaderName() {
-        return headerName;
-    }
-
-    public void setHeaderName(String headerName) {
-        this.headerName = headerName;
-    }
-
    public char getMode() {
        return mode;
    }
@@ -118,6 +117,14 @@ public class XMLTokenizeLanguage extends LanguageSupport {
        this.group = group;
    }

+    public Namespaces getNamespaces() {
+        return namespaces;
+    }
+
+    public void setNamespaces(Namespaces namespaces) {
+        this.namespaces = namespaces;
+    }
+
    public boolean isSingleton() {
        return false;
    }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/package.html
similarity index 91%
copy from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html
copy to core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/package.html
index 8721b1d..0008a2f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/package.html
@@ -21,7 +21,7 @@
</head>
<body>

-Performs XML validation using JAXP for validating against XSD
+Camel XML <a href="http://camel.apache.org/tokenizer">Tokenizer</a> language.

</body>
</html>
diff --git a/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/NamespacesHelper.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/NamespacesHelper.java
new file mode 100644
index 0000000..37383f6
--- /dev/null
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/NamespacesHelper.java
@@ -0,0 +1,37 @@
+package org.apache.camel.support.builder.xml;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+import org.apache.camel.support.builder.Namespaces;
+
+public class NamespacesHelper {
+
+    public static Namespaces namespaces(Element element) {
+        Namespaces namespaces = new Namespaces();
+        add(namespaces, element);
+        return namespaces;
+    }
+
+    private static void add(Namespaces namespaces, Element element) {
+        // let's set the parent first in case we overload a prefix here
+        Node parentNode = element.getParentNode();
+        if (parentNode instanceof org.w3c.dom.Element) {
+            add(namespaces, (Element) parentNode);
+        }
+        NamedNodeMap attributes = element.getAttributes();
+        int size = attributes.getLength();
+        for (int i = 0; i < size; i++) {
+            Attr node = (Attr) attributes.item(i);
+            String name = node.getName();
+            if (name.startsWith("xmlns:")) {
+                String prefix = name.substring("xmlns:".length());
+                String uri = node.getValue();
+                namespaces.add(prefix, uri);
+            }
+        }
+    }
+
+}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
similarity index 99%
rename from core/camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
index 8db2112..673c8ec7 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
@@ -340,11 +340,11 @@ public class StAX2SAXSource extends SAXSource implements XMLReader {
    }

    public void parse(InputSource input) throws SAXException {
-        StAX2SAXSource.this.parse();
+        parse();
    }

    public void parse(String systemId) throws SAXException {
-        StAX2SAXSource.this.parse();
+        parse();
    }

}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/package.html
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/package.html
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java b/core/camel-jaxp/src/main/java/org/apache/camel/util/xml/XmlLineNumberParser.java
similarity index 99%
rename from core/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/util/xml/XmlLineNumberParser.java
index 75fd14f..1170f61 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/util/xml/XmlLineNumberParser.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.util;
+package org.apache.camel.util.xml;

import java.io.IOException;
import java.io.InputStream;
@@ -37,6 +37,8 @@ import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

+import org.apache.camel.util.ObjectHelper;
+
/**
  * An XML parser that uses SAX to include line and column number for each XML element in the parsed Document.
  * <p>
diff --git a/core/camel-jaxp/src/main/schema/xtokenize.json b/core/camel-jaxp/src/main/schema/xtokenize.json
new file mode 100644
index 0000000..52bf377
--- /dev/null
+++ b/core/camel-jaxp/src/main/schema/xtokenize.json
@@ -0,0 +1,22 @@
+{
+ "model": {
+    "kind": "model",
+    "name": "xtokenize",
+    "title": "XML Tokenize",
+    "description": "To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.",
+    "firstVersion": "2.14.0",
+    "javaType": "org.apache.camel.model.language.XMLTokenizerExpression",
+    "label": "language,core,xml",
+    "deprecated": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "headerName": { "kind": "attribute", "displayName": "Header Name", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Name of header to tokenize instead of using the message body." },
+    "mode": { "kind": "attribute", "displayName": "Mode", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element" },
+    "group": { "kind": "attribute", "displayName": "Group", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "secret": false, "description": "To group N parts together" },
+    "trim": { "kind": "attribute", "displayName": "Trim", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Sets the id of this node" }
+  }
+}
+
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/AttributedQNameTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/AttributedQNameTest.java
similarity index 96%
rename from core/camel-core/src/test/java/org/apache/camel/builder/AttributedQNameTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/AttributedQNameTest.java
index 1a59734..1f6fab6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/AttributedQNameTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/AttributedQNameTest.java
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;

import javax.xml.namespace.QName;

-import org.apache.camel.builder.XMLTokenExpressionIterator.AttributedQName;
+import org.apache.camel.language.xtokenizer.XMLTokenExpressionIterator.AttributedQName;
import org.junit.Assert;
import org.junit.Test;

diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorCharsetTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorCharsetTest.java
similarity index 98%
rename from core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorCharsetTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorCharsetTest.java
index 3ba6a1f..91807b9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorCharsetTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorCharsetTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;

import java.io.ByteArrayInputStream;
import java.io.Closeable;
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorGroupingTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorGroupingTest.java
similarity index 98%
rename from core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorGroupingTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorGroupingTest.java
index c123086..8c2c67d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorGroupingTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorGroupingTest.java
@@ -14,10 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
+
import java.io.ByteArrayInputStream;
import java.io.Closeable;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -416,16 +418,16 @@ public class XMLTokenExpressionIteratorGroupingTest extends Assert {
        xtei.setNamespaces(nsmap);
        xtei.setGroup(group);

-        Iterator<?> it = xtei.createIterator(in, "utf-8");
+        Iterator<?> it = xtei.createIterator(new InputStreamReader(in, "utf-8"));
        List<String> results = new ArrayList<>();
        while (it.hasNext()) {
            results.add((String)it.next());
        }
        ((Closeable)it).close();

-        assertEquals("token count", expected.length, results.size());
+        Assert.assertEquals("token count", expected.length, results.size());
        for (int i = 0; i < expected.length; i++) {
-            assertEquals("mismatch [" + i + "]", expected[i], results.get(i));
+            Assert.assertEquals("mismatch [" + i + "]", expected[i], results.get(i));
        }
    }
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorInvalidXMLTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorInvalidXMLTest.java
similarity index 98%
rename from core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorInvalidXMLTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorInvalidXMLTest.java
index 6f1c9dc..92834d9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorInvalidXMLTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorInvalidXMLTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;

import java.io.Closeable;
import java.io.IOException;
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
similarity index 87%
rename from core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
index f949859..afab658 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
@@ -14,7 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
+
import java.io.ByteArrayInputStream;
import java.io.Closeable;
import java.io.InputStream;
@@ -28,8 +29,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

-import static org.apache.camel.TestSupport.getJavaMajorVersion;
-
/**
  *
  */
@@ -118,13 +117,6 @@ public class XMLTokenExpressionIteratorTest extends Assert {
    };

    private static final String[] RESULTS_CHILD_MIXED = {
-        "<child some_attr='a' anotherAttr='a' xmlns=\"urn:c\" xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"></child>",
-        "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'/>",
-        "<child some_attr='c' anotherAttr='c' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'></child>",
-        "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"/>"
-    };
-    
-    private static final String[] RESULTS_CHILD_MIXED_JAVA8 = {
        "<child some_attr='a' anotherAttr='a' xmlns=\"urn:c\" xmlns:c=\"urn:c\" xmlns:g=\"urn:g\"></child>",
        "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:c='urn:c' xmlns:g='urn:g'/>",
        "<child some_attr='c' anotherAttr='c' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'></child>",
@@ -147,15 +139,6 @@ public class XMLTokenExpressionIteratorTest extends Assert {
    };

    private static final String[] RESULTS_CHILD = {
-        "<c:child some_attr='a' anotherAttr='a' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"></c:child>",
-        "<c:child some_attr='b' anotherAttr='b' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"/>",
-        "<c:child some_attr='c' anotherAttr='c' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"></c:child>",
-        "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"/>",
-        "<c:child some_attr='e' anotherAttr='e' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"></c:child>",
-        "<c:child some_attr='f' anotherAttr='f' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"/>"
-    };
-    
-    private static final String[] RESULTS_CHILD_JAVA8 = {
        "<c:child some_attr='a' anotherAttr='a' xmlns:c=\"urn:c\" xmlns:d=\"urn:d\" xmlns:g=\"urn:g\"></c:child>",
        "<c:child some_attr='b' anotherAttr='b' xmlns:c=\"urn:c\" xmlns:d=\"urn:d\" xmlns:g=\"urn:g\"/>",
        "<c:child some_attr='c' anotherAttr='c' xmlns:c=\"urn:c\" xmlns:d=\"urn:d\" xmlns:g=\"urn:g\"></c:child>",
@@ -165,11 +148,6 @@ public class XMLTokenExpressionIteratorTest extends Assert {
    };

    private static final String[] RESULTS_CHILD_NO_NS_MIXED = {
-        "<child some_attr='a' anotherAttr='a' xmlns='' xmlns:g='urn:g' xmlns:c='urn:c'></child>",
-        "<child some_attr='c' anotherAttr='c' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"></child>",
-    };
-    
-    private static final String[] RESULTS_CHILD_NO_NS_MIXED_JAVA8 = {
        "<child some_attr='a' anotherAttr='a' xmlns='' xmlns:c='urn:c' xmlns:g='urn:g'></child>",
        "<child some_attr='c' anotherAttr='c' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"></child>",
    };
@@ -185,11 +163,6 @@ public class XMLTokenExpressionIteratorTest extends Assert {
    };

    private static final String[] RESULTS_CHILD_NS_MIXED = {
-        "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'/>",
-        "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"/>"
-    };
-    
-    private static final String[] RESULTS_CHILD_NS_MIXED_JAVA8 = {
        "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:c='urn:c' xmlns:g='urn:g'/>",
        "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"/>"
    };
@@ -287,10 +260,7 @@ public class XMLTokenExpressionIteratorTest extends Assert {

    @Test
    public void testExtractChildInjected() throws Exception {
-        String[] result = RESULTS_CHILD_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD;
-        }
+        String[] result = RESULTS_CHILD;
        invokeAndVerify("//C:child", 'i', new ByteArrayInputStream(TEST_BODY), result);
    }

@@ -301,10 +271,7 @@ public class XMLTokenExpressionIteratorTest extends Assert {

    @Test
    public void testExtractChildNSMixedInjected() throws Exception {
-        String[] result = RESULTS_CHILD_MIXED_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD_MIXED;
-        }
+        String[] result = RESULTS_CHILD_MIXED;
        invokeAndVerify("//*:child", 'i', new ByteArrayInputStream(TEST_BODY_NS_MIXED), result);
    }

@@ -315,10 +282,7 @@ public class XMLTokenExpressionIteratorTest extends Assert {

    @Test
    public void testExtractCxxxd() throws Exception {
-        String[] result = RESULTS_CHILD_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD;
-        }
+        String[] result = RESULTS_CHILD;
        invokeAndVerify("//C:c*d", 'i', new ByteArrayInputStream(TEST_BODY), result);
    }

@@ -334,10 +298,7 @@ public class XMLTokenExpressionIteratorTest extends Assert {

    @Test
    public void testExtractSomeUnqualifiedChildInjected() throws Exception {
-        String[] result = RESULTS_CHILD_NO_NS_MIXED_JAVA8;
-        if (isJava7OrLower())  {
-            result = RESULTS_CHILD_NO_NS_MIXED;
-        }
+        String[] result = RESULTS_CHILD_NO_NS_MIXED;
        invokeAndVerify("//child", 'i', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), result);
    }

@@ -350,20 +311,14 @@ public class XMLTokenExpressionIteratorTest extends Assert {
    @Test
    public void testExtractSomeQualifiedChildInjected() throws Exception {
        nsmap.put("", "urn:c");
-        String[] result = RESULTS_CHILD_NS_MIXED_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD_NS_MIXED;
-        }
+        String[] result = RESULTS_CHILD_NS_MIXED;
        invokeAndVerify("//child", 'i', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), result);
    }

    @Test
    public void testExtractWithNullNamespaceMap() throws Exception {
        nsmap = null;
-        String[] result = RESULTS_CHILD_NO_NS_MIXED_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD_NO_NS_MIXED;
-        }
+        String[] result = RESULTS_CHILD_NO_NS_MIXED;
        invokeAndVerify("//child", 'i', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), result);
    }

@@ -468,7 +423,4 @@ public class XMLTokenExpressionIteratorTest extends Assert {
        }
    }

-    private boolean isJava7OrLower() {
-        return getJavaMajorVersion() <= 7;
-    }
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/util/XmlLineNumberParserTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/util/xml/XmlLineNumberParserTest.java
similarity index 99%
rename from core/camel-core/src/test/java/org/apache/camel/util/XmlLineNumberParserTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/util/xml/XmlLineNumberParserTest.java
index 387e00b..47ba43d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/XmlLineNumberParserTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/util/xml/XmlLineNumberParserTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.util;
+package org.apache.camel.util.xml;

import java.io.InputStream;
import java.nio.file.Files;
diff --git a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index 37e1577..22fa65e 100644
--- a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -53,7 +53,7 @@ import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.RestsDefinition;
import org.apache.camel.spi.ManagementStrategy;
-import org.apache.camel.util.XmlLineNumberParser;
+import org.apache.camel.util.xml.XmlLineNumberParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

diff --git a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
index 6962165..34f4f4d 100644
--- a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
+++ b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
@@ -29,7 +29,7 @@ import org.junit.Test;

public class ManagedNonManagedServiceTest extends ManagementTestSupport {

-    private static final int SERVICES = 11;
+    private static final int SERVICES = 10;

    @Test
    public void testService() throws Exception {
diff --git a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
index 6c7cd92..411749e 100644
--- a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
+++ b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
@@ -28,7 +28,7 @@ import org.junit.Test;

public class ManagedProducerRouteAddRemoveRegisterAlwaysTest extends ManagementTestSupport {

-    private int services = 11;
+    private int services = 10;

    @Override
    protected CamelContext createCamelContext() throws Exception {
diff --git a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
index fff6e2d..702ff39 100644
--- a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
+++ b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
  */
public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
    
-    private static final int SERVICES = 11;
+    private static final int SERVICES = 10;

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
index 1f841ae..b76ad9f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
@@ -168,7 +168,7 @@ public class ExpressionBuilder {
        return new ExpressionAdapter() {
            public Object evaluate(Exchange exchange) {
                String name = simpleExpression(headerName).evaluate(exchange, String.class);
-                Object header = exchange.getIn().getHeader(name, type);
+                T header = exchange.getIn().getHeader(name, type);
                if (header == null) {
                    // fall back on a property
                    header = exchange.getProperty(name, type);
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/Namespaces.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/Namespaces.java
similarity index 70%
rename from core/camel-support/src/main/java/org/apache/camel/support/builder/xml/Namespaces.java
rename to core/camel-support/src/main/java/org/apache/camel/support/builder/Namespaces.java
index d924daa..f0d9ae5 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/Namespaces.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/Namespaces.java
@@ -14,16 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.support.builder.xml;
+package org.apache.camel.support.builder;

import java.util.HashMap;
import java.util.Map;

-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
import org.apache.camel.spi.NamespaceAware;
import org.apache.camel.util.ObjectHelper;

@@ -42,12 +37,9 @@ public class Namespaces {
    private Map<String, String> namespaces = new HashMap<>();

    /**
-    * Creates a namespaces object from the given XML element
-    *
-    * @param element the XML element representing the XPath namespace context
+    * Creates an empty namespaces object
      */
-    public Namespaces(Element element) {
-        add(element);
+    public Namespaces() {
    }

    /**
@@ -70,26 +62,6 @@ public class Namespaces {
        return this;
    }

-    public Namespaces add(Element element) {
-        // let's set the parent first in case we overload a prefix here
-        Node parentNode = element.getParentNode();
-        if (parentNode instanceof org.w3c.dom.Element) {
-            add((Element) parentNode);
-        }
-        NamedNodeMap attributes = element.getAttributes();
-        int size = attributes.getLength();
-        for (int i = 0; i < size; i++) {
-            Attr node = (Attr) attributes.item(i);
-            String name = node.getName();
-            if (name.startsWith("xmlns:")) {
-                String prefix = name.substring("xmlns:".length());
-                String uri = node.getValue();
-                add(prefix, uri);
-            }
-        }
-        return this;
-    }
-
    public Map<String, String> getNamespaces() {
        return namespaces;
    }
diff --git a/core/pom.xml b/core/pom.xml
index 539c51c..08b85a7 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -43,6 +43,7 @@
        <module>camel-management-api</module>
        <module>camel-management-impl</module>
        <module>camel-base</module>
+        <module>camel-jaxp</module>
        <module>camel-core</module>
        <module>camel-core-osgi</module>
        <module>camel-core-xml</module>
diff --git a/parent/pom.xml b/parent/pom.xml
index ad20a2f..19d62a9 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -809,6 +809,11 @@
            </dependency>
            <dependency>
                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-jaxp</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel</groupId>
                <artifactId>camel-support</artifactId>
                <version>${project.version}</version>
            </dependency>
@@ -3041,6 +3046,11 @@
      </dependency>
      <dependency>
        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jbpm-starter</artifactId>
        <version>${project.version}</version>
      </dependency>
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageAutoConfiguration.java
deleted file mode 100644
index 8936f9f..0000000
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageAutoConfiguration.java
+++ /dev/null
@@ -1,117 +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.language.xpath.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.CamelContextAware;
-import org.apache.camel.language.xpath.XPathLanguage;
-import org.apache.camel.spi.HasId;
-import org.apache.camel.spi.LanguageCustomizer;
-import org.apache.camel.spring.boot.CamelAutoConfiguration;
-import org.apache.camel.spring.boot.LanguageConfigurationProperties;
-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.beans.factory.config.ConfigurableBeanFactory;
-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.Scope;
-
-/**
- * Generated by camel-package-maven-plugin - do not edit this file!
- */
-@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-@Configuration
-@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
-        XPathLanguageAutoConfiguration.GroupConditions.class})
-@AutoConfigureAfter(CamelAutoConfiguration.class)
-@EnableConfigurationProperties({LanguageConfigurationProperties.class,
-        XPathLanguageConfiguration.class})
-public class XPathLanguageAutoConfiguration {
-
-    private static final Logger LOGGER = LoggerFactory
-            .getLogger(XPathLanguageAutoConfiguration.class);
-    @Autowired
-    private ApplicationContext applicationContext;
-    @Autowired
-    private CamelContext camelContext;
-    @Autowired
-    private XPathLanguageConfiguration configuration;
-    @Autowired(required = false)
-    private List<LanguageCustomizer<XPathLanguage>> customizers;
-
-    static class GroupConditions extends GroupCondition {
-        public GroupConditions() {
-            super("camel.component", "camel.component.xpath");
-        }
-    }
-
-    @Bean(name = "xpath-language")
-    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-    @ConditionalOnMissingBean(XPathLanguage.class)
-    public XPathLanguage configureXPathLanguage() throws Exception {
-        XPathLanguage language = new XPathLanguage();
-        if (CamelContextAware.class.isAssignableFrom(XPathLanguage.class)) {
-            CamelContextAware contextAware = CamelContextAware.class
-                    .cast(language);
-            if (contextAware != null) {
-                contextAware.setCamelContext(camelContext);
-            }
-        }
-        Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
-        CamelPropertiesHelper.setCamelProperties(camelContext, language,
-                parameters, false);
-        if (ObjectHelper.isNotEmpty(customizers)) {
-            for (LanguageCustomizer<XPathLanguage> customizer : customizers) {
-                boolean useCustomizer = (customizer instanceof HasId)
-                        ? HierarchicalPropertiesEvaluator.evaluate(
-                                applicationContext.getEnvironment(),
-                                "camel.language.customizer",
-                                "camel.language.xpath.customizer",
-                                ((HasId) customizer).getId())
-                        : HierarchicalPropertiesEvaluator.evaluate(
-                                applicationContext.getEnvironment(),
-                                "camel.language.customizer",
-                                "camel.language.xpath.customizer");
-                if (useCustomizer) {
-                    LOGGER.debug("Configure language {}, with customizer {}",
-                            language, customizer);
-                    customizer.customize(language);
-                }
-            }
-        }
-        return language;
-    }
-}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageConfiguration.java
deleted file mode 100644
index 3e839da..0000000
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageConfiguration.java
+++ /dev/null
@@ -1,132 +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.language.xpath.springboot;
-
-import javax.annotation.Generated;
-import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * To use XPath (XML) in Camel expressions or predicates.
- * 
- * Generated by camel-package-maven-plugin - do not edit this file!
- */
-@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-@ConfigurationProperties(prefix = "camel.language.xpath")
-public class XPathLanguageConfiguration
-        extends
-            LanguageConfigurationPropertiesCommon {
-
-    /**
-    * Whether to enable auto configuration of the xpath language. This is
-    * enabled by default.
-    */
-    private Boolean enabled;
-    /**
-    * Name of class for document type The default value is org.w3c.dom.Document
-    */
-    private String documentType;
-    /**
-    * Whether to use Saxon.
-    */
-    private Boolean saxon = false;
-    /**
-    * References to a custom XPathFactory to lookup in the registry
-    */
-    private String factoryRef;
-    /**
-    * The XPath object model to use
-    */
-    private String objectModel;
-    /**
-    * Whether to log namespaces which can assist during trouble shooting
-    */
-    private Boolean logNamespaces = false;
-    /**
-    * Whether to enable thread-safety for the returned result of the xpath
-    * expression. This applies to when using NODESET as the result type, and
-    * the returned set has multiple elements. In this situation there can be
-    * thread-safety issues if you process the NODESET concurrently such as from
-    * a Camel Splitter EIP in parallel processing mode. This option prevents
-    * concurrency issues by doing defensive copies of the nodes. It is
-    * recommended to turn this option on if you are using camel-saxon or Saxon
-    * in your application. Saxon has thread-safety issues which can be
-    * prevented by turning this option on.
-    */
-    private Boolean threadSafety = false;
-    /**
-    * Whether to trim the value to remove leading and trailing whitespaces and
-    * line breaks
-    */
-    private Boolean trim = true;
-
-    public String getDocumentType() {
-        return documentType;
-    }
-
-    public void setDocumentType(String documentType) {
-        this.documentType = documentType;
-    }
-
-    public Boolean getSaxon() {
-        return saxon;
-    }
-
-    public void setSaxon(Boolean saxon) {
-        this.saxon = saxon;
-    }
-
-    public String getFactoryRef() {
-        return factoryRef;
-    }
-
-    public void setFactoryRef(String factoryRef) {
-        this.factoryRef = factoryRef;
-    }
-
-    public String getObjectModel() {
-        return objectModel;
-    }
-
-    public void setObjectModel(String objectModel) {
-        this.objectModel = objectModel;
-    }
-
-    public Boolean getLogNamespaces() {
-        return logNamespaces;
-    }
-
-    public void setLogNamespaces(Boolean logNamespaces) {
-        this.logNamespaces = logNamespaces;
-    }
-
-    public Boolean getThreadSafety() {
-        return threadSafety;
-    }
-
-    public void setThreadSafety(Boolean threadSafety) {
-        this.threadSafety = threadSafety;
-    }
-
-    public Boolean getTrim() {
-        return trim;
-    }
-
-    public void setTrim(Boolean trim) {
-        this.trim = trim;
-    }
-}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
index e39e0fb..c1c2bbc 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
@@ -22,6 +22,4 @@ org.apache.camel.language.ref.springboot.RefLanguageAutoConfiguration,\
org.apache.camel.language.simple.springboot.FileLanguageAutoConfiguration,\
org.apache.camel.language.simple.springboot.SimpleLanguageAutoConfiguration,\
org.apache.camel.language.tokenizer.springboot.TokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.XMLTokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.xpath.springboot.XPathLanguageAutoConfiguration,\
org.apache.camel.model.rest.springboot.RestConfigurationDefinitionAutoConfiguration
diff --git a/platforms/spring-boot/components-starter/camel-jaxp-starter/pom.xml b/platforms/spring-boot/components-starter/camel-jaxp-starter/pom.xml
new file mode 100644
index 0000000..6f3ba78
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components-starter</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>camel-jaxp-starter</artifactId>
+  <packaging>jar</packaging>
+  <name>Spring-Boot Starter :: Camel :: JAXP</name>
+  <description>Spring-Boot Starter for Camel JAXP Support</description>
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-jaxp</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <!--START OF GENERATED CODE-->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring-boot-starter</artifactId>
+    </dependency>
+    <!--END OF GENERATED CODE-->
+  </dependencies>
+</project>
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
similarity index 97%
rename from platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
rename to platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
index de429d0..86fd4c9 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.language.tokenizer.springboot;
+package org.apache.camel.language.xtokenizer.springboot;

import java.util.HashMap;
import java.util.List;
@@ -22,7 +22,7 @@ import java.util.Map;
import javax.annotation.Generated;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
-import org.apache.camel.language.tokenizer.XMLTokenizeLanguage;
+import org.apache.camel.language.xtokenizer.XMLTokenizeLanguage;
import org.apache.camel.spi.HasId;
import org.apache.camel.spi.LanguageCustomizer;
import org.apache.camel.spring.boot.CamelAutoConfiguration;
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageConfiguration.java
similarity index 97%
rename from platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageConfiguration.java
rename to platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageConfiguration.java
index 6910019..c3a5d95 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageConfiguration.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.language.tokenizer.springboot;
+package org.apache.camel.language.xtokenizer.springboot;

import javax.annotation.Generated;
import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
diff --git a/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/LICENSE.txt b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-jaxp-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-jaxp-starter/src/main/resources/META-INF/NOTICE.txt b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-jaxp-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-jaxp-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
new file mode 100644
index 0000000..71d8f2c
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -0,0 +1,10 @@
+{
+  "properties": [
+    {
+      "defaultValue": true,
+      "name": "camel.language.xtokenize.enabled",
+      "description": "Enable xtokenize language",
+      "type": "java.lang.Boolean"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.factories
similarity index 55%
copy from platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
copy to platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.factories
index e39e0fb..0d76db2 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.factories
@@ -14,14 +14,6 @@
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
+
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.camel.language.constant.springboot.ConstantLanguageAutoConfiguration,\
-org.apache.camel.language.header.springboot.HeaderLanguageAutoConfiguration,\
-org.apache.camel.language.property.springboot.ExchangePropertyLanguageAutoConfiguration,\
-org.apache.camel.language.ref.springboot.RefLanguageAutoConfiguration,\
-org.apache.camel.language.simple.springboot.FileLanguageAutoConfiguration,\
-org.apache.camel.language.simple.springboot.SimpleLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.TokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.XMLTokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.xpath.springboot.XPathLanguageAutoConfiguration,\
-org.apache.camel.model.rest.springboot.RestConfigurationDefinitionAutoConfiguration
+org.apache.camel.language.xtokenizer.springboot.XMLTokenizeLanguageAutoConfiguration
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.provides
similarity index 52%
copy from platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
copy to platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.provides
index e39e0fb..91141f6 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.provides
@@ -14,14 +14,4 @@
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.camel.language.constant.springboot.ConstantLanguageAutoConfiguration,\
-org.apache.camel.language.header.springboot.HeaderLanguageAutoConfiguration,\
-org.apache.camel.language.property.springboot.ExchangePropertyLanguageAutoConfiguration,\
-org.apache.camel.language.ref.springboot.RefLanguageAutoConfiguration,\
-org.apache.camel.language.simple.springboot.FileLanguageAutoConfiguration,\
-org.apache.camel.language.simple.springboot.SimpleLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.TokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.XMLTokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.xpath.springboot.XPathLanguageAutoConfiguration,\
-org.apache.camel.model.rest.springboot.RestConfigurationDefinitionAutoConfiguration
+provides: camel-jaxp
diff --git a/platforms/spring-boot/components-starter/pom.xml b/platforms/spring-boot/components-starter/pom.xml
index 7d94c5c..a44630a 100644
--- a/platforms/spring-boot/components-starter/pom.xml
+++ b/platforms/spring-boot/components-starter/pom.xml
@@ -227,6 +227,7 @@
    <module>camel-jacksonxml-starter</module>
    <module>camel-jasypt-starter</module>
    <module>camel-jaxb-starter</module>
+    <module>camel-jaxp-starter</module>
    <module>camel-jbpm-starter</module>
    <module>camel-jcache-starter</module>
    <module>camel-jclouds-starter</module>
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index 06ef5da..b9107c7 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -1604,6 +1604,16 @@
      </dependency>
      <dependency>
        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jbpm</artifactId>
        <version>${project.version}</version>
      </dependency>
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RssToHttpIssueTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RssToHttpIssueTest.java
index abc88d5..5cabccf 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RssToHttpIssueTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RssToHttpIssueTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.itest.issues;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
index 0338693..c53b7e0 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
@@ -52,7 +52,8 @@ public class TypeConverterProcessor extends AbstractCamelAnnotationProcessor {
            }
        }
        if (!converterClasses.isEmpty()
-                && !converterClasses.containsKey("org.apache.camel.converter.IOConverter")) {
+                && !converterClasses.containsKey("org.apache.camel.converter.IOConverter")
+                && !converterClasses.containsKey("org.apache.camel.converter.jaxp.DomConverter")) {
            Filer filer = processingEnv.getFiler();
            FileObject resource = filer.createResource(StandardLocation.CLASS_OUTPUT,
                    "", "META-INF/services/org/apache/camel/TypeConverter",
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
index 1434b80..c4cd7b3 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
@@ -146,6 +146,9 @@ public class PackageLanguageMojo extends AbstractGeneratorMojo {
                        } else if ("bean".equals(name)) {
                            // special for camel-bean as we need to build this before camel-core so we load the schema from a static file
                            is = new FileInputStream(new File(buildDir, "../src/main/schema/method.json"));
+                        } else if ("xtokenize".equals(name)) {
+                            // special for camel-jaxp as we need to build this before camel-core so we load the schema from a static file
+                            is = new FileInputStream(new File(buildDir, "../src/main/schema/xtokenize.json"));
                        } else {
                            is = new FileInputStream(new File(core, "target/classes/org/apache/camel/model/language/" + modelName + ".json"));
                        }
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
index b001827..2a5b36b 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
@@ -525,6 +525,10 @@ public class SpringBootStarterMojo extends AbstractMojo {
            return true;
        }

+        if (baseDir.getName().equals("camel-jaxp")) {
+            return true;
+        }
+
        getLog().debug("Component directory mismatch");
        return false;
    }


[camel] 03/03: [CAMEL-13371] Make xml and jaxb more optional in camel-base / camel-core

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 722a99a8a9ed584dfef8973dd2c15464ba8b04e1
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu May 16 22:32:19 2019 +0200

    [CAMEL-13371] Make xml and jaxb more optional in camel-base / camel-core
---
 apache-camel/pom.xml                               |   5 +
 apache-camel/src/main/descriptors/common-bin.xml   |   1 +
 bom/camel-bom/pom.xml                              |  10 +
 .../blueprint/handler/CamelNamespaceHandler.java   |   5 +-
 .../component/cxf/util/SplitterWithXqureyTest.java |   2 +-
 .../camel-jaxp/src/main/schema/xtokenize.json      |  22 +++
 ...XQueryHeaderNameResultTypeAndNamespaceTest.java |   2 +-
 .../saxon/XQueryWithNamespacesFilterTest.java      |   2 +-
 .../spring/handler/CamelNamespaceHandler.java      |   5 +-
 .../spring/LifecycleStrategyInjectionTest.java     |   2 +-
 .../MultipleLifecycleStrategyInjectionTest.java    |   2 +-
 .../apache/camel/swagger/RestSwaggerSupport.java   |   2 +-
 components/camel-validator/pom.xml                 |   4 +
 components/camel-xpath/pom.xml                     |   5 +-
 .../language/xpath/MessageVariableResolver.java    |  10 +-
 .../apache/camel/language/xpath/XPathBuilder.java  |  12 +-
 components/camel-xslt/pom.xml                      |   4 +
 components/readme.adoc                             |   4 +-
 .../camel/impl/engine/AbstractCamelContext.java    |  29 ++-
 .../apache/camel/impl/engine/BaseRouteService.java |  52 ++----
 .../impl/engine}/DefaultTransformerRegistry.java   |  23 +--
 .../impl/engine}/DefaultValidatorRegistry.java     |  22 +--
 .../impl/engine/RestRegistryFactoryResolver.java   |   3 +-
 core/camel-core/pom.xml                            |  30 ++-
 core/camel-core/readme.adoc                        |   4 +-
 .../org/apache/camel/builder/BuilderSupport.java   |   2 +-
 .../apache/camel/builder/ExpressionBuilder.java    |  51 +++++-
 .../org/apache/camel/builder/ExpressionClause.java |   2 +-
 .../camel/builder/ExpressionClauseSupport.java     |   2 +-
 .../org/apache/camel/builder/ValueBuilder.java     |   6 +-
 .../camel/impl/AbstractModelCamelContext.java      |  32 +++-
 .../org/apache/camel/impl/DefaultCamelContext.java |   5 +-
 .../java/org/apache/camel/impl/DefaultModel.java   |   4 +-
 .../apache/camel/impl/ReloadStrategySupport.java   |   2 +-
 .../java/org/apache/camel/impl/RouteService.java   |   8 +-
 .../java/org/apache/camel/model/ModelHelper.java   |   2 +-
 .../model/language/XMLTokenizerExpression.java     |   3 +-
 .../org/apache/camel/reifier/RouteReifier.java     |   6 +-
 .../builder/xml/DefaultNamespaceContextTest.java   |   2 +-
 .../builder/xml/ExtractXPathWithNamespaceTest.java |   2 +-
 .../XPathHeaderNameResultTypeAndNamespaceTest.java |   2 +-
 .../builder/xml/XPathNamespaceResultTypeTest.java  |   2 +-
 .../camel/builder/xml/XPathNamespaceTest.java      |   2 +-
 .../builder/xml/XPathNestedNamespaceTest.java      |   2 +-
 .../org/apache/camel/builder/xml/XPathTest.java    |   2 +-
 .../xml/XPathWithNamespacesFromDomTest.java        |   5 +-
 .../camel/impl/MultipleLifecycleStrategyTest.java  |   2 +-
 .../apache/camel/language/XMLTokenSplitTest.java   |   2 +-
 .../tokenizer/XMLTokenizeLanguageGroupingTest.java |   2 +-
 .../XMLTokenizeLanguageStreamingFileTest.java      |   2 +-
 .../XMLTokenizeLanguageStreamingTest.java          |   2 +-
 .../tokenizer/XMLTokenizeLanguageTest.java         |   2 +-
 .../XMLTokenizeWrapLanguageGroupingTest.java       |   2 +-
 .../tokenizer/XMLTokenizeWrapLanguageTest.java     |   2 +-
 .../processor/SplitGroupMultiXmlTokenTest.java     |   2 +-
 .../SplitGroupWrappedMultiXmlTokenTest.java        |   2 +-
 .../camel/processor/SplitterWithXqureyTest.java    |   2 +-
 ...ithNamespaceBuilderFilterAndResultTypeTest.java |   2 +-
 .../XPathWithNamespaceBuilderFilterTest.java       |   2 +-
 .../processor/XPathWithNamespacesFilterTest.java   |   2 +-
 .../camel/util/DumpModelAsXmlNamespaceTest.java    |   2 +-
 core/camel-jaxp/pom.xml                            | 167 +++++++++++++++++
 .../src/main/docs/xtokenize-language.adoc          |   0
 .../apache/camel/converter/jaxp/DomConverter.java  |   0
 .../apache/camel/converter/jaxp/StaxConverter.java |   0
 .../converter/jaxp/StreamSourceConverter.java      |   0
 .../apache/camel/converter/jaxp/XMLReaderPool.java |   0
 .../converter/jaxp/XMLStreamReaderInputStream.java |   0
 .../converter/jaxp/XMLStreamReaderReader.java      |   0
 .../apache/camel/converter/jaxp/XmlConverter.java  |   0
 .../camel/converter/jaxp/XmlErrorListener.java     |   0
 .../org/apache/camel/converter/jaxp/package.html   |   0
 .../language/xtokenizer}/RecordableReader.java     |   2 +-
 .../xtokenizer}/XMLTokenExpressionIterator.java    |  59 +++---
 .../language/xtokenizer}/XMLTokenizeLanguage.java  |  59 +++---
 .../apache/camel/language/xtokenizer}/package.html |   2 +-
 .../support/builder/xml/NamespacesHelper.java      |  37 ++++
 .../camel/support/builder/xml/StAX2SAXSource.java  |   4 +-
 .../support/builder/xml/XMLConverterHelper.java    |   0
 .../validation/DefaultValidationErrorHandler.java  |   0
 .../validation/NoXmlBodyValidationException.java   |   0
 .../validation/NoXmlHeaderValidationException.java |   0
 .../validation/PredicateValidatingProcessor.java   |   0
 .../validation/PredicateValidationException.java   |   0
 .../support/processor/validation/SchemaReader.java |   0
 .../validation/SchemaValidationException.java      |   0
 .../processor/validation/ValidatingProcessor.java  |   0
 .../validation/ValidatorErrorHandler.java          |   0
 .../support/processor/validation/package.html      |   0
 .../camel/util/xml}/XmlLineNumberParser.java       |   4 +-
 core/camel-jaxp/src/main/schema/xtokenize.json     |  22 +++
 .../language/xtokenizer}/AttributedQNameTest.java  |   4 +-
 .../XMLTokenExpressionIteratorCharsetTest.java     |   2 +-
 .../XMLTokenExpressionIteratorGroupingTest.java    |  10 +-
 .../XMLTokenExpressionIteratorInvalidXMLTest.java  |   2 +-
 .../XMLTokenExpressionIteratorTest.java            |  64 +------
 .../camel/util/xml}/XmlLineNumberParserTest.java   |   2 +-
 .../management/mbean/ManagedCamelContext.java      |   2 +-
 .../management/ManagedNonManagedServiceTest.java   |   2 +-
 ...edProducerRouteAddRemoveRegisterAlwaysTest.java |   2 +-
 .../management/ManagedRouteAddRemoveTest.java      |   2 +-
 .../camel/support/builder/ExpressionBuilder.java   |   2 +-
 .../support/builder/{xml => }/Namespaces.java      |  34 +---
 core/pom.xml                                       |   1 +
 parent/pom.xml                                     |  10 +
 .../springboot/XPathLanguageAutoConfiguration.java | 117 ------------
 .../springboot/XPathLanguageConfiguration.java     | 132 --------------
 .../src/main/resources/META-INF/spring.factories   |   2 -
 .../components-starter/camel-jaxp-starter/pom.xml  |  53 ++++++
 .../XMLTokenizeLanguageAutoConfiguration.java      |   4 +-
 .../XMLTokenizeLanguageConfiguration.java          |   2 +-
 .../src/main/resources/META-INF/LICENSE.txt        | 203 +++++++++++++++++++++
 .../src/main/resources/META-INF/NOTICE.txt         |  11 ++
 .../additional-spring-configuration-metadata.json  |  10 +
 .../src/main/resources/META-INF/spring.factories   |  12 +-
 .../src/main/resources/META-INF/spring.provides}   |  12 +-
 platforms/spring-boot/components-starter/pom.xml   |   1 +
 .../camel-spring-boot-dependencies/pom.xml         |  10 +
 .../camel/itest/issues/RssToHttpIssueTest.java     |   2 +-
 .../camel/tools/apt/TypeConverterProcessor.java    |   3 +-
 .../camel/maven/packaging/PackageLanguageMojo.java |   3 +
 .../maven/packaging/SpringBootStarterMojo.java     |   4 +
 122 files changed, 909 insertions(+), 603 deletions(-)

diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index 3775f12..c1ec489 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -2237,6 +2237,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-jaxp-starter</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-jbpm-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 2df413f..9e43763 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -507,6 +507,7 @@
         <include>org.apache.camel:camel-jacksonxml-starter</include>
         <include>org.apache.camel:camel-jasypt-starter</include>
         <include>org.apache.camel:camel-jaxb-starter</include>
+        <include>org.apache.camel:camel-jaxp-starter</include>
         <include>org.apache.camel:camel-jbpm-starter</include>
         <include>org.apache.camel:camel-jcache-starter</include>
         <include>org.apache.camel:camel-jclouds-starter</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 7b2d678..0eaf5ef 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -1389,6 +1389,16 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-jbpm</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
index cbd683d..0aa371d 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
@@ -94,7 +94,8 @@ import org.apache.camel.spi.LanguageResolver;
 import org.apache.camel.spi.NamespaceAware;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.support.ObjectHelper;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
+import org.apache.camel.support.builder.xml.NamespacesHelper;
 import org.apache.camel.support.jsse.KeyStoreParameters;
 import org.apache.camel.support.jsse.SSLContextParameters;
 import org.apache.camel.support.jsse.SecureRandomParameters;
@@ -342,7 +343,7 @@ public class CamelNamespaceHandler implements NamespaceHandler {
                 if (object instanceof NamespaceAware) {
                     NamespaceAware namespaceAware = (NamespaceAware) object;
                     if (namespaces == null) {
-                        namespaces = new Namespaces(element);
+                        namespaces = NamespacesHelper.namespaces(element);
                     }
                     namespaces.configure(namespaceAware);
                 }
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/SplitterWithXqureyTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/SplitterWithXqureyTest.java
index b728172..816539b 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/SplitterWithXqureyTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/SplitterWithXqureyTest.java
@@ -22,7 +22,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-jaxp/src/main/schema/xtokenize.json b/components/camel-jaxp/src/main/schema/xtokenize.json
new file mode 100644
index 0000000..52bf377
--- /dev/null
+++ b/components/camel-jaxp/src/main/schema/xtokenize.json
@@ -0,0 +1,22 @@
+{
+ "model": {
+    "kind": "model",
+    "name": "xtokenize",
+    "title": "XML Tokenize",
+    "description": "To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.",
+    "firstVersion": "2.14.0",
+    "javaType": "org.apache.camel.model.language.XMLTokenizerExpression",
+    "label": "language,core,xml",
+    "deprecated": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "headerName": { "kind": "attribute", "displayName": "Header Name", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Name of header to tokenize instead of using the message body." },
+    "mode": { "kind": "attribute", "displayName": "Mode", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element" },
+    "group": { "kind": "attribute", "displayName": "Group", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "secret": false, "description": "To group N parts together" },
+    "trim": { "kind": "attribute", "displayName": "Trim", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Sets the id of this node" }
+  }
+}
+
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java
index 936a773..75655c6 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.builder.saxon;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java
index c95528c..8055da1 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder.saxon;
 import org.apache.camel.Endpoint;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java b/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
index 76f6660..cc76290 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
@@ -51,7 +51,8 @@ import org.apache.camel.spring.CamelThreadPoolFactoryBean;
 import org.apache.camel.spring.SpringModelJAXBContextFactory;
 import org.apache.camel.spring.remoting.CamelProxyFactoryBean;
 import org.apache.camel.spring.remoting.CamelServiceExporter;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
+import org.apache.camel.support.builder.xml.NamespacesHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.spring.KeyStoreParametersFactoryBean;
@@ -483,7 +484,7 @@ public class CamelNamespaceHandler extends NamespaceHandlerSupport {
                 if (object instanceof NamespaceAware) {
                     NamespaceAware namespaceAware = (NamespaceAware) object;
                     if (namespaces == null) {
-                        namespaces = new Namespaces(element);
+                        namespaces = NamespacesHelper.namespaces(element);
                     }
                     namespaces.configure(namespaceAware);
                 }
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/LifecycleStrategyInjectionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/LifecycleStrategyInjectionTest.java
index 4bc45ea..0681551 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/LifecycleStrategyInjectionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/LifecycleStrategyInjectionTest.java
@@ -32,7 +32,7 @@ public class LifecycleStrategyInjectionTest extends SpringTestSupport {
 
     @Test
     public void testInjectedStrategy() throws Exception {
-        assertEquals(2, context.getLifecycleStrategies().size());
+        assertEquals(1, context.getLifecycleStrategies().size());
         assertIsInstanceOf(DummyLifecycleStrategy.class, context.getLifecycleStrategies().get(0));
     }
     
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/MultipleLifecycleStrategyInjectionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/MultipleLifecycleStrategyInjectionTest.java
index 5c0587e..dd17fe4 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/MultipleLifecycleStrategyInjectionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/MultipleLifecycleStrategyInjectionTest.java
@@ -32,7 +32,7 @@ public class MultipleLifecycleStrategyInjectionTest extends SpringTestSupport {
 
     @Test
     public void testInjectedStrategy() throws Exception {
-        assertEquals(3, context.getLifecycleStrategies().size());
+        assertEquals(2, context.getLifecycleStrategies().size());
         assertIsInstanceOf(DummyLifecycleStrategy.class, context.getLifecycleStrategies().get(0));
         assertIsInstanceOf(DummyLifecycleStrategy.class, context.getLifecycleStrategies().get(1));
     }
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
index 285ce02..361a492 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
@@ -57,7 +57,7 @@ import org.apache.camel.support.PatternHelper;
 import org.apache.camel.util.CamelVersionHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
-import org.apache.camel.util.XmlLineNumberParser;
+import org.apache.camel.util.xml.XmlLineNumberParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-validator/pom.xml b/components/camel-validator/pom.xml
index 82dc1e8..d995f92 100644
--- a/components/camel-validator/pom.xml
+++ b/components/camel-validator/pom.xml
@@ -39,6 +39,10 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-support</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jaxp</artifactId>
+        </dependency>
 
     </dependencies>
 </project>
diff --git a/components/camel-xpath/pom.xml b/components/camel-xpath/pom.xml
index fd54835..a708614 100644
--- a/components/camel-xpath/pom.xml
+++ b/components/camel-xpath/pom.xml
@@ -38,7 +38,10 @@
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-support</artifactId>
-            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jaxp</artifactId>
         </dependency>
 
     </dependencies>
diff --git a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/MessageVariableResolver.java b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/MessageVariableResolver.java
index 3814e00..bd2f808 100644
--- a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/MessageVariableResolver.java
+++ b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/MessageVariableResolver.java
@@ -27,11 +27,11 @@ import org.apache.camel.Message;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.support.builder.xml.Namespaces.ENVIRONMENT_VARIABLES;
-import static org.apache.camel.support.builder.xml.Namespaces.EXCHANGE_PROPERTY;
-import static org.apache.camel.support.builder.xml.Namespaces.IN_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.OUT_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.SYSTEM_PROPERTIES_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.ENVIRONMENT_VARIABLES;
+import static org.apache.camel.support.builder.Namespaces.EXCHANGE_PROPERTY;
+import static org.apache.camel.support.builder.Namespaces.IN_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.OUT_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.SYSTEM_PROPERTIES_NAMESPACE;
 
 /**
  * A variable resolver for XPath expressions which support properties on the
diff --git a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
index c930b85..8c5df66 100644
--- a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
+++ b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
@@ -61,7 +61,7 @@ import org.apache.camel.spi.NamespaceAware;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.MessageHelper;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -69,11 +69,11 @@ import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.support.builder.xml.Namespaces.DEFAULT_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.FUNCTION_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.IN_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.OUT_NAMESPACE;
-import static org.apache.camel.support.builder.xml.Namespaces.isMatchingNamespaceOrEmptyNamespace;
+import static org.apache.camel.support.builder.Namespaces.DEFAULT_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.FUNCTION_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.IN_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.OUT_NAMESPACE;
+import static org.apache.camel.support.builder.Namespaces.isMatchingNamespaceOrEmptyNamespace;
 
 /**
  * Creates an XPath expression builder which creates a nodeset result by
diff --git a/components/camel-xslt/pom.xml b/components/camel-xslt/pom.xml
index ca99199..2ef5b90 100644
--- a/components/camel-xslt/pom.xml
+++ b/components/camel-xslt/pom.xml
@@ -39,6 +39,10 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-support</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jaxp</artifactId>
+        </dependency>
 
     </dependencies>
 </project>
diff --git a/components/readme.adoc b/components/readme.adoc
index 0d68d85..cd8e5e8 100644
--- a/components/readme.adoc
+++ b/components/readme.adoc
@@ -1000,7 +1000,7 @@ Number of Data Formats: 43 in 35 JAR artifacts (0 deprecated)
 ==== Expression Languages
 
 // languages: START
-Number of Languages: 17 in 10 JAR artifacts (0 deprecated)
+Number of Languages: 16 in 10 JAR artifacts (0 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -1034,8 +1034,6 @@ Number of Languages: 17 in 10 JAR artifacts (0 deprecated)
 
 | link:../core/camel-core/src/main/docs/tokenize-language.adoc[Tokenize] (camel-core) | 2.0 | To use Camel message body or header with a tokenizer in Camel expressions or predicates.
 
-| link:../core/camel-core/src/main/docs/xtokenize-language.adoc[XML Tokenize] (camel-core) | 2.14 | To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.
-
 | link:camel-xpath/src/main/docs/xpath-language.adoc[XPath] (camel-xpath) | 1.1 | To use XPath (XML) in Camel expressions or predicates.
 
 | link:camel-saxon/src/main/docs/xquery-language.adoc[XQuery] (camel-saxon) | 1.0 | To use XQuery (XML) in Camel expressions or predicates.
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 51aa0aa..83a5c28 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -122,6 +122,7 @@ import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.ReloadStrategy;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.spi.RestRegistry;
+import org.apache.camel.spi.RestRegistryFactory;
 import org.apache.camel.spi.RouteController;
 import org.apache.camel.spi.RouteError.Phase;
 import org.apache.camel.spi.RoutePolicyFactory;
@@ -225,6 +226,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam
     private volatile DataFormatResolver dataFormatResolver;
     private volatile ManagementStrategy managementStrategy;
     private volatile ManagementMBeanAssembler managementMBeanAssembler;
+    private volatile RestRegistryFactory restRegistryFactory;
     private volatile RestRegistry restRegistry;
     private volatile HeadersMapFactory headersMapFactory;
     private volatile BeanProxyFactory beanProxyFactory;
@@ -3133,7 +3135,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam
         getPackageScanClassResolver();
         getProducerServicePool();
         getPollingConsumerServicePool();
-        getRestRegistry();
+        getRestRegistryFactory();
 
         if (isTypeConverterStatisticsEnabled() != null) {
             getTypeConverterRegistry().getStatistics().setStatisticsEnabled(isTypeConverterStatisticsEnabled());
@@ -3689,6 +3691,29 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam
         this.restRegistry = doAddService(restRegistry);
     }
 
+    protected RestRegistry createRestRegistry() {
+        RestRegistryFactory factory = getRestRegistryFactory();
+        if (factory == null) {
+            throw new IllegalStateException("No RestRegistryFactory implementation found.  You need to add camel-rest to the classpath.");
+        }
+        return factory.createRegistry();
+    }
+
+    public RestRegistryFactory getRestRegistryFactory() {
+        if (restRegistryFactory == null) {
+            synchronized (lock) {
+                if (restRegistryFactory == null) {
+                    setRestRegistryFactory(createRestRegistryFactory());
+                }
+            }
+        }
+        return restRegistryFactory;
+    }
+
+    public void setRestRegistryFactory(RestRegistryFactory restRegistryFactory) {
+        this.restRegistryFactory = doAddService(restRegistryFactory);
+    }
+
     @Override
     public String getGlobalOption(String key) {
         String value = getGlobalOptions().get(key);
@@ -3902,7 +3927,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam
 
     protected abstract LanguageResolver createLanguageResolver();
 
-    protected abstract RestRegistry createRestRegistry();
+    protected abstract RestRegistryFactory createRestRegistryFactory();
 
     protected abstract EndpointRegistry<EndpointKey> createEndpointRegistry(Map<EndpointKey, Endpoint> endpoints);
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
index bc76fe4..78bd717 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
@@ -31,7 +31,6 @@ import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointAware;
 import org.apache.camel.ErrorHandlerFactory;
-import org.apache.camel.FailedToCreateRouteException;
 import org.apache.camel.FailedToStartRouteException;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
@@ -42,7 +41,6 @@ import org.apache.camel.processor.ErrorHandler;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RoutePolicy;
-import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.ChildServiceSupport;
 import org.apache.camel.support.EventHelper;
 import org.apache.camel.support.service.ServiceHelper;
@@ -60,21 +58,19 @@ public abstract class BaseRouteService extends ChildServiceSupport {
     private final AbstractCamelContext camelContext;
     private final RouteContext routeContext;
     private final Route route;
-    private final String id;
     private boolean removingRoutes;
     private final Map<Route, Consumer> inputs = new HashMap<>();
     private final AtomicBoolean warmUpDone = new AtomicBoolean(false);
     private final AtomicBoolean endpointDone = new AtomicBoolean(false);
 
-    public BaseRouteService(AbstractCamelContext camelContext, RouteContext routeContext, Route route, String id) {
-        this.camelContext = camelContext;
-        this.routeContext = routeContext;
+    public BaseRouteService(Route route) {
         this.route = route;
-        this.id = id;
+        this.routeContext = this.route.getRouteContext();
+        this.camelContext = this.routeContext.getCamelContext().adapt(AbstractCamelContext.class);
     }
 
     public String getId() {
-        return id;
+        return route.getId();
     }
 
     public CamelContext getCamelContext() {
@@ -132,7 +128,7 @@ public abstract class BaseRouteService extends ChildServiceSupport {
         try {
             doWarmUp();
         } catch (Exception e) {
-            throw new FailedToStartRouteException(id, getRouteDescription(), e);
+            throw new FailedToStartRouteException(getId(), getRouteDescription(), e);
         }
     }
 
@@ -213,11 +209,7 @@ public abstract class BaseRouteService extends ChildServiceSupport {
             ServiceHelper.startService(route);
 
             // invoke callbacks on route policy
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onStart(route);
-                }
-            }
+            routePolicyCallback(RoutePolicy::onStart);
 
             // fire event
             EventHelper.notifyRouteStarted(camelContext, route);
@@ -253,11 +245,8 @@ public abstract class BaseRouteService extends ChildServiceSupport {
             }
 
             // invoke callbacks on route policy
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onStop(route);
-                }
-            }
+            routePolicyCallback(RoutePolicy::onStop);
+
             // fire event
             EventHelper.notifyRouteStopped(camelContext, route);
         }
@@ -285,12 +274,9 @@ public abstract class BaseRouteService extends ChildServiceSupport {
             // endpoints should only be stopped when Camel is shutting down
             // see more details in the warmUp method
             ServiceHelper.stopAndShutdownServices(route.getEndpoint());
+
             // invoke callbacks on route policy
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onRemove(route);
-                }
-            }
+            routePolicyCallback(RoutePolicy::onRemove);
 
             // fire event
             EventHelper.notifyRouteRemoved(camelContext, route);
@@ -318,11 +304,7 @@ public abstract class BaseRouteService extends ChildServiceSupport {
         // suspend and resume logic is provided by DefaultCamelContext which leverages ShutdownStrategy
         // to safely suspend and resume
         try (MDCHelper mdcHelper = new MDCHelper(route.getId())) {
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onSuspend(route);
-                }
-            }
+            routePolicyCallback(RoutePolicy::onSuspend);
         }
     }
 
@@ -331,10 +313,14 @@ public abstract class BaseRouteService extends ChildServiceSupport {
         // suspend and resume logic is provided by DefaultCamelContext which leverages ShutdownStrategy
         // to safely suspend and resume
         try (MDCHelper mdcHelper = new MDCHelper(route.getId())) {
-            if (routeContext.getRoutePolicyList() != null) {
-                for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
-                    routePolicy.onResume(route);
-                }
+            routePolicyCallback(RoutePolicy::onResume);
+        }
+    }
+
+    private void routePolicyCallback(java.util.function.BiConsumer<RoutePolicy, Route> callback) {
+        if (routeContext.getRoutePolicyList() != null) {
+            for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
+                callback.accept(routePolicy, route);
             }
         }
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
similarity index 79%
rename from core/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
index a5c0dea..c4530b1 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
@@ -14,18 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl;
+package org.apache.camel.impl.engine;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.impl.engine.AbstractDynamicRegistry;
 import org.apache.camel.impl.transformer.TransformerKey;
-import org.apache.camel.model.transformer.TransformerDefinition;
-import org.apache.camel.reifier.transformer.TransformerReifier;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.Transformer;
 import org.apache.camel.spi.TransformerRegistry;
@@ -39,18 +34,9 @@ public class DefaultTransformerRegistry extends AbstractDynamicRegistry<Transfor
 
     private final Map<TransformerKey, TransformerKey> aliasMap;
 
-    public DefaultTransformerRegistry(CamelContext context) throws Exception {
-        this(context, new ArrayList<>());
-    }
-
-    public DefaultTransformerRegistry(CamelContext context, List<TransformerDefinition> definitions) throws Exception {
+    public DefaultTransformerRegistry(CamelContext context) {
         super(context, CamelContextHelper.getMaximumTransformerCacheSize(context));
         this.aliasMap = new ConcurrentHashMap<>();
-        for (TransformerDefinition def : definitions) {
-            Transformer transformer = TransformerReifier.reifier(def).createTransformer(context);
-            context.addService(transformer);
-            put(createKey(def), transformer);
-        }
     }
 
     @Override
@@ -120,9 +106,4 @@ public class DefaultTransformerRegistry extends AbstractDynamicRegistry<Transfor
         return "TransformerRegistry for " + context.getName() + ", capacity: " + maxCacheSize;
     }
 
-    private TransformerKey createKey(TransformerDefinition def) {
-        return ObjectHelper.isNotEmpty(def.getScheme()) ? new TransformerKey(def.getScheme())
-            : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
-    }
-
 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultValidatorRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
similarity index 71%
rename from core/camel-core/src/main/java/org/apache/camel/impl/DefaultValidatorRegistry.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
index a91b9ec..cef86eb 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultValidatorRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
@@ -14,15 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl;
-
-import java.util.List;
+package org.apache.camel.impl.engine;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.impl.engine.AbstractDynamicRegistry;
 import org.apache.camel.impl.validator.ValidatorKey;
-import org.apache.camel.model.validator.ValidatorDefinition;
-import org.apache.camel.reifier.validator.ValidatorReifier;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.Validator;
 import org.apache.camel.spi.ValidatorRegistry;
@@ -34,19 +29,10 @@ import org.apache.camel.util.ObjectHelper;
  */
 public class DefaultValidatorRegistry extends AbstractDynamicRegistry<ValidatorKey, Validator> implements ValidatorRegistry<ValidatorKey> {
 
-    public DefaultValidatorRegistry(CamelContext context) throws Exception {
+    public DefaultValidatorRegistry(CamelContext context) {
         super(context, CamelContextHelper.getMaximumValidatorCacheSize(context));
     }
 
-    public DefaultValidatorRegistry(CamelContext context, List<ValidatorDefinition> definitions) throws Exception {
-        this(context);
-        for (ValidatorDefinition def : definitions) {
-            Validator validator = ValidatorReifier.reifier(def).createValidator(context);
-            context.addService(validator);
-            put(createKey(def), validator);
-        }
-    }
-
     public Validator resolveValidator(ValidatorKey key) {
         Validator answer = get(key);
         if (answer == null && ObjectHelper.isNotEmpty(key.getType().getName())) {
@@ -70,8 +56,4 @@ public class DefaultValidatorRegistry extends AbstractDynamicRegistry<ValidatorK
         return "ValidatorRegistry for " + context.getName() + ", capacity: " + maxCacheSize;
     }
 
-    private ValidatorKey createKey(ValidatorDefinition def) {
-        return new ValidatorKey(new DataType(def.getType()));
-    }
-
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/RestRegistryFactoryResolver.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/RestRegistryFactoryResolver.java
index 27bc0d0..5b0d9e4 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/RestRegistryFactoryResolver.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/RestRegistryFactoryResolver.java
@@ -59,7 +59,8 @@ public class RestRegistryFactoryResolver {
             }
         }
 
-        throw new IllegalArgumentException("No RestRegistryFactory implementation found.  You need to add camel-rest to the classpath.");
+        LOG.debug("No RestRegistryFactory implementation found.  You need to add camel-rest to the classpath.");
+        return null;
     }
 
     private Class<?> findFactory(String name, CamelContext context) throws ClassNotFoundException, IOException {
diff --git a/core/camel-core/pom.xml b/core/camel-core/pom.xml
index 5515347..a809544 100644
--- a/core/camel-core/pom.xml
+++ b/core/camel-core/pom.xml
@@ -85,6 +85,12 @@
         <!-- required dependencies by camel-core -->
         <dependency>
             <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jaxp</artifactId>
+        </dependency>
+
+        <!-- required dependencies by camel-core -->
+        <dependency>
+            <groupId>org.apache.camel</groupId>
             <artifactId>camel-support</artifactId>
         </dependency>
 
@@ -461,7 +467,7 @@
                     </execution>
                     <!-- we need to copy the method.json schema file from camel-core to camel-bean because camel-bean is built before
                          camel-core and we would have a chicken-and-egg situation where camel-bean needs method.json during its build phase
-                         but this file is not available, so we have copied the file to camel-xpath and then we use this maven plugin
+                         but this file is not available, so we have copied the file to camel-bean and then we use this maven plugin
                          to copy over the file so its kept up to date -->
                     <execution>
                         <id>copy-bean-schema</id>
@@ -481,6 +487,28 @@
                             </resources>
                         </configuration>
                     </execution>
+                    <!-- we need to copy the xtokenize.json schema file from camel-core to camel-jaxp because camel-jaxp is built before
+                         camel-core and we would have a chicken-and-egg situation where camel-jaxp needs xtokenize.json during its build phase
+                         but this file is not available, so we have copied the file to camel-jaxp and then we use this maven plugin
+                         to copy over the file so its kept up to date -->
+                    <execution>
+                        <id>copy-jaxp-schema</id>
+                        <goals>
+                            <goal>resources</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <outputDirectory>${basedir}/../../components/camel-jaxp/src/main/schema</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/target/classes/org/apache/camel/model/language</directory>
+                                    <includes>
+                                        <include>xtokenize.json</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
                     <!-- we need to copy the xpath.json schema file from camel-core to camel-xpath because camel-xpath is built before
                          camel-core and we would have a chicken-and-egg situation where camel-xpath needs xpath.json during its build phase
                          but this file is not available, so we have copied the file to camel-xpath and then we use this maven plugin
diff --git a/core/camel-core/readme.adoc b/core/camel-core/readme.adoc
index 90ec683..92571b6 100644
--- a/core/camel-core/readme.adoc
+++ b/core/camel-core/readme.adoc
@@ -10,7 +10,7 @@
 ==== Expression Languages
 
 // languages: START
-Number of Languages: 8 in 1 JAR artifacts (0 deprecated)
+Number of Languages: 7 in 1 JAR artifacts (0 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -29,8 +29,6 @@ Number of Languages: 8 in 1 JAR artifacts (0 deprecated)
 | link:src/main/docs/simple-language.adoc[Simple] (camel-core) | 1.1 | To use Camels built-in Simple language in Camel expressions or predicates.
 
 | link:src/main/docs/tokenize-language.adoc[Tokenize] (camel-core) | 2.0 | To use Camel message body or header with a tokenizer in Camel expressions or predicates.
-
-| link:src/main/docs/xtokenize-language.adoc[XML Tokenize] (camel-core) | 2.14 | To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.
 |===
 // languages: END
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java b/core/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
index 8e3b79f..f2d137c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
@@ -29,7 +29,7 @@ import org.apache.camel.model.language.ExchangePropertyExpression;
 import org.apache.camel.model.language.HeaderExpression;
 import org.apache.camel.model.language.JsonPathExpression;
 import org.apache.camel.model.language.XPathExpression;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.util.ObjectHelper;
 
 /**
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
index 446c4ac..fe7ec30 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
@@ -16,9 +16,16 @@
  */
 package org.apache.camel.builder;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
+import org.apache.camel.spi.Language;
+import org.apache.camel.support.ExpressionAdapter;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.util.StringHelper;
 
+import static org.apache.camel.support.IntrospectionSupport.setProperty;
+
 /**
  * A helper class for working with <a href="http://camel.apache.org/expression.html">expressions</a>.
  */
@@ -48,14 +55,52 @@ public final class ExpressionBuilder extends org.apache.camel.support.builder.Ex
     }
 
     public static Expression tokenizeXMLAwareExpression(String path, char mode) {
-        StringHelper.notEmpty(path, "path");
-        return new XMLTokenExpressionIterator(path, mode);
+        return tokenizeXMLAwareExpression(null, path, mode, 1, null);
     }
 
     public static Expression tokenizeXMLAwareExpression(String path, char mode, int group) {
+        return tokenizeXMLAwareExpression(null, path, mode, group, null);
+    }
+
+    public static Expression tokenizeXMLAwareExpression(String path, char mode, int group, Namespaces namespaces) {
+        return tokenizeXMLAwareExpression(null, path, mode, group, namespaces);
+    }
+
+    public static Expression tokenizeXMLAwareExpression(String headerName, String path, char mode, int group, Namespaces namespaces) {
         StringHelper.notEmpty(path, "path");
-        return new XMLTokenExpressionIterator(path, mode, group);
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                Language language = exchange.getContext().resolveLanguage("xtokenize");
+                if (headerName != null) {
+                    setProperty(language, "headerName", headerName);
+                }
+                if (mode != 'i') {
+                    setProperty(language, "mode", mode);
+                }
+                if (group > 1) {
+                    setProperty(language, "group", group);
+                }
+                if (namespaces != null) {
+                    setProperty(language, "namespaces", namespaces);
+                }
+                setProperty(language, "path", path);
+                return language.createExpression(null).evaluate(exchange, Object.class);
+            }
+
+            @Override
+            public String toString() {
+                return "xtokenize(" + path + ")";
+            }
+        };
     }
 
+    private static void setProperty(Object bean, String name, Object value) {
+        try {
+            IntrospectionSupport.setProperty(bean, name, value);
+        } catch (Exception e) {
+            throw new IllegalArgumentException("Failed to set property " + name + " on " + bean
+                    + ". Reason: " + e, e);
+        }
+    }
 
 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
index fb0045c..5f49dfe 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
@@ -28,7 +28,7 @@ import org.apache.camel.Message;
 import org.apache.camel.Predicate;
 import org.apache.camel.support.ExpressionAdapter;
 import org.apache.camel.support.ExpressionToPredicateAdapter;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 
 /**
  * Represents an expression clause within the DSL which when the expression is
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
index c899ab0..a077cec 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
@@ -38,7 +38,7 @@ import org.apache.camel.model.language.TokenizerExpression;
 import org.apache.camel.model.language.XMLTokenizerExpression;
 import org.apache.camel.model.language.XPathExpression;
 import org.apache.camel.model.language.XQueryExpression;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 
 /**
  * A support class for building expression clauses.
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
index 7c8a039..e10cd2b 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
@@ -23,8 +23,7 @@ import java.util.List;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
-import org.apache.camel.spi.NamespaceAware;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 
 /**
  * A builder of expressions or predicates based on values.
@@ -197,8 +196,7 @@ public class ValueBuilder implements Expression, Predicate {
     }
 
     public ValueBuilder xtokenize(String path, char mode, Namespaces namespaces) {
-        Expression newExp = ExpressionBuilder.tokenizeXMLAwareExpression(path, mode);
-        ((NamespaceAware)newExp).setNamespaces(namespaces.getNamespaces());
+        Expression newExp = ExpressionBuilder.tokenizeXMLAwareExpression(path, mode, 1, namespaces);
         return onNewValueBuilder(newExp);
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
index 7f6e2ae..449a2fd 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
@@ -29,6 +29,8 @@ import org.apache.camel.builder.ErrorHandlerBuilderSupport;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.impl.engine.BaseRouteService;
+import org.apache.camel.impl.engine.DefaultTransformerRegistry;
+import org.apache.camel.impl.engine.DefaultValidatorRegistry;
 import org.apache.camel.impl.transformer.TransformerKey;
 import org.apache.camel.impl.validator.ValidatorKey;
 import org.apache.camel.model.DataFormatDefinition;
@@ -43,12 +45,18 @@ import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
 import org.apache.camel.processor.MulticastProcessor;
 import org.apache.camel.reifier.dataformat.DataFormatReifier;
+import org.apache.camel.reifier.transformer.TransformerReifier;
+import org.apache.camel.reifier.validator.ValidatorReifier;
 import org.apache.camel.runtimecatalog.RuntimeCamelCatalog;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.spi.Transformer;
 import org.apache.camel.spi.TransformerRegistry;
+import org.apache.camel.spi.Validator;
 import org.apache.camel.spi.ValidatorRegistry;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * Represents the context used to configure routes and the policies to use.
@@ -224,11 +232,31 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp
     }
 
     protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws Exception {
-        return new DefaultValidatorRegistry(this, getValidators());
+        DefaultValidatorRegistry registry = new DefaultValidatorRegistry(this);
+        for (ValidatorDefinition def : getValidators()) {
+            Validator validator = ValidatorReifier.reifier(def).createValidator(this);
+            registry.put(createKey(def), doAddService(validator));
+        }
+        return registry;
+    }
+
+    private ValidatorKey createKey(ValidatorDefinition def) {
+        return new ValidatorKey(new DataType(def.getType()));
     }
 
     protected TransformerRegistry<TransformerKey> createTransformerRegistry() throws Exception {
-        return new DefaultTransformerRegistry(this, getTransformers());
+        DefaultTransformerRegistry registry = new DefaultTransformerRegistry(this);
+        for (TransformerDefinition def : getTransformers()) {
+            Transformer transformer = TransformerReifier.reifier(def).createTransformer(this);
+            registry.put(createKey(def), doAddService(transformer));
+        }
+        return registry;
+    }
+
+    private TransformerKey createKey(TransformerDefinition def) {
+        return ObjectHelper.isNotEmpty(def.getScheme())
+                ? new TransformerKey(def.getScheme())
+                : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
     }
 
     protected abstract HealthCheckRegistry createHealthCheckRegistry();
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index c35b01a..dad1661 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -82,6 +82,7 @@ import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.RestRegistry;
+import org.apache.camel.spi.RestRegistryFactory;
 import org.apache.camel.spi.RouteController;
 import org.apache.camel.spi.ShutdownStrategy;
 import org.apache.camel.spi.StreamCachingStrategy;
@@ -311,8 +312,8 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
     }
 
     @Override
-    protected RestRegistry createRestRegistry() {
-        return new RestRegistryFactoryResolver().resolve(this).createRegistry();
+    protected RestRegistryFactory createRestRegistryFactory() {
+        return new RestRegistryFactoryResolver().resolve(this);
     }
 
     protected EndpointRegistry<EndpointKey> createEndpointRegistry(Map<EndpointKey, Endpoint> endpoints) {
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
index 7b506d5..56b4f86 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -292,8 +292,8 @@ public class DefaultModel implements Model {
         mcc.setStartingRoutes(true);
         try {
 
-            Route route = new RouteReifier(routeDefinition).addRoutes(mcc);
-            RouteService routeService = new RouteService(mcc, routeDefinition, route.getRouteContext(), route);
+            Route route = new RouteReifier(routeDefinition).createRoute(mcc);
+            RouteService routeService = new RouteService(route);
             mcc.startRouteService(routeService, true);
         } finally {
             // we are done staring routes
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java b/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
index 1354b57..81cf3f8 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
@@ -40,7 +40,7 @@ import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
-import org.apache.camel.util.XmlLineNumberParser;
+import org.apache.camel.util.xml.XmlLineNumberParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java b/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
index 8db66c7..b4e02e6 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
@@ -22,14 +22,12 @@ import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
-import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.impl.engine.BaseRouteService;
 import org.apache.camel.model.OnCompletionDefinition;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteDefinitionHelper;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.CamelContextHelper;
 
 /**
@@ -40,9 +38,9 @@ public class RouteService extends BaseRouteService {
 
     private final RouteDefinition routeDefinition;
 
-    public RouteService(AbstractCamelContext camelContext, RouteDefinition routeDefinition, RouteContext routeContext, Route route) {
-        super(camelContext, routeContext, route, routeDefinition.idOrCreate(camelContext.getNodeIdFactory()));
-        this.routeDefinition = routeDefinition;
+    public RouteService(Route route) {
+        super(route);
+        this.routeDefinition = (RouteDefinition) route.getRouteContext().getRoute();
     }
 
     public RouteDefinition getRouteDefinition() {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
index ff08b58..5a7f399 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
@@ -55,7 +55,7 @@ import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.NamespaceAware;
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.XmlLineNumberParser;
+import org.apache.camel.util.xml.XmlLineNumberParser;
 
 import static org.apache.camel.model.ProcessorDefinitionHelper.filterTypeInOutputs;
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java b/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
index b29e982..7c09111 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
@@ -24,13 +24,12 @@ import javax.xml.bind.annotation.XmlRootElement;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
-import org.apache.camel.language.tokenizer.XMLTokenizeLanguage;
 import org.apache.camel.spi.Metadata;
 
 /**
  * To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.
  *
- * @see XMLTokenizeLanguage
+ * @see org.apache.camel.language.xtokenizer.XMLTokenizeLanguage
  */
 @Metadata(firstVersion = "2.14.0", label = "language,core,xml", title = "XML Tokenize")
 @XmlRootElement(name = "xtokenize")
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
index 3fbffa9..2f6ca2a 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -87,7 +87,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         throw new UnsupportedOperationException("Not implemented for RouteDefinition");
     }
 
-    public Route addRoutes(CamelContext camelContext) throws Exception {
+    public Route createRoute(CamelContext camelContext) throws Exception {
         @SuppressWarnings("deprecation")
         ErrorHandlerFactory handler = camelContext.getErrorHandlerFactory();
         if (handler != null) {
@@ -95,7 +95,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         }
 
         try {
-            return addRoutes(camelContext, definition.getInput());
+            return createRoute(camelContext, definition.getInput());
         } catch (FailedToCreateRouteException e) {
             throw e;
         } catch (Exception e) {
@@ -202,7 +202,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
 
     // Implementation methods
     // -------------------------------------------------------------------------
-    protected Route addRoutes(CamelContext camelContext, FromDefinition fromType) throws Exception {
+    protected Route createRoute(CamelContext camelContext, FromDefinition fromType) throws Exception {
         DefaultRouteContext routeContext = new DefaultRouteContext(camelContext, definition, fromType);
 
         // configure tracing
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/DefaultNamespaceContextTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/DefaultNamespaceContextTest.java
index 495318f..5e91618 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/DefaultNamespaceContextTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/DefaultNamespaceContextTest.java
@@ -23,7 +23,7 @@ import java.util.Map;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.language.xpath.DefaultNamespaceContext;
 import org.apache.camel.language.xpath.XPathBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 public class DefaultNamespaceContextTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/ExtractXPathWithNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/ExtractXPathWithNamespaceTest.java
index e701ae0..662a7dc 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/ExtractXPathWithNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/ExtractXPathWithNamespaceTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder.xml;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 /**
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathHeaderNameResultTypeAndNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathHeaderNameResultTypeAndNamespaceTest.java
index 1db0a10..6b5841a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathHeaderNameResultTypeAndNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathHeaderNameResultTypeAndNamespaceTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder.xml;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 /**
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceResultTypeTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceResultTypeTest.java
index 30e0bb4..826d08d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceResultTypeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceResultTypeTest.java
@@ -17,7 +17,7 @@
 package org.apache.camel.builder.xml;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 
 /**
  * XPath with namespace test
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceTest.java
index 0e3734b..72344b4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNamespaceTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder.xml;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 /**
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNestedNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNestedNamespaceTest.java
index 73af8d8..c1f19ca 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNestedNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathNestedNamespaceTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.builder.xml;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 public class XPathNestedNamespaceTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathTest.java
index 2000a3b..b9c73d6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathTest.java
@@ -43,7 +43,7 @@ import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.language.xpath.InvalidXPathException;
 import org.apache.camel.language.xpath.XPathBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.util.StringHelper;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathWithNamespacesFromDomTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathWithNamespacesFromDomTest.java
index e30b52a..97fea60 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathWithNamespacesFromDomTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XPathWithNamespacesFromDomTest.java
@@ -22,7 +22,8 @@ import org.w3c.dom.Element;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.language.xpath.DefaultNamespaceContext;
 import org.apache.camel.language.xpath.XPathBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
+import org.apache.camel.support.builder.xml.NamespacesHelper;
 import org.junit.Test;
 
 public class XPathWithNamespacesFromDomTest extends ContextTestSupport {
@@ -35,7 +36,7 @@ public class XPathWithNamespacesFromDomTest extends ContextTestSupport {
         assertNotNull("Could not find element for id 'a'", element);
 
         XPathBuilder builder = XPathBuilder.xpath("//y:foo[@id='z']");
-        Namespaces ns = new Namespaces(element);
+        Namespaces ns = NamespacesHelper.namespaces(element);
         ns.configure(builder);
         builder.start();
         DefaultNamespaceContext namespaceContext = builder.getNamespaceContext();
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
index 4c0ffc8..caffd55 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
@@ -52,7 +52,7 @@ public class MultipleLifecycleStrategyTest extends TestSupport {
         List<String> expectedEvents = Arrays.asList("onContextStart",
             "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
             "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
-            "onServiceAdd", "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop");
+            "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop");
         
         assertEquals(expectedEvents, dummy1.getEvents());
         assertEquals(expectedEvents, dummy2.getEvents());
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/XMLTokenSplitTest.java b/core/camel-core/src/test/java/org/apache/camel/language/XMLTokenSplitTest.java
index d103b15..6107a74 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/XMLTokenSplitTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/XMLTokenSplitTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageGroupingTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageGroupingTest.java
index 40c6eff..db2fdcd 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageGroupingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageGroupingTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.language.tokenizer;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 public class XMLTokenizeLanguageGroupingTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingFileTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingFileTest.java
index e3316e3..30ca9a8 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingFileTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingFileTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.language.tokenizer;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingTest.java
index add5d4f..cc1f232 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageStreamingTest.java
@@ -17,7 +17,7 @@
 package org.apache.camel.language.tokenizer;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 
 public class XMLTokenizeLanguageStreamingTest extends XMLTokenizeLanguageTest {
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageTest.java
index 6fd58c8..13faec3 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguageTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.language.tokenizer;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 public class XMLTokenizeLanguageTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageGroupingTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageGroupingTest.java
index 50c33db..5e6b9e6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageGroupingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageGroupingTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.language.tokenizer;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 public class XMLTokenizeWrapLanguageGroupingTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageTest.java b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageTest.java
index 9419c0a..04d2ca6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/tokenizer/XMLTokenizeWrapLanguageTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.language.tokenizer;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 public class XMLTokenizeWrapLanguageTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
index 0982ae2..d9605f5 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupWrappedMultiXmlTokenTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupWrappedMultiXmlTokenTest.java
index a548dfb..d5da8bd 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupWrappedMultiXmlTokenTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitGroupWrappedMultiXmlTokenTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWithXqureyTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWithXqureyTest.java
index f2c027e..a150ca2 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWithXqureyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SplitterWithXqureyTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 public class SplitterWithXqureyTest extends ContextTestSupport {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterAndResultTypeTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterAndResultTypeTest.java
index a770d4f..f518196 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterAndResultTypeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterAndResultTypeTest.java
@@ -17,7 +17,7 @@
 package org.apache.camel.processor;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 
 public class XPathWithNamespaceBuilderFilterAndResultTypeTest extends XPathWithNamespaceBuilderFilterTest {
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java
index 318f8b9..634bbe6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Endpoint;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespacesFilterTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespacesFilterTest.java
index 90553c0..556d87c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespacesFilterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespacesFilterTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Endpoint;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java b/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
index b43cab4..ad1ce88 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
@@ -22,7 +22,7 @@ import org.w3c.dom.Element;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.ModelHelper;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.junit.Test;
 
 public class DumpModelAsXmlNamespaceTest extends ContextTestSupport {
diff --git a/core/camel-jaxp/pom.xml b/core/camel-jaxp/pom.xml
new file mode 100644
index 0000000..3e4c36f
--- /dev/null
+++ b/core/camel-jaxp/pom.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>core</artifactId>
+        <version>3.0.0-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>camel-jaxp</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Camel :: JAXP</name>
+    <description>Camel JAXP Support</description>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>spi-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>meta-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-support</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <version>${project.version}</version>
+                <configuration>
+                    <!-- set to true to make build fail fast if missing documentation in docs files -->
+                    <failFast>false</failFast>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>generate</id>
+                        <goals>
+                            <goal>generate-jaxb-list</goal>
+                            <goal>generate-eips-list</goal>
+                            <goal>generate-components-list</goal>
+                            <goal>generate-dataformats-list</goal>
+                            <goal>generate-languages-list</goal>
+                        </goals>
+                        <phase>process-classes</phase>
+                    </execution>
+                    <execution>
+                        <id>validate</id>
+                        <goals>
+                            <goal>validate-components</goal>
+                            <goal>prepare-spring-boot-starter</goal>
+                            <goal>prepare-spring-boot-auto-configuration</goal>
+                            <goal>generate-legal</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                    </execution>
+                    <execution>
+                        <id>readme</id>
+                        <goals>
+                            <goal>update-readme</goal>
+                        </goals>
+                        <phase>package</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-generated-resources</id>
+                        <goals>
+                            <goal>resources</goal>
+                        </goals>
+                        <phase>process-classes</phase>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/components</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/dataformats</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/languages</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/models</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/jaxb</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/target/generated/camel/legal</directory>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+
+        <!-- enables the APT dependency so that it can be disabled in IDE builds -->
+        <profile>
+            <id>apt</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+
+            <dependencies>
+
+                <!-- enable the APT processor -->
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>apt</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+
+            </dependencies>
+        </profile>
+
+    </profiles>
+</project>
diff --git a/core/camel-core/src/main/docs/xtokenize-language.adoc b/core/camel-jaxp/src/main/docs/xtokenize-language.adoc
similarity index 100%
rename from core/camel-core/src/main/docs/xtokenize-language.adoc
rename to core/camel-jaxp/src/main/docs/xtokenize-language.adoc
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/DomConverter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/StaxConverter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/StreamSourceConverter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLReaderPool.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderInputStream.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XMLStreamReaderReader.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlErrorListener.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/jaxp/package.html b/core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/converter/jaxp/package.html
rename to core/camel-jaxp/src/main/java/org/apache/camel/converter/jaxp/package.html
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/RecordableReader.java b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/RecordableReader.java
similarity index 98%
rename from core/camel-core/src/main/java/org/apache/camel/builder/RecordableReader.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/RecordableReader.java
index 46ff821..51020bb 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/RecordableReader.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/RecordableReader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
 
 import java.io.CharArrayWriter;
 import java.io.FilterReader;
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/XMLTokenExpressionIterator.java b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
similarity index 92%
rename from core/camel-core/src/main/java/org/apache/camel/builder/XMLTokenExpressionIterator.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
index ce44a39..8cb503f 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/XMLTokenExpressionIterator.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
 
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.io.StringReader;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -51,20 +52,22 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * An {@link org.apache.camel.language.tokenizer.XMLTokenizeLanguage} based iterator.
+ * An {@link org.apache.camel.language.xtokenizer.XMLTokenizeLanguage} based iterator.
  */
 public class XMLTokenExpressionIterator extends ExpressionAdapter implements NamespaceAware {
+    protected final String headerName;
     protected final String path;
     protected char mode;
     protected int group;
     protected Map<String, String> nsmap;
 
     public XMLTokenExpressionIterator(String path, char mode) {
-        this(path, mode, 1);
+        this(null, path, mode, 1);
     }
 
-    public XMLTokenExpressionIterator(String path, char mode, int group) {
+    public XMLTokenExpressionIterator(String headerName, String path, char mode, int group) {
         StringHelper.notEmpty(path, "path");
+        this.headerName = headerName;
         this.path = path;
         this.mode = mode;
         this.group = group > 1 ? group : 1;
@@ -97,7 +100,7 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
     }
 
     protected Iterator<?> createIterator(InputStream in, String charset) throws XMLStreamException, UnsupportedEncodingException {
-        return new XMLTokenIterator(path, nsmap, mode, group, in, charset);
+        return createIterator(new InputStreamReader(in, charset));
     }
 
     protected Iterator<?> createIterator(Reader in) throws XMLStreamException {
@@ -126,29 +129,35 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
      * @return the evaluated value
      */
     protected Object doEvaluate(Exchange exchange, boolean closeStream) {
-        InputStream in = null;
+        Reader reader = null;
         try {
-            in = exchange.getIn().getMandatoryBody(InputStream.class);
-            String charset = ExchangeHelper.getCharsetName(exchange);
-            return createIterator(in, charset);
+            if (headerName != null) {
+                String val = exchange.getIn().getHeader(headerName, String.class);
+                reader = new StringReader(val);
+            } else {
+                InputStream in = exchange.getIn().getMandatoryBody(InputStream.class);
+                String charset = ExchangeHelper.getCharsetName(exchange);
+                reader = new InputStreamReader(in, charset);
+            }
+            return createIterator(reader);
         } catch (InvalidPayloadException e) {
             exchange.setException(e);
             // must close input stream
-            IOHelper.close(in);
+            IOHelper.close(reader);
             return null;
         } catch (XMLStreamException e) {
             exchange.setException(e);
             // must close input stream
-            IOHelper.close(in);
+            IOHelper.close(reader);
             return null;
         } catch (UnsupportedEncodingException e) {
             exchange.setException(e);
             // must close input stream
-            IOHelper.close(in);
+            IOHelper.close(reader);
             return null;
         } finally {
             if (closeStream) {
-                IOHelper.close(in);
+                IOHelper.close(reader);
             }
         }
     }
@@ -158,8 +167,6 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
         private static final Logger LOG = LoggerFactory.getLogger(XMLTokenIterator.class);
         private static final Pattern NAMESPACE_PATTERN = Pattern.compile("xmlns(:\\w+|)\\s*=\\s*('[^']*'|\"[^\"]*\")");
 
-        private transient InputStream originalInputStream;
-
         private AttributedQName[] splitpath;
         private int index;
         private char mode;
@@ -180,24 +187,6 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
 
         private Object nextToken;
         
-        XMLTokenIterator(String path, Map<String, String> nsmap, char mode, InputStream in, String charset) 
-            throws XMLStreamException, UnsupportedEncodingException {
-            // woodstox's getLocation().etCharOffset() does not return the offset correctly for InputStream, so use Reader instead.
-            this(path, nsmap, mode, 1, new InputStreamReader(in, charset));
-            this.originalInputStream = in;
-        }
-
-        XMLTokenIterator(String path, Map<String, String> nsmap, char mode, int group, InputStream in, String charset) 
-            throws XMLStreamException, UnsupportedEncodingException {
-            // woodstox's getLocation().etCharOffset() does not return the offset correctly for InputStream, so use Reader instead.
-            this(path, nsmap, mode, group, new InputStreamReader(in, charset));
-            this.originalInputStream = in;
-        }
-
-        XMLTokenIterator(String path, Map<String, String> nsmap, char mode, Reader in) throws XMLStreamException {
-            this(path, nsmap, mode, 1, in);
-        }
-
         XMLTokenIterator(String path, Map<String, String> nsmap, char mode, int group, Reader in) throws XMLStreamException {
             final String[] sl = path.substring(1).split("/");
             this.splitpath = new AttributedQName[sl.length];
@@ -608,9 +597,7 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
                 // ignore
             }
             // need to close the original input stream as well as the reader do not delegate close it
-            if (originalInputStream != null) {
-                IOHelper.close(originalInputStream);
-            }
+            IOHelper.close(in);
         }
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguage.java b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
similarity index 75%
rename from core/camel-core/src/main/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguage.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
index 13e9b15..da9a524 100644
--- a/core/camel-core/src/main/java/org/apache/camel/language/tokenizer/XMLTokenizeLanguage.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.language.tokenizer;
+package org.apache.camel.language.xtokenizer;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
-import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.spi.annotations.Language;
 import org.apache.camel.support.ExpressionToPredicateAdapter;
 import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -37,20 +37,18 @@ import org.apache.camel.util.ObjectHelper;
 @Language("xtokenize")
 public class XMLTokenizeLanguage extends LanguageSupport {
 
-    private String path;
     private String headerName;
+    private String path;
     private char mode;
     private int group;
+    private Namespaces namespaces;
 
     public static Expression tokenize(String path) {
-        return tokenize(path, 'i');
+        return tokenize(null, path, 'i');
     }
 
     public static Expression tokenize(String path, char mode) {
-        XMLTokenizeLanguage language = new XMLTokenizeLanguage();
-        language.setPath(path);
-        language.setMode(mode);
-        return language.createExpression(null);
+        return tokenize(null, path, mode);
     }
 
     public static Expression tokenize(String headerName, String path) {
@@ -58,11 +56,16 @@ public class XMLTokenizeLanguage extends LanguageSupport {
     }
 
     public static Expression tokenize(String headerName, String path, char mode) {
+        return tokenize(headerName, path, mode, 1, null);
+    }
+
+    public static Expression tokenize(String headerName, String path, char mode, int group, Namespaces namespaces) {
         XMLTokenizeLanguage language = new XMLTokenizeLanguage();
         language.setHeaderName(headerName);
-        language.setPath(path);
         language.setMode(mode);
-        return language.createExpression(null);
+        language.setGroup(group);
+        language.setNamespaces(namespaces);
+        return language.createExpression(path);
     }
 
     public Predicate createPredicate(String expression) {
@@ -72,18 +75,22 @@ public class XMLTokenizeLanguage extends LanguageSupport {
     /**
      * Creates a tokenize expression.
      */
-    public Expression createExpression() {
+    public Expression createExpression(String expression) {
+        String path = expression != null ? expression : this.path;
         ObjectHelper.notNull(path, "path");
+        XMLTokenExpressionIterator expr = new XMLTokenExpressionIterator(headerName, path, mode, group);
+        if (namespaces != null) {
+            expr.setNamespaces(namespaces.getNamespaces());
+        }
+        return expr;
+    }
 
-        Expression answer = ExpressionBuilder.tokenizeXMLAwareExpression(path, mode);
-        return answer;
+    public String getHeaderName() {
+        return headerName;
     }
 
-    public Expression createExpression(String expression) {
-        if (ObjectHelper.isNotEmpty(expression)) {
-            this.path = expression;
-        }
-        return createExpression();
+    public void setHeaderName(String headerName) {
+        this.headerName = headerName;
     }
 
     public String getPath() {
@@ -94,14 +101,6 @@ public class XMLTokenizeLanguage extends LanguageSupport {
         this.path = path;
     }
 
-    public String getHeaderName() {
-        return headerName;
-    }
-
-    public void setHeaderName(String headerName) {
-        this.headerName = headerName;
-    }
-
     public char getMode() {
         return mode;
     }
@@ -118,6 +117,14 @@ public class XMLTokenizeLanguage extends LanguageSupport {
         this.group = group;
     }
 
+    public Namespaces getNamespaces() {
+        return namespaces;
+    }
+
+    public void setNamespaces(Namespaces namespaces) {
+        this.namespaces = namespaces;
+    }
+
     public boolean isSingleton() {
         return false;
     }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/package.html
similarity index 91%
copy from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html
copy to core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/package.html
index 8721b1d..0008a2f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/language/xtokenizer/package.html
@@ -21,7 +21,7 @@
 </head>
 <body>
 
-Performs XML validation using JAXP for validating against XSD
+Camel XML <a href="http://camel.apache.org/tokenizer">Tokenizer</a> language.
 
 </body>
 </html>
diff --git a/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/NamespacesHelper.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/NamespacesHelper.java
new file mode 100644
index 0000000..37383f6
--- /dev/null
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/NamespacesHelper.java
@@ -0,0 +1,37 @@
+package org.apache.camel.support.builder.xml;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+import org.apache.camel.support.builder.Namespaces;
+
+public class NamespacesHelper {
+
+    public static Namespaces namespaces(Element element) {
+        Namespaces namespaces = new Namespaces();
+        add(namespaces, element);
+        return namespaces;
+    }
+
+    private static void add(Namespaces namespaces, Element element) {
+        // let's set the parent first in case we overload a prefix here
+        Node parentNode = element.getParentNode();
+        if (parentNode instanceof org.w3c.dom.Element) {
+            add(namespaces, (Element) parentNode);
+        }
+        NamedNodeMap attributes = element.getAttributes();
+        int size = attributes.getLength();
+        for (int i = 0; i < size; i++) {
+            Attr node = (Attr) attributes.item(i);
+            String name = node.getName();
+            if (name.startsWith("xmlns:")) {
+                String prefix = name.substring("xmlns:".length());
+                String uri = node.getValue();
+                namespaces.add(prefix, uri);
+            }
+        }
+    }
+
+}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
similarity index 99%
rename from core/camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
index 8db2112..673c8ec7 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
@@ -340,11 +340,11 @@ public class StAX2SAXSource extends SAXSource implements XMLReader {
     }
 
     public void parse(InputSource input) throws SAXException {
-        StAX2SAXSource.this.parse();
+        parse();
     }
 
     public void parse(String systemId) throws SAXException {
-        StAX2SAXSource.this.parse();
+        parse();
     }
 
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/XMLConverterHelper.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/DefaultValidationErrorHandler.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/NoXmlBodyValidationException.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/NoXmlHeaderValidationException.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/SchemaReader.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/SchemaValidationException.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/ValidatingProcessor.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/ValidatorErrorHandler.java
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html b/core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/package.html
similarity index 100%
rename from core/camel-support/src/main/java/org/apache/camel/support/processor/validation/package.html
rename to core/camel-jaxp/src/main/java/org/apache/camel/support/processor/validation/package.html
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java b/core/camel-jaxp/src/main/java/org/apache/camel/util/xml/XmlLineNumberParser.java
similarity index 99%
rename from core/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java
rename to core/camel-jaxp/src/main/java/org/apache/camel/util/xml/XmlLineNumberParser.java
index 75fd14f..1170f61 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/util/xml/XmlLineNumberParser.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.util;
+package org.apache.camel.util.xml;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -37,6 +37,8 @@ import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
+import org.apache.camel.util.ObjectHelper;
+
 /**
  * An XML parser that uses SAX to include line and column number for each XML element in the parsed Document.
  * <p>
diff --git a/core/camel-jaxp/src/main/schema/xtokenize.json b/core/camel-jaxp/src/main/schema/xtokenize.json
new file mode 100644
index 0000000..52bf377
--- /dev/null
+++ b/core/camel-jaxp/src/main/schema/xtokenize.json
@@ -0,0 +1,22 @@
+{
+ "model": {
+    "kind": "model",
+    "name": "xtokenize",
+    "title": "XML Tokenize",
+    "description": "To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.",
+    "firstVersion": "2.14.0",
+    "javaType": "org.apache.camel.model.language.XMLTokenizerExpression",
+    "label": "language,core,xml",
+    "deprecated": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "headerName": { "kind": "attribute", "displayName": "Header Name", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Name of header to tokenize instead of using the message body." },
+    "mode": { "kind": "attribute", "displayName": "Mode", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element" },
+    "group": { "kind": "attribute", "displayName": "Group", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "secret": false, "description": "To group N parts together" },
+    "trim": { "kind": "attribute", "displayName": "Trim", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Sets the id of this node" }
+  }
+}
+
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/AttributedQNameTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/AttributedQNameTest.java
similarity index 96%
rename from core/camel-core/src/test/java/org/apache/camel/builder/AttributedQNameTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/AttributedQNameTest.java
index 1a59734..1f6fab6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/AttributedQNameTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/AttributedQNameTest.java
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
 
 import javax.xml.namespace.QName;
 
-import org.apache.camel.builder.XMLTokenExpressionIterator.AttributedQName;
+import org.apache.camel.language.xtokenizer.XMLTokenExpressionIterator.AttributedQName;
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorCharsetTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorCharsetTest.java
similarity index 98%
rename from core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorCharsetTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorCharsetTest.java
index 3ba6a1f..91807b9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorCharsetTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorCharsetTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
 
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorGroupingTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorGroupingTest.java
similarity index 98%
rename from core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorGroupingTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorGroupingTest.java
index c123086..8c2c67d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorGroupingTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorGroupingTest.java
@@ -14,10 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
+
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -416,16 +418,16 @@ public class XMLTokenExpressionIteratorGroupingTest extends Assert {
         xtei.setNamespaces(nsmap);
         xtei.setGroup(group);
 
-        Iterator<?> it = xtei.createIterator(in, "utf-8");
+        Iterator<?> it = xtei.createIterator(new InputStreamReader(in, "utf-8"));
         List<String> results = new ArrayList<>();
         while (it.hasNext()) {
             results.add((String)it.next());
         }
         ((Closeable)it).close();
 
-        assertEquals("token count", expected.length, results.size());
+        Assert.assertEquals("token count", expected.length, results.size());
         for (int i = 0; i < expected.length; i++) {
-            assertEquals("mismatch [" + i + "]", expected[i], results.get(i));
+            Assert.assertEquals("mismatch [" + i + "]", expected[i], results.get(i));
         }
     }
 }
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorInvalidXMLTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorInvalidXMLTest.java
similarity index 98%
rename from core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorInvalidXMLTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorInvalidXMLTest.java
index 6f1c9dc..92834d9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorInvalidXMLTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorInvalidXMLTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
 
 import java.io.Closeable;
 import java.io.IOException;
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
similarity index 87%
rename from core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
index f949859..afab658 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/XMLTokenExpressionIteratorTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
@@ -14,7 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
+package org.apache.camel.language.xtokenizer;
+
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
 import java.io.InputStream;
@@ -28,8 +29,6 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.apache.camel.TestSupport.getJavaMajorVersion;
-
 /**
  *
  */
@@ -118,13 +117,6 @@ public class XMLTokenExpressionIteratorTest extends Assert {
     };
 
     private static final String[] RESULTS_CHILD_MIXED = {
-        "<child some_attr='a' anotherAttr='a' xmlns=\"urn:c\" xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"></child>",
-        "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'/>",
-        "<child some_attr='c' anotherAttr='c' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'></child>",
-        "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"/>"
-    };
-    
-    private static final String[] RESULTS_CHILD_MIXED_JAVA8 = {
         "<child some_attr='a' anotherAttr='a' xmlns=\"urn:c\" xmlns:c=\"urn:c\" xmlns:g=\"urn:g\"></child>",
         "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:c='urn:c' xmlns:g='urn:g'/>",
         "<child some_attr='c' anotherAttr='c' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'></child>",
@@ -147,15 +139,6 @@ public class XMLTokenExpressionIteratorTest extends Assert {
     };
 
     private static final String[] RESULTS_CHILD = {
-        "<c:child some_attr='a' anotherAttr='a' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"></c:child>",
-        "<c:child some_attr='b' anotherAttr='b' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"/>",
-        "<c:child some_attr='c' anotherAttr='c' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"></c:child>",
-        "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"/>",
-        "<c:child some_attr='e' anotherAttr='e' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"></c:child>",
-        "<c:child some_attr='f' anotherAttr='f' xmlns:g=\"urn:g\" xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"/>"
-    };
-    
-    private static final String[] RESULTS_CHILD_JAVA8 = {
         "<c:child some_attr='a' anotherAttr='a' xmlns:c=\"urn:c\" xmlns:d=\"urn:d\" xmlns:g=\"urn:g\"></c:child>",
         "<c:child some_attr='b' anotherAttr='b' xmlns:c=\"urn:c\" xmlns:d=\"urn:d\" xmlns:g=\"urn:g\"/>",
         "<c:child some_attr='c' anotherAttr='c' xmlns:c=\"urn:c\" xmlns:d=\"urn:d\" xmlns:g=\"urn:g\"></c:child>",
@@ -165,11 +148,6 @@ public class XMLTokenExpressionIteratorTest extends Assert {
     };
 
     private static final String[] RESULTS_CHILD_NO_NS_MIXED = {
-        "<child some_attr='a' anotherAttr='a' xmlns='' xmlns:g='urn:g' xmlns:c='urn:c'></child>",
-        "<child some_attr='c' anotherAttr='c' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"></child>",
-    };
-    
-    private static final String[] RESULTS_CHILD_NO_NS_MIXED_JAVA8 = {
         "<child some_attr='a' anotherAttr='a' xmlns='' xmlns:c='urn:c' xmlns:g='urn:g'></child>",
         "<child some_attr='c' anotherAttr='c' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"></child>",
     };
@@ -185,11 +163,6 @@ public class XMLTokenExpressionIteratorTest extends Assert {
     };
 
     private static final String[] RESULTS_CHILD_NS_MIXED = {
-        "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'/>",
-        "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"/>"
-    };
-    
-    private static final String[] RESULTS_CHILD_NS_MIXED_JAVA8 = {
         "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:c='urn:c' xmlns:g='urn:g'/>",
         "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"/>"
     };
@@ -287,10 +260,7 @@ public class XMLTokenExpressionIteratorTest extends Assert {
 
     @Test
     public void testExtractChildInjected() throws Exception {
-        String[] result = RESULTS_CHILD_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD;
-        }
+        String[] result = RESULTS_CHILD;
         invokeAndVerify("//C:child", 'i', new ByteArrayInputStream(TEST_BODY), result);
     }
 
@@ -301,10 +271,7 @@ public class XMLTokenExpressionIteratorTest extends Assert {
 
     @Test
     public void testExtractChildNSMixedInjected() throws Exception {
-        String[] result = RESULTS_CHILD_MIXED_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD_MIXED;
-        }
+        String[] result = RESULTS_CHILD_MIXED;
         invokeAndVerify("//*:child", 'i', new ByteArrayInputStream(TEST_BODY_NS_MIXED), result);
     }
 
@@ -315,10 +282,7 @@ public class XMLTokenExpressionIteratorTest extends Assert {
 
     @Test
     public void testExtractCxxxd() throws Exception {
-        String[] result = RESULTS_CHILD_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD;
-        }
+        String[] result = RESULTS_CHILD;
         invokeAndVerify("//C:c*d", 'i', new ByteArrayInputStream(TEST_BODY), result);
     }
 
@@ -334,10 +298,7 @@ public class XMLTokenExpressionIteratorTest extends Assert {
 
     @Test
     public void testExtractSomeUnqualifiedChildInjected() throws Exception {
-        String[] result = RESULTS_CHILD_NO_NS_MIXED_JAVA8;
-        if (isJava7OrLower())  {
-            result = RESULTS_CHILD_NO_NS_MIXED;
-        }
+        String[] result = RESULTS_CHILD_NO_NS_MIXED;
         invokeAndVerify("//child", 'i', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), result);
     }
 
@@ -350,20 +311,14 @@ public class XMLTokenExpressionIteratorTest extends Assert {
     @Test
     public void testExtractSomeQualifiedChildInjected() throws Exception {
         nsmap.put("", "urn:c");
-        String[] result = RESULTS_CHILD_NS_MIXED_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD_NS_MIXED;
-        }
+        String[] result = RESULTS_CHILD_NS_MIXED;
         invokeAndVerify("//child", 'i', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), result);
     }
 
     @Test
     public void testExtractWithNullNamespaceMap() throws Exception {
         nsmap = null;
-        String[] result = RESULTS_CHILD_NO_NS_MIXED_JAVA8;
-        if (isJava7OrLower()) {
-            result = RESULTS_CHILD_NO_NS_MIXED;
-        }
+        String[] result = RESULTS_CHILD_NO_NS_MIXED;
         invokeAndVerify("//child", 'i', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), result);
     }
 
@@ -468,7 +423,4 @@ public class XMLTokenExpressionIteratorTest extends Assert {
         }
     }
 
-    private boolean isJava7OrLower() {
-        return getJavaMajorVersion() <= 7;
-    }
 }
diff --git a/core/camel-core/src/test/java/org/apache/camel/util/XmlLineNumberParserTest.java b/core/camel-jaxp/src/test/java/org/apache/camel/util/xml/XmlLineNumberParserTest.java
similarity index 99%
rename from core/camel-core/src/test/java/org/apache/camel/util/XmlLineNumberParserTest.java
rename to core/camel-jaxp/src/test/java/org/apache/camel/util/xml/XmlLineNumberParserTest.java
index 387e00b..47ba43d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/XmlLineNumberParserTest.java
+++ b/core/camel-jaxp/src/test/java/org/apache/camel/util/xml/XmlLineNumberParserTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.util;
+package org.apache.camel.util.xml;
 
 import java.io.InputStream;
 import java.nio.file.Files;
diff --git a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index 37e1577..22fa65e 100644
--- a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -53,7 +53,7 @@ import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.spi.ManagementStrategy;
-import org.apache.camel.util.XmlLineNumberParser;
+import org.apache.camel.util.xml.XmlLineNumberParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
index 6962165..34f4f4d 100644
--- a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
+++ b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
@@ -29,7 +29,7 @@ import org.junit.Test;
 
 public class ManagedNonManagedServiceTest extends ManagementTestSupport {
 
-    private static final int SERVICES = 11;
+    private static final int SERVICES = 10;
 
     @Test
     public void testService() throws Exception {
diff --git a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
index 6c7cd92..411749e 100644
--- a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
+++ b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
@@ -28,7 +28,7 @@ import org.junit.Test;
 
 public class ManagedProducerRouteAddRemoveRegisterAlwaysTest extends ManagementTestSupport {
 
-    private int services = 11;
+    private int services = 10;
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
diff --git a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
index fff6e2d..702ff39 100644
--- a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
+++ b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
  */
 public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
     
-    private static final int SERVICES = 11;
+    private static final int SERVICES = 10;
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
index 1f841ae..b76ad9f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
@@ -168,7 +168,7 @@ public class ExpressionBuilder {
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
                 String name = simpleExpression(headerName).evaluate(exchange, String.class);
-                Object header = exchange.getIn().getHeader(name, type);
+                T header = exchange.getIn().getHeader(name, type);
                 if (header == null) {
                     // fall back on a property
                     header = exchange.getProperty(name, type);
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/Namespaces.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/Namespaces.java
similarity index 70%
rename from core/camel-support/src/main/java/org/apache/camel/support/builder/xml/Namespaces.java
rename to core/camel-support/src/main/java/org/apache/camel/support/builder/Namespaces.java
index d924daa..f0d9ae5 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/xml/Namespaces.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/Namespaces.java
@@ -14,16 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.support.builder.xml;
+package org.apache.camel.support.builder;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
 import org.apache.camel.spi.NamespaceAware;
 import org.apache.camel.util.ObjectHelper;
 
@@ -42,12 +37,9 @@ public class Namespaces {
     private Map<String, String> namespaces = new HashMap<>();
 
     /**
-     * Creates a namespaces object from the given XML element
-     *
-     * @param element the XML element representing the XPath namespace context
+     * Creates an empty namespaces object
      */
-    public Namespaces(Element element) {
-        add(element);
+    public Namespaces() {
     }
 
     /**
@@ -70,26 +62,6 @@ public class Namespaces {
         return this;
     }
 
-    public Namespaces add(Element element) {
-        // let's set the parent first in case we overload a prefix here
-        Node parentNode = element.getParentNode();
-        if (parentNode instanceof org.w3c.dom.Element) {
-            add((Element) parentNode);
-        }
-        NamedNodeMap attributes = element.getAttributes();
-        int size = attributes.getLength();
-        for (int i = 0; i < size; i++) {
-            Attr node = (Attr) attributes.item(i);
-            String name = node.getName();
-            if (name.startsWith("xmlns:")) {
-                String prefix = name.substring("xmlns:".length());
-                String uri = node.getValue();
-                add(prefix, uri);
-            }
-        }
-        return this;
-    }
-
     public Map<String, String> getNamespaces() {
         return namespaces;
     }
diff --git a/core/pom.xml b/core/pom.xml
index 539c51c..08b85a7 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -43,6 +43,7 @@
         <module>camel-management-api</module>
         <module>camel-management-impl</module>
         <module>camel-base</module>
+        <module>camel-jaxp</module>
         <module>camel-core</module>
         <module>camel-core-osgi</module>
         <module>camel-core-xml</module>
diff --git a/parent/pom.xml b/parent/pom.xml
index ad20a2f..19d62a9 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -809,6 +809,11 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel</groupId>
+                <artifactId>camel-jaxp</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel</groupId>
                 <artifactId>camel-support</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -3041,6 +3046,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-jbpm-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageAutoConfiguration.java
deleted file mode 100644
index 8936f9f..0000000
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageAutoConfiguration.java
+++ /dev/null
@@ -1,117 +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.language.xpath.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.CamelContextAware;
-import org.apache.camel.language.xpath.XPathLanguage;
-import org.apache.camel.spi.HasId;
-import org.apache.camel.spi.LanguageCustomizer;
-import org.apache.camel.spring.boot.CamelAutoConfiguration;
-import org.apache.camel.spring.boot.LanguageConfigurationProperties;
-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.beans.factory.config.ConfigurableBeanFactory;
-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.Scope;
-
-/**
- * Generated by camel-package-maven-plugin - do not edit this file!
- */
-@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-@Configuration
-@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
-        XPathLanguageAutoConfiguration.GroupConditions.class})
-@AutoConfigureAfter(CamelAutoConfiguration.class)
-@EnableConfigurationProperties({LanguageConfigurationProperties.class,
-        XPathLanguageConfiguration.class})
-public class XPathLanguageAutoConfiguration {
-
-    private static final Logger LOGGER = LoggerFactory
-            .getLogger(XPathLanguageAutoConfiguration.class);
-    @Autowired
-    private ApplicationContext applicationContext;
-    @Autowired
-    private CamelContext camelContext;
-    @Autowired
-    private XPathLanguageConfiguration configuration;
-    @Autowired(required = false)
-    private List<LanguageCustomizer<XPathLanguage>> customizers;
-
-    static class GroupConditions extends GroupCondition {
-        public GroupConditions() {
-            super("camel.component", "camel.component.xpath");
-        }
-    }
-
-    @Bean(name = "xpath-language")
-    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-    @ConditionalOnMissingBean(XPathLanguage.class)
-    public XPathLanguage configureXPathLanguage() throws Exception {
-        XPathLanguage language = new XPathLanguage();
-        if (CamelContextAware.class.isAssignableFrom(XPathLanguage.class)) {
-            CamelContextAware contextAware = CamelContextAware.class
-                    .cast(language);
-            if (contextAware != null) {
-                contextAware.setCamelContext(camelContext);
-            }
-        }
-        Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
-        CamelPropertiesHelper.setCamelProperties(camelContext, language,
-                parameters, false);
-        if (ObjectHelper.isNotEmpty(customizers)) {
-            for (LanguageCustomizer<XPathLanguage> customizer : customizers) {
-                boolean useCustomizer = (customizer instanceof HasId)
-                        ? HierarchicalPropertiesEvaluator.evaluate(
-                                applicationContext.getEnvironment(),
-                                "camel.language.customizer",
-                                "camel.language.xpath.customizer",
-                                ((HasId) customizer).getId())
-                        : HierarchicalPropertiesEvaluator.evaluate(
-                                applicationContext.getEnvironment(),
-                                "camel.language.customizer",
-                                "camel.language.xpath.customizer");
-                if (useCustomizer) {
-                    LOGGER.debug("Configure language {}, with customizer {}",
-                            language, customizer);
-                    customizer.customize(language);
-                }
-            }
-        }
-        return language;
-    }
-}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageConfiguration.java
deleted file mode 100644
index 3e839da..0000000
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/xpath/springboot/XPathLanguageConfiguration.java
+++ /dev/null
@@ -1,132 +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.language.xpath.springboot;
-
-import javax.annotation.Generated;
-import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * To use XPath (XML) in Camel expressions or predicates.
- * 
- * Generated by camel-package-maven-plugin - do not edit this file!
- */
-@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-@ConfigurationProperties(prefix = "camel.language.xpath")
-public class XPathLanguageConfiguration
-        extends
-            LanguageConfigurationPropertiesCommon {
-
-    /**
-     * Whether to enable auto configuration of the xpath language. This is
-     * enabled by default.
-     */
-    private Boolean enabled;
-    /**
-     * Name of class for document type The default value is org.w3c.dom.Document
-     */
-    private String documentType;
-    /**
-     * Whether to use Saxon.
-     */
-    private Boolean saxon = false;
-    /**
-     * References to a custom XPathFactory to lookup in the registry
-     */
-    private String factoryRef;
-    /**
-     * The XPath object model to use
-     */
-    private String objectModel;
-    /**
-     * Whether to log namespaces which can assist during trouble shooting
-     */
-    private Boolean logNamespaces = false;
-    /**
-     * Whether to enable thread-safety for the returned result of the xpath
-     * expression. This applies to when using NODESET as the result type, and
-     * the returned set has multiple elements. In this situation there can be
-     * thread-safety issues if you process the NODESET concurrently such as from
-     * a Camel Splitter EIP in parallel processing mode. This option prevents
-     * concurrency issues by doing defensive copies of the nodes. It is
-     * recommended to turn this option on if you are using camel-saxon or Saxon
-     * in your application. Saxon has thread-safety issues which can be
-     * prevented by turning this option on.
-     */
-    private Boolean threadSafety = false;
-    /**
-     * Whether to trim the value to remove leading and trailing whitespaces and
-     * line breaks
-     */
-    private Boolean trim = true;
-
-    public String getDocumentType() {
-        return documentType;
-    }
-
-    public void setDocumentType(String documentType) {
-        this.documentType = documentType;
-    }
-
-    public Boolean getSaxon() {
-        return saxon;
-    }
-
-    public void setSaxon(Boolean saxon) {
-        this.saxon = saxon;
-    }
-
-    public String getFactoryRef() {
-        return factoryRef;
-    }
-
-    public void setFactoryRef(String factoryRef) {
-        this.factoryRef = factoryRef;
-    }
-
-    public String getObjectModel() {
-        return objectModel;
-    }
-
-    public void setObjectModel(String objectModel) {
-        this.objectModel = objectModel;
-    }
-
-    public Boolean getLogNamespaces() {
-        return logNamespaces;
-    }
-
-    public void setLogNamespaces(Boolean logNamespaces) {
-        this.logNamespaces = logNamespaces;
-    }
-
-    public Boolean getThreadSafety() {
-        return threadSafety;
-    }
-
-    public void setThreadSafety(Boolean threadSafety) {
-        this.threadSafety = threadSafety;
-    }
-
-    public Boolean getTrim() {
-        return trim;
-    }
-
-    public void setTrim(Boolean trim) {
-        this.trim = trim;
-    }
-}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
index e39e0fb..c1c2bbc 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
@@ -22,6 +22,4 @@ org.apache.camel.language.ref.springboot.RefLanguageAutoConfiguration,\
 org.apache.camel.language.simple.springboot.FileLanguageAutoConfiguration,\
 org.apache.camel.language.simple.springboot.SimpleLanguageAutoConfiguration,\
 org.apache.camel.language.tokenizer.springboot.TokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.XMLTokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.xpath.springboot.XPathLanguageAutoConfiguration,\
 org.apache.camel.model.rest.springboot.RestConfigurationDefinitionAutoConfiguration
diff --git a/platforms/spring-boot/components-starter/camel-jaxp-starter/pom.xml b/platforms/spring-boot/components-starter/camel-jaxp-starter/pom.xml
new file mode 100644
index 0000000..6f3ba78
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components-starter</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>camel-jaxp-starter</artifactId>
+  <packaging>jar</packaging>
+  <name>Spring-Boot Starter :: Camel :: JAXP</name>
+  <description>Spring-Boot Starter for Camel JAXP Support</description>
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-jaxp</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <!--START OF GENERATED CODE-->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring-boot-starter</artifactId>
+    </dependency>
+    <!--END OF GENERATED CODE-->
+  </dependencies>
+</project>
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
similarity index 97%
rename from platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
rename to platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
index de429d0..86fd4c9 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageAutoConfiguration.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.language.tokenizer.springboot;
+package org.apache.camel.language.xtokenizer.springboot;
 
 import java.util.HashMap;
 import java.util.List;
@@ -22,7 +22,7 @@ import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
-import org.apache.camel.language.tokenizer.XMLTokenizeLanguage;
+import org.apache.camel.language.xtokenizer.XMLTokenizeLanguage;
 import org.apache.camel.spi.HasId;
 import org.apache.camel.spi.LanguageCustomizer;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageConfiguration.java
similarity index 97%
rename from platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageConfiguration.java
rename to platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageConfiguration.java
index 6910019..c3a5d95 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/XMLTokenizeLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/java/org/apache/camel/language/xtokenizer/springboot/XMLTokenizeLanguageConfiguration.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.language.tokenizer.springboot;
+package org.apache.camel.language.xtokenizer.springboot;
 
 import javax.annotation.Generated;
 import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
diff --git a/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/LICENSE.txt b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-jaxp-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-jaxp-starter/src/main/resources/META-INF/NOTICE.txt b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-jaxp-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-jaxp-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
new file mode 100644
index 0000000..71d8f2c
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -0,0 +1,10 @@
+{
+  "properties": [
+    {
+      "defaultValue": true,
+      "name": "camel.language.xtokenize.enabled",
+      "description": "Enable xtokenize language",
+      "type": "java.lang.Boolean"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.factories
similarity index 55%
copy from platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
copy to platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.factories
index e39e0fb..0d76db2 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.factories
@@ -14,14 +14,6 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
+
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.camel.language.constant.springboot.ConstantLanguageAutoConfiguration,\
-org.apache.camel.language.header.springboot.HeaderLanguageAutoConfiguration,\
-org.apache.camel.language.property.springboot.ExchangePropertyLanguageAutoConfiguration,\
-org.apache.camel.language.ref.springboot.RefLanguageAutoConfiguration,\
-org.apache.camel.language.simple.springboot.FileLanguageAutoConfiguration,\
-org.apache.camel.language.simple.springboot.SimpleLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.TokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.XMLTokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.xpath.springboot.XPathLanguageAutoConfiguration,\
-org.apache.camel.model.rest.springboot.RestConfigurationDefinitionAutoConfiguration
+org.apache.camel.language.xtokenizer.springboot.XMLTokenizeLanguageAutoConfiguration
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.provides
similarity index 52%
copy from platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
copy to platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.provides
index e39e0fb..91141f6 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/resources/META-INF/spring.factories
+++ b/platforms/spring-boot/components-starter/camel-jaxp-starter/src/main/resources/META-INF/spring.provides
@@ -14,14 +14,4 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.camel.language.constant.springboot.ConstantLanguageAutoConfiguration,\
-org.apache.camel.language.header.springboot.HeaderLanguageAutoConfiguration,\
-org.apache.camel.language.property.springboot.ExchangePropertyLanguageAutoConfiguration,\
-org.apache.camel.language.ref.springboot.RefLanguageAutoConfiguration,\
-org.apache.camel.language.simple.springboot.FileLanguageAutoConfiguration,\
-org.apache.camel.language.simple.springboot.SimpleLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.TokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.tokenizer.springboot.XMLTokenizeLanguageAutoConfiguration,\
-org.apache.camel.language.xpath.springboot.XPathLanguageAutoConfiguration,\
-org.apache.camel.model.rest.springboot.RestConfigurationDefinitionAutoConfiguration
+provides: camel-jaxp
diff --git a/platforms/spring-boot/components-starter/pom.xml b/platforms/spring-boot/components-starter/pom.xml
index 7d94c5c..a44630a 100644
--- a/platforms/spring-boot/components-starter/pom.xml
+++ b/platforms/spring-boot/components-starter/pom.xml
@@ -227,6 +227,7 @@
     <module>camel-jacksonxml-starter</module>
     <module>camel-jasypt-starter</module>
     <module>camel-jaxb-starter</module>
+    <module>camel-jaxp-starter</module>
     <module>camel-jbpm-starter</module>
     <module>camel-jcache-starter</module>
     <module>camel-jclouds-starter</module>
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index 06ef5da..b9107c7 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -1604,6 +1604,16 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jaxp-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-jbpm</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RssToHttpIssueTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RssToHttpIssueTest.java
index abc88d5..5cabccf 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RssToHttpIssueTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RssToHttpIssueTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.itest.issues;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.builder.xml.Namespaces;
+import org.apache.camel.support.builder.Namespaces;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Ignore;
 import org.junit.Test;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
index 0338693..c53b7e0 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
@@ -52,7 +52,8 @@ public class TypeConverterProcessor extends AbstractCamelAnnotationProcessor {
             }
         }
         if (!converterClasses.isEmpty()
-                && !converterClasses.containsKey("org.apache.camel.converter.IOConverter")) {
+                && !converterClasses.containsKey("org.apache.camel.converter.IOConverter")
+                && !converterClasses.containsKey("org.apache.camel.converter.jaxp.DomConverter")) {
             Filer filer = processingEnv.getFiler();
             FileObject resource = filer.createResource(StandardLocation.CLASS_OUTPUT,
                     "", "META-INF/services/org/apache/camel/TypeConverter",
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
index 1434b80..c4cd7b3 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
@@ -146,6 +146,9 @@ public class PackageLanguageMojo extends AbstractGeneratorMojo {
                         } else if ("bean".equals(name)) {
                             // special for camel-bean as we need to build this before camel-core so we load the schema from a static file
                             is = new FileInputStream(new File(buildDir, "../src/main/schema/method.json"));
+                        } else if ("xtokenize".equals(name)) {
+                            // special for camel-jaxp as we need to build this before camel-core so we load the schema from a static file
+                            is = new FileInputStream(new File(buildDir, "../src/main/schema/xtokenize.json"));
                         } else {
                             is = new FileInputStream(new File(core, "target/classes/org/apache/camel/model/language/" + modelName + ".json"));
                         }
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
index b001827..2a5b36b 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
@@ -525,6 +525,10 @@ public class SpringBootStarterMojo extends AbstractMojo {
             return true;
         }
 
+        if (baseDir.getName().equals("camel-jaxp")) {
+            return true;
+        }
+
         getLog().debug("Component directory mismatch");
         return false;
     }


[camel] 01/03: [CAMEL-13511] Use AbstractCamelContext instead of AbstractModelCamelContext

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 6ca9d79ee8da5d7e73c85647cf83c6ac60ff43fd
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue May 14 10:51:30 2019 +0200

    [CAMEL-13511] Use AbstractCamelContext instead of AbstractModelCamelContext
---
 core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
index ceee483..7b506d5 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -29,6 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.camel.CamelContext;
 import org.apache.camel.FailedToStartRouteException;
 import org.apache.camel.Route;
+import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.Model;
@@ -287,7 +288,7 @@ public class DefaultModel implements Model {
 
         // indicate we are staring the route using this thread so
         // we are able to query this if needed
-        AbstractModelCamelContext mcc = camelContext.adapt(AbstractModelCamelContext.class);
+        AbstractCamelContext mcc = camelContext.adapt(AbstractCamelContext.class);
         mcc.setStartingRoutes(true);
         try {