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/09/05 15:39:38 UTC

[camel-quarkus] 03/04: Make xml and jaxb disabled by default and opt-in when depending on camel

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-quarkus.git

commit 00cd326bd076a68b2be64d4bee92d4bd87335850
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu Sep 5 17:27:11 2019 +0200

    Make xml and jaxb disabled by default and opt-in when depending on camel
---
 .../quarkus/core/deployment/BuildProcessor.java    |   4 +
 .../quarkus/core/deployment/XmlProcessor.java      |  48 -----
 .../camel/quarkus/core/runtime/CamelConfig.java    |  22 ---
 ..._org_apache_camel_reifier_ValidateReifier.java} |  29 ++--
 .../core/runtime/support/FastCamelContext.java     |  26 ++-
 .../core/runtime/support/FastCamelRuntime.java     |  12 --
 .../quarkus/core/runtime/support/FastModel.java    |   6 +
 .../camel/reifier/rest/RestBindingReifier.java     | 193 +++++++++++++++++++++
 .../validation/PredicateValidatingProcessor.java   |  81 +++++++++
 .../validation/PredicateValidationException.java   |  50 ++++++
 .../xml/deployment/ModelFactoryProcessor.java}     |  35 ++--
 .../component/xml/deployment/XmlProcessor.java     |  23 ++-
 extensions/xml-common/runtime/pom.xml              |   5 +
 .../component/xml/runtime/SupportRecorder.java}    |  27 +--
 ...mel_quarkus_core_runtime_support_FastModel.java |  45 +++++
 ...ache_camel_reifier_rest_RestBindingReifier.java |  68 ++++++++
 .../aws/src/main/resources/application.properties  |   2 -
 .../bean/src/main/resources/application.properties |   2 -
 .../src/main/resources/application.properties      |   2 -
 .../src/main/resources/application.properties      |   2 -
 .../test/src/main/resources/application.properties |   2 -
 .../jdbc/src/main/resources/application.properties |   2 -
 .../src/main/resources/application.properties      |   2 -
 .../src/main/resources/application.properties      |   2 -
 .../src/main/resources/application.properties      |   2 -
 .../src/main/resources/application.properties      |   2 -
 poms/bom/pom.xml                                   |   6 +
 27 files changed, 538 insertions(+), 162 deletions(-)

diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
index b0c3bed..305cd66 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
@@ -41,6 +41,10 @@ import io.quarkus.deployment.annotations.Record;
 import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
+import io.quarkus.deployment.builditem.substrate.ServiceProviderBuildItem;
+import io.quarkus.deployment.builditem.substrate.SubstrateSystemPropertyBuildItem;
+import io.quarkus.jaxb.deployment.JaxbEnabledBuildItem;
+import io.quarkus.jaxb.deployment.JaxbFileRootBuildItem;
 import io.quarkus.runtime.RuntimeValue;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/XmlProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/XmlProcessor.java
deleted file mode 100644
index df6dd15..0000000
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/XmlProcessor.java
+++ /dev/null
@@ -1,48 +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.quarkus.core.deployment;
-
-import io.quarkus.deployment.annotations.BuildProducer;
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.substrate.ReflectiveClassBuildItem;
-import io.quarkus.jaxb.deployment.JaxbEnabledBuildItem;
-import io.quarkus.jaxb.deployment.JaxbFileRootBuildItem;
-import org.apache.camel.quarkus.core.runtime.support.Flags;
-
-class XmlProcessor {
-    @BuildStep
-    JaxbFileRootBuildItem fileRoot() {
-        return new JaxbFileRootBuildItem(CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY);
-    }
-
-    @BuildStep(onlyIfNot = Flags.JaxbDisabled.class)
-    JaxbEnabledBuildItem handleJaxbSupport() {
-        return new JaxbEnabledBuildItem();
-    }
-
-    @BuildStep(onlyIfNot = Flags.JaxbDisabled.class)
-    void registerReflectiveClasses(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
-        reflectiveClass.produce(
-            new ReflectiveClassBuildItem(
-                false,
-                false,
-                "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl",
-                "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl",
-                "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl")
-        );
-    }
-}
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelConfig.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelConfig.java
index a5bb9b4..3d4d65c 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelConfig.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelConfig.java
@@ -21,7 +21,6 @@ import java.util.List;
 import io.quarkus.runtime.annotations.ConfigItem;
 import io.quarkus.runtime.annotations.ConfigPhase;
 import io.quarkus.runtime.annotations.ConfigRoot;
-import org.apache.camel.quarkus.core.runtime.support.Flags;
 
 public class CamelConfig {
 
@@ -34,27 +33,6 @@ public class CamelConfig {
         @ConfigItem
         public List<String> routesUris;
 
-        /**
-         * Camel jaxb support is enabled by default, but in order to trim
-         * down the size of applications, it is possible to disable jaxb support
-         * at runtime. This is useful when routes at loaded at build time and
-         * thus the camel route model is not used at runtime anymore.
-         *
-         * @see Flags.JaxbDisabled
-         */
-        @ConfigItem(defaultValue = "false")
-        public boolean disableJaxb;
-
-        /**
-         * Disable XML support in various parts of Camel.
-         * Because xml parsing using xerces/xalan libraries can consume
-         * a lot of code space in the native binary (and a lot of cpu resources
-         * when building), this allows to disable both libraries.
-         *
-         * @see Flags.XmlDisabled
-         */
-        @ConfigItem(defaultValue = "false")
-        public boolean disableXml;
     }
 
     @ConfigRoot(name = "camel", phase = ConfigPhase.RUN_TIME)
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_ValidateReifier.java
similarity index 51%
copy from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java
copy to extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_ValidateReifier.java
index 69247e2..b52923b 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_ValidateReifier.java
@@ -14,28 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.core.runtime.support;
+package org.apache.camel.quarkus.core.runtime.graal;
 
-import java.util.function.BooleanSupplier;
+import com.oracle.svm.core.annotate.Substitute;
+import com.oracle.svm.core.annotate.TargetClass;
+import org.apache.camel.spi.RouteContext;
+import org.apache.camel.support.processor.validation.PredicateValidatingProcessor;
 
-import org.eclipse.microprofile.config.ConfigProvider;
+@TargetClass(className = "org.apache.camel.reifier.ValidateReifier")
+final class Target_org_apache_camel_reifier_ValidateReifier {
 
-public final class Flags {
-    private Flags() {
-    }
-
-    public static final class JaxbDisabled implements BooleanSupplier {
-        @Override
-        public boolean getAsBoolean() {
-            return ConfigProvider.getConfig().getOptionalValue("quarkus.camel.disable-jaxb", Boolean.class).orElse(Boolean.FALSE);
-        }
-    }
-
-    public static final class XmlDisabled implements BooleanSupplier {
-        @Override
-        public boolean getAsBoolean() {
-            return ConfigProvider.getConfig().getOptionalValue("quarkus.camel.disable-xml", Boolean.class).orElse(Boolean.FALSE);
-        }
+    @Substitute
+    public PredicateValidatingProcessor createProcessor(RouteContext routeContext) throws Exception {
+        throw new UnsupportedOperationException();
     }
 
 }
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastCamelContext.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastCamelContext.java
index 8bc1476..6659792 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastCamelContext.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastCamelContext.java
@@ -19,8 +19,12 @@ package org.apache.camel.quarkus.core.runtime.support;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 import java.util.concurrent.ExecutorService;
 
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
@@ -29,6 +33,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.PollingConsumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultExecutorServiceManager;
 import org.apache.camel.impl.DefaultModelJAXBContextFactory;
@@ -103,6 +108,7 @@ import org.apache.camel.spi.UnitOfWorkFactory;
 import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.spi.ValidatorRegistry;
 import org.apache.camel.support.PropertyBindingSupport;
+import org.graalvm.nativeimage.ImageInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -212,7 +218,25 @@ public class FastCamelContext extends AbstractCamelContext {
 
     @Override
     protected ModelJAXBContextFactory createModelJAXBContextFactory() {
-        return new DefaultModelJAXBContextFactory();
+        Set<ModelJAXBContextFactory> cfs = getRegistry().findByType(ModelJAXBContextFactory.class);
+        if (cfs.size() == 1) {
+            ModelJAXBContextFactory cf = cfs.iterator().next();
+            // The creation of the JAXB context is very time consuming, so always prepare it
+            // when running in native mode, but lazy create it in java mode so that we don't
+            // waste time if using java routes
+            if (ImageInfo.inImageBuildtimeCode()) {
+                try {
+                    cf.newJAXBContext();
+                } catch (JAXBException e) {
+                    throw RuntimeCamelException.wrapRuntimeCamelException(e);
+                }
+            }
+            return cf;
+        } else {
+            return () -> {
+                throw new UnsupportedOperationException();
+            };
+        }
     }
 
     @Override
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastCamelRuntime.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastCamelRuntime.java
index 0858de4..c5655b0 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastCamelRuntime.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastCamelRuntime.java
@@ -84,18 +84,6 @@ public class FastCamelRuntime implements CamelRuntime {
             context.getTypeConverterRegistry().setInjector(context.getInjector());
 
             fireEvent(InitializingEvent.class, new InitializingEvent());
-            if (buildTimeConfig.disableJaxb) {
-                context.adapt(ExtendedCamelContext.class).setModelJAXBContextFactory(() -> {
-                    throw new UnsupportedOperationException();
-                });
-            } else {
-                // The creation of the JAXB context is very time consuming, so always prepare it
-                // when running in native mode, but lazy create it in java mode so that we don't
-                // waste time if using java routes
-                if (ImageInfo.inImageBuildtimeCode()) {
-                    context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory().newJAXBContext();
-                }
-            }
 
             context.init();
 
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastModel.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastModel.java
index ae03794..1270c37 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastModel.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/FastModel.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.quarkus.core.runtime.support;
 
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -46,6 +47,11 @@ public class FastModel extends DefaultModel {
         super(camelContext);
     }
 
+    @Override
+    public void addRouteDefinitions(InputStream is) throws Exception {
+        throw new UnsupportedOperationException();
+    }
+
     protected void start(RouteDefinition routeDefinition) throws Exception {
         // indicate we are staring the route using this thread so
         // we are able to query this if needed
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java b/extensions/core/runtime/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
new file mode 100644
index 0000000..e88320e
--- /dev/null
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
@@ -0,0 +1,193 @@
+/*
+ * 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.reifier.rest;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.JAXBContext;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.model.rest.RestBindingDefinition;
+import org.apache.camel.processor.RestBindingAdvice;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.RouteContext;
+import org.apache.camel.support.PropertyBindingSupport;
+
+public class RestBindingReifier {
+
+    private final RestBindingDefinition definition;
+
+    public RestBindingReifier(RestBindingDefinition definition) {
+        this.definition = definition;
+    }
+
+    public RestBindingAdvice createRestBindingAdvice(RouteContext routeContext) throws Exception {
+
+        CamelContext context = routeContext.getCamelContext();
+        RestConfiguration config = context.getRestConfiguration(definition.getComponent(), true);
+
+        // these options can be overridden per rest verb
+        String mode = config.getBindingMode().name();
+        if (definition.getBindingMode() != null) {
+            mode = definition.getBindingMode().name();
+        }
+        boolean cors = config.isEnableCORS();
+        if (definition.getEnableCORS() != null) {
+            cors = definition.getEnableCORS();
+        }
+        boolean skip = config.isSkipBindingOnErrorCode();
+        if (definition.getSkipBindingOnErrorCode() != null) {
+            skip = definition.getSkipBindingOnErrorCode();
+        }
+        boolean validation = config.isClientRequestValidation();
+        if (definition.getClientRequestValidation() != null) {
+            validation = definition.getClientRequestValidation();
+        }
+
+        // cors headers
+        Map<String, String> corsHeaders = config.getCorsHeaders();
+
+        if (mode == null || "off".equals(mode)) {
+            // binding mode is off, so create a off mode binding processor
+            return new RestBindingAdvice(context, null, null, null, null, definition.getConsumes(), definition.getProduces(), mode, skip, validation, cors, corsHeaders,
+                                         definition.getDefaultValues(), definition.getRequiredBody() != null ? definition.getRequiredBody() : false,
+                                         definition.getRequiredQueryParameters(), definition.getRequiredHeaders());
+        }
+
+        // setup json data format
+        DataFormat json = null;
+        DataFormat outJson = null;
+        if (mode.contains("json") || "auto".equals(mode)) {
+            String name = config.getJsonDataFormat();
+            if (name != null) {
+                // must only be a name, not refer to an existing instance
+                Object instance = context.getRegistry().lookupByName(name);
+                if (instance != null) {
+                    throw new IllegalArgumentException("JsonDataFormat name: " + name + " must not be an existing bean instance from the registry");
+                }
+            } else {
+                name = "json-jackson";
+            }
+            // this will create a new instance as the name was not already
+            // pre-created
+            json = context.resolveDataFormat(name);
+            outJson = context.resolveDataFormat(name);
+
+            if (json != null) {
+                setupJson(context, config, definition.getType(), definition.getOutType(), json, outJson);
+            }
+        }
+
+        // setup xml data format
+        DataFormat jaxb = null;
+        DataFormat outJaxb = null;
+        if (mode.contains("xml") || "auto".equals(mode)) {
+            String name = config.getXmlDataFormat();
+            if (name != null) {
+                // must only be a name, not refer to an existing instance
+                Object instance = context.getRegistry().lookupByName(name);
+                if (instance != null) {
+                    throw new IllegalArgumentException("XmlDataFormat name: " + name + " must not be an existing bean instance from the registry");
+                }
+            } else {
+                name = "jaxb";
+            }
+            // this will create a new instance as the name was not already
+            // pre-created
+            jaxb = context.resolveDataFormat(name);
+            outJaxb = context.resolveDataFormat(name);
+
+            // is xml binding required?
+            if (mode.contains("xml") && jaxb == null) {
+                throw new IllegalArgumentException("XML DataFormat " + name + " not found.");
+            }
+
+            if (jaxb != null) {
+                setupJaxb(context, config, definition.getType(), definition.getOutType(), jaxb, outJaxb);
+            }
+        }
+
+        return new RestBindingAdvice(context, json, jaxb, outJson, outJaxb, definition.getConsumes(), definition.getProduces(), mode, skip, validation, cors, corsHeaders,
+                                     definition.getDefaultValues(), definition.getRequiredBody() != null ? definition.getRequiredBody() : false,
+                                     definition.getRequiredQueryParameters(), definition.getRequiredHeaders());
+    }
+
+    protected void setupJson(CamelContext context, RestConfiguration config, String type, String outType, DataFormat json, DataFormat outJson) throws Exception {
+        Class<?> clazz = null;
+        if (type != null) {
+            String typeName = type.endsWith("[]") ? type.substring(0, type.length() - 2) : type;
+            clazz = context.getClassResolver().resolveMandatoryClass(typeName);
+        }
+        if (clazz != null) {
+            context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setProperty(context, json, "unmarshalType", clazz);
+            context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setProperty(context, json, "useList", type.endsWith("[]"));
+        }
+        setAdditionalConfiguration(config, context, json, "json.in.");
+
+        Class<?> outClazz = null;
+        if (outType != null) {
+            String typeName = outType.endsWith("[]") ? outType.substring(0, outType.length() - 2) : outType;
+            outClazz = context.getClassResolver().resolveMandatoryClass(typeName);
+        }
+        if (outClazz != null) {
+            context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setProperty(context, outJson, "unmarshalType", outClazz);
+            context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setProperty(context, outJson, "useList", outType.endsWith("[]"));
+        }
+        setAdditionalConfiguration(config, context, outJson, "json.out.");
+    }
+
+    protected void setupJaxb(CamelContext context, RestConfiguration config, String type, String outType, DataFormat jaxb, DataFormat outJaxb) throws Exception {
+        throw new UnsupportedOperationException("Add a dependency to camel-quarkus-xml-common to add xml support");
+    }
+
+    private void setAdditionalConfiguration(RestConfiguration config, CamelContext context, DataFormat dataFormat, String prefix) throws Exception {
+        if (config.getDataFormatProperties() != null && !config.getDataFormatProperties().isEmpty()) {
+            // must use a copy as otherwise the options gets removed during
+            // introspection setProperties
+            Map<String, Object> copy = new HashMap<>();
+
+            // filter keys on prefix
+            // - either its a known prefix and must match the prefix parameter
+            // - or its a common configuration that we should always use
+            for (Map.Entry<String, Object> entry : config.getDataFormatProperties().entrySet()) {
+                String key = entry.getKey();
+                String copyKey;
+                boolean known = isKeyKnownPrefix(key);
+                if (known) {
+                    // remove the prefix from the key to use
+                    copyKey = key.substring(prefix.length());
+                } else {
+                    // use the key as is
+                    copyKey = key;
+                }
+                if (!known || key.startsWith(prefix)) {
+                    copy.put(copyKey, entry.getValue());
+                }
+            }
+
+            PropertyBindingSupport.build().bind(context, dataFormat, copy);
+        }
+    }
+
+    private boolean isKeyKnownPrefix(String key) {
+        return key.startsWith("json.in.") || key.startsWith("json.out.") || key.startsWith("xml.in.") || key.startsWith("xml.out.");
+    }
+
+}
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java b/extensions/core/runtime/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java
new file mode 100644
index 0000000..72870fb
--- /dev/null
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/support/processor/validation/PredicateValidatingProcessor.java
@@ -0,0 +1,81 @@
+/*
+ * 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.support.processor.validation;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Predicate;
+import org.apache.camel.Processor;
+import org.apache.camel.Traceable;
+import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A processor which validates the content of the inbound message body against a {@link Predicate}.
+ *
+ * TODO: QUARKUS: this class is a copy of the original camel one because it resides in camel-jaxp
+ *   but that should not be the case
+ */
+public class PredicateValidatingProcessor extends ServiceSupport implements Processor, Traceable {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(org.apache.camel.support.processor.validation.PredicateValidatingProcessor.class);
+
+    private final Predicate predicate;
+    
+    public PredicateValidatingProcessor(Predicate predicate) {
+        ObjectHelper.notNull(predicate, "predicate", this);
+        this.predicate = predicate;
+    }
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        boolean matches = predicate.matches(exchange);
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Validation {} for {} with Predicate[{}]", matches ? "succeed" : "failed", exchange, predicate);
+        }
+
+        if (!matches) {
+            throw new PredicateValidationException(exchange, predicate);
+        }
+    }
+
+    public Predicate getPredicate() {
+        return predicate;
+    }
+
+    @Override
+    public String toString() {
+        return "validate(" + predicate + ")";
+    }
+
+    @Override
+    public String getTraceLabel() {
+        return "validate[" + predicate + "]";
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        // noop
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        // noop
+    }
+}
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java b/extensions/core/runtime/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java
new file mode 100644
index 0000000..327770d
--- /dev/null
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/support/processor/validation/PredicateValidationException.java
@@ -0,0 +1,50 @@
+/*
+ * 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.support.processor.validation;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Predicate;
+import org.apache.camel.ValidationException;
+
+/**
+ * A predicate validation exception occurred
+ *
+ * TODO: QUARKUS: this class is a copy of the original camel one because it resides in camel-jaxp
+ *   but that should not be the case
+ */
+public class PredicateValidationException extends ValidationException {
+
+    private static final long serialVersionUID = 5767438583860347105L;
+
+    private final Predicate predicate;
+
+    public PredicateValidationException(Exchange exchange, Predicate predicate) {
+        super(exchange, buildMessage(predicate, exchange));
+        this.predicate = predicate;
+    }
+
+    protected static String buildMessage(Predicate predicate, Exchange exchange) {
+        StringBuilder builder = new StringBuilder("Validation failed for Predicate[");
+        builder.append(predicate.toString());
+        builder.append("]");
+        return builder.toString();
+    }
+
+    public Predicate getPredicate() {
+        return predicate;
+    }
+}
\ No newline at end of file
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java b/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/ModelFactoryProcessor.java
similarity index 51%
copy from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java
copy to extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/ModelFactoryProcessor.java
index 69247e2..8153675 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java
+++ b/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/ModelFactoryProcessor.java
@@ -14,28 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.core.runtime.support;
+package org.apache.camel.quarkus.component.xml.deployment;
 
-import java.util.function.BooleanSupplier;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
+import org.apache.camel.quarkus.component.xml.runtime.SupportRecorder;
+import org.apache.camel.quarkus.core.deployment.CamelRegistryBuildItem;
+import org.apache.camel.spi.ModelJAXBContextFactory;
 
-import org.eclipse.microprofile.config.ConfigProvider;
+public class ModelFactoryProcessor {
 
-public final class Flags {
-    private Flags() {
-    }
-
-    public static final class JaxbDisabled implements BooleanSupplier {
-        @Override
-        public boolean getAsBoolean() {
-            return ConfigProvider.getConfig().getOptionalValue("quarkus.camel.disable-jaxb", Boolean.class).orElse(Boolean.FALSE);
-        }
-    }
-
-    public static final class XmlDisabled implements BooleanSupplier {
-        @Override
-        public boolean getAsBoolean() {
-            return ConfigProvider.getConfig().getOptionalValue("quarkus.camel.disable-xml", Boolean.class).orElse(Boolean.FALSE);
-        }
+    @Record(ExecutionTime.STATIC_INIT)
+    @BuildStep
+    CamelRegistryBuildItem jaxbContextFactory(SupportRecorder recorder) {
+            return new CamelRegistryBuildItem(
+                    "log",
+                    ModelJAXBContextFactory.class,
+                    recorder.jaxbContextFactory()
+            );
     }
 
 }
diff --git a/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java b/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java
index ffc44d2..d9490b5 100644
--- a/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java
+++ b/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java
@@ -16,11 +16,17 @@
  */
 package org.apache.camel.quarkus.component.xml.deployment;
 
+import javax.enterprise.inject.Produces;
+
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 import io.quarkus.deployment.builditem.substrate.ReflectiveClassBuildItem;
+import io.quarkus.jaxb.deployment.JaxbEnabledBuildItem;
+import io.quarkus.jaxb.deployment.JaxbFileRootBuildItem;
 import org.apache.camel.converter.jaxp.XmlConverter;
+import org.apache.camel.quarkus.core.deployment.CamelSupport;
+import org.apache.camel.spi.ModelJAXBContextFactory;
 
 class XmlProcessor {
 
@@ -32,12 +38,25 @@ class XmlProcessor {
     }
 
     @BuildStep
+    JaxbFileRootBuildItem fileRoot() {
+        return new JaxbFileRootBuildItem(CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY);
+    }
+
+    @BuildStep
+    JaxbEnabledBuildItem handleJaxbSupport() {
+        return new JaxbEnabledBuildItem();
+    }
+
+    @BuildStep
     void reflective(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
         reflectiveClass.produce(new ReflectiveClassBuildItem(false, false,
             "com.sun.xml.internal.stream.XMLInputFactoryImpl",
             "com.sun.org.apache.xerces.internal.parsers.SAXParser",
-            XmlConverter.class.getCanonicalName()));
-
+            XmlConverter.class.getCanonicalName(),
+            "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl",
+            "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl",
+            "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl")
+        );
         // javax.xml.namespace.QName is needed as it is used as part of the processor
         // definitions in the DSL and parsers like Jackson (used in camel-k YAML DSL)
         // fails if this class is cannot be instantiated reflectively.
diff --git a/extensions/xml-common/runtime/pom.xml b/extensions/xml-common/runtime/pom.xml
index d688b6d..2d7e2ea 100644
--- a/extensions/xml-common/runtime/pom.xml
+++ b/extensions/xml-common/runtime/pom.xml
@@ -56,6 +56,11 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-jaxp</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.oracle.substratevm</groupId>
+            <artifactId>svm</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java b/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/SupportRecorder.java
similarity index 51%
rename from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java
rename to extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/SupportRecorder.java
index 69247e2..9c14a6f 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/Flags.java
+++ b/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/SupportRecorder.java
@@ -14,28 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.core.runtime.support;
+package org.apache.camel.quarkus.component.xml.runtime;
 
-import java.util.function.BooleanSupplier;
+import io.quarkus.runtime.annotations.Recorder;
+import org.apache.camel.impl.DefaultModelJAXBContextFactory;
+import org.apache.camel.spi.ModelJAXBContextFactory;
 
-import org.eclipse.microprofile.config.ConfigProvider;
+@Recorder
+public class SupportRecorder {
 
-public final class Flags {
-    private Flags() {
-    }
-
-    public static final class JaxbDisabled implements BooleanSupplier {
-        @Override
-        public boolean getAsBoolean() {
-            return ConfigProvider.getConfig().getOptionalValue("quarkus.camel.disable-jaxb", Boolean.class).orElse(Boolean.FALSE);
-        }
-    }
-
-    public static final class XmlDisabled implements BooleanSupplier {
-        @Override
-        public boolean getAsBoolean() {
-            return ConfigProvider.getConfig().getOptionalValue("quarkus.camel.disable-xml", Boolean.class).orElse(Boolean.FALSE);
-        }
+    public ModelJAXBContextFactory jaxbContextFactory() {
+        return new DefaultModelJAXBContextFactory();
     }
 
 }
diff --git a/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/graal/Target_org_apache_camel_quarkus_core_runtime_support_FastModel.java b/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/graal/Target_org_apache_camel_quarkus_core_runtime_support_FastModel.java
new file mode 100644
index 0000000..4322970
--- /dev/null
+++ b/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/graal/Target_org_apache_camel_quarkus_core_runtime_support_FastModel.java
@@ -0,0 +1,45 @@
+/*
+ * 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.quarkus.component.xml.runtime.graal;
+
+import java.io.InputStream;
+
+import com.oracle.svm.core.annotate.Substitute;
+import com.oracle.svm.core.annotate.TargetClass;
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.DefaultModel;
+import org.apache.camel.model.ModelHelper;
+import org.apache.camel.model.RoutesDefinition;
+
+@TargetClass(className = "org.apache.camel.quarkus.core.runtime.support.FastModel")
+@Substitute
+public class Target_org_apache_camel_quarkus_core_runtime_support_FastModel extends DefaultModel {
+
+    public Target_org_apache_camel_quarkus_core_runtime_support_FastModel(CamelContext camelContext) {
+        super(camelContext);
+    }
+
+    @Substitute
+    public void addRouteDefinitions(InputStream is) throws Exception {
+        RoutesDefinition def = ModelHelper.loadRoutesDefinition(getCamelContext(), is);
+        if (def != null) {
+            this.addRouteDefinitions(def.getRoutes());
+        }
+
+    }
+
+}
diff --git a/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/graal/Target_org_apache_camel_reifier_rest_RestBindingReifier.java b/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/graal/Target_org_apache_camel_reifier_rest_RestBindingReifier.java
new file mode 100644
index 0000000..a649623
--- /dev/null
+++ b/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/runtime/graal/Target_org_apache_camel_reifier_rest_RestBindingReifier.java
@@ -0,0 +1,68 @@
+/*
+ * 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.quarkus.component.xml.runtime.graal;
+
+import javax.xml.bind.JAXBContext;
+
+import com.oracle.svm.core.annotate.KeepOriginal;
+import com.oracle.svm.core.annotate.Substitute;
+import com.oracle.svm.core.annotate.TargetClass;
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.model.rest.RestBindingDefinition;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.RouteContext;
+import org.apache.camel.support.processor.validation.PredicateValidatingProcessor;
+
+@TargetClass(className = "org.apache.camel.reifier.rest.RestBindingReifier")
+final class Target_org_apache_camel_reifier_rest_RestBindingReifier {
+
+    @Substitute
+    protected void setupJaxb(CamelContext context, RestConfiguration config, String type, String outType, DataFormat jaxb, DataFormat outJaxb) throws Exception {
+        Class<?> clazz = null;
+        if (type != null) {
+            String typeName = type.endsWith("[]") ? type.substring(0, type.length() - 2) : type;
+            clazz = context.getClassResolver().resolveMandatoryClass(typeName);
+        }
+        if (clazz != null) {
+            JAXBContext jc = JAXBContext.newInstance(clazz);
+            context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setProperty(context, jaxb, "context", jc);
+        }
+        setAdditionalConfiguration(config, context, jaxb, "xml.in.");
+
+        Class<?> outClazz = null;
+        if (outType != null) {
+            String typeName = outType.endsWith("[]") ? outType.substring(0, outType.length() - 2) : outType;
+            outClazz = context.getClassResolver().resolveMandatoryClass(typeName);
+        }
+        if (outClazz != null) {
+            JAXBContext jc = JAXBContext.newInstance(outClazz);
+            context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setProperty(context, outJaxb, "context", jc);
+        } else if (clazz != null) {
+            // fallback and use the context from the input
+            JAXBContext jc = JAXBContext.newInstance(clazz);
+            context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setProperty(context, outJaxb, "context", jc);
+        }
+        setAdditionalConfiguration(config, context, outJaxb, "xml.out.");
+    }
+
+    @KeepOriginal
+    private void setAdditionalConfiguration(RestConfiguration config, CamelContext context, DataFormat dataFormat, String prefix) throws Exception {
+    }
+
+}
diff --git a/integration-tests/aws/src/main/resources/application.properties b/integration-tests/aws/src/main/resources/application.properties
index 936ed0f..3ca2a3a 100644
--- a/integration-tests/aws/src/main/resources/application.properties
+++ b/integration-tests/aws/src/main/resources/application.properties
@@ -23,8 +23,6 @@ quarkus.log.file.enable = false
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true
 quarkus.camel.dump-routes=true
 #
 # Camel
diff --git a/integration-tests/bean/src/main/resources/application.properties b/integration-tests/bean/src/main/resources/application.properties
index fe14ab2..dba6223 100644
--- a/integration-tests/bean/src/main/resources/application.properties
+++ b/integration-tests/bean/src/main/resources/application.properties
@@ -23,8 +23,6 @@ quarkus.log.file.enable = false
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true
 quarkus.camel.dump-routes=true
 #
 # Camel
diff --git a/integration-tests/core-cdi/src/main/resources/application.properties b/integration-tests/core-cdi/src/main/resources/application.properties
index f258d12..eb108f4 100644
--- a/integration-tests/core-cdi/src/main/resources/application.properties
+++ b/integration-tests/core-cdi/src/main/resources/application.properties
@@ -22,8 +22,6 @@ quarkus.log.file.enable = false
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=false
-quarkus.camel.disable-jaxb=false
 quarkus.camel.dump-routes=true
 #
 # Camel
diff --git a/integration-tests/core-impl/src/main/resources/application.properties b/integration-tests/core-impl/src/main/resources/application.properties
index 775072e..4f9279c 100644
--- a/integration-tests/core-impl/src/main/resources/application.properties
+++ b/integration-tests/core-impl/src/main/resources/application.properties
@@ -22,8 +22,6 @@ quarkus.log.file.enable = false
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true
 quarkus.camel.dump-routes=true
 #
 # Camel
diff --git a/integration-tests/core/test/src/main/resources/application.properties b/integration-tests/core/test/src/main/resources/application.properties
index b441636..3e6e7bb 100644
--- a/integration-tests/core/test/src/main/resources/application.properties
+++ b/integration-tests/core/test/src/main/resources/application.properties
@@ -22,8 +22,6 @@ quarkus.log.file.enable = false
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true
 quarkus.camel.dump-routes=true
 
 #
diff --git a/integration-tests/jdbc/src/main/resources/application.properties b/integration-tests/jdbc/src/main/resources/application.properties
index f1e4300..f4fa33e 100644
--- a/integration-tests/jdbc/src/main/resources/application.properties
+++ b/integration-tests/jdbc/src/main/resources/application.properties
@@ -22,8 +22,6 @@ quarkus.log.file.enable = false
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true        
 quarkus.camel.dump-routes=true
 
 #
diff --git a/integration-tests/netty-http/src/main/resources/application.properties b/integration-tests/netty-http/src/main/resources/application.properties
index 603d5f3..708319c 100644
--- a/integration-tests/netty-http/src/main/resources/application.properties
+++ b/integration-tests/netty-http/src/main/resources/application.properties
@@ -22,8 +22,6 @@ quarkus.log.file.enable = false
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true        
 quarkus.camel.dump-routes=true
 #
 # Camel
diff --git a/integration-tests/salesforce/src/main/resources/application.properties b/integration-tests/salesforce/src/main/resources/application.properties
index 1b8f25e..66fbe0a 100644
--- a/integration-tests/salesforce/src/main/resources/application.properties
+++ b/integration-tests/salesforce/src/main/resources/application.properties
@@ -19,8 +19,6 @@
 # Quarkus
 #
 quarkus.ssl.native=true
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true        
 quarkus.camel.dump-routes=true
 #
 # Camel
diff --git a/integration-tests/servlet/src/main/resources/application.properties b/integration-tests/servlet/src/main/resources/application.properties
index 387415e..fe4921f 100644
--- a/integration-tests/servlet/src/main/resources/application.properties
+++ b/integration-tests/servlet/src/main/resources/application.properties
@@ -23,8 +23,6 @@ quarkus.ssl.native=true
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true        
 quarkus.camel.dump-routes=true
 #
 # Quarkus :: Camel :: Servlet
diff --git a/integration-tests/twitter/src/main/resources/application.properties b/integration-tests/twitter/src/main/resources/application.properties
index c0f95bf..06bb262 100644
--- a/integration-tests/twitter/src/main/resources/application.properties
+++ b/integration-tests/twitter/src/main/resources/application.properties
@@ -23,8 +23,6 @@ quarkus.log.file.enable = false
 #
 # Quarkus :: Camel
 #
-quarkus.camel.disable-xml=true
-quarkus.camel.disable-jaxb=true
 quarkus.camel.dump-routes=true
 #
 # Camel
diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml
index 2594b8a..62a6225 100644
--- a/poms/bom/pom.xml
+++ b/poms/bom/pom.xml
@@ -93,6 +93,12 @@
                 <groupId>org.apache.camel</groupId>
                 <artifactId>camel-core</artifactId>
                 <version>${camel.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.apache.camel</groupId>
+                        <artifactId>camel-jaxp</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>org.apache.camel</groupId>