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

nfilotto pushed a commit to branch essobedo/491/cxf-integration-tests
in repository https://gitbox.apache.org/repos/asf/camel-karaf.git

commit 0b5fa4b56a298668979517efa01ddca8b1cc9e8d
Author: Nicolas Filotto <[email protected]>
AuthorDate: Fri Sep 13 19:28:14 2024 +0200

    Ref #491: Add camel-cxf integration tests
---
 components/camel-cxf/camel-cxf-all/pom.xml         |  20 +-
 .../camel/component/cxf/osgi/MainActivator.java    |   2 -
 .../HTTPJettyTransportNamespaceHandler.java        |  81 -----
 .../JettyHTTPServerEngineFactoryHolder.java        | 272 --------------
 .../blueprint/JettyServerEngineFactoryParser.java  | 133 -------
 .../osgi/HTTPJettyDestinationFactory.java          |  42 ---
 .../osgi/HTTPJettyTransportActivator.java          | 391 ---------------------
 .../main/resources/META-INF/cxf/bus-extensions.txt |   2 -
 features/src/main/feature/camel-features.xml       |   1 -
 tests/camel-integration-test/pom.xml               |   1 +
 tests/features/camel-cxf/pom.xml                   |  89 +++++
 .../karaf/camel/test/CamelCxfRsRouteSupplier.java  |  65 ++++
 .../karaf/camel/test/CamelCxfWsRouteSupplier.java  |  98 ++++++
 .../apache/karaf/camel/test/beans/Customer.java    |  65 ++++
 .../karaf/camel/test/beans/CustomerService.java    |  51 +++
 .../karaf/camel/test/jaxws/HelloService.java       |  21 +-
 .../apache/karaf/camel/itest/CamelCxfITest.java    | 199 +++++++++++
 tests/features/pom.xml                             |   3 +-
 18 files changed, 584 insertions(+), 952 deletions(-)

diff --git a/components/camel-cxf/camel-cxf-all/pom.xml 
b/components/camel-cxf/camel-cxf-all/pom.xml
index 9b357c13..cb6786ab 100644
--- a/components/camel-cxf/camel-cxf-all/pom.xml
+++ b/components/camel-cxf/camel-cxf-all/pom.xml
@@ -53,8 +53,6 @@
             
org.apache.camel.component.cxf.transport.http.osgi;version=${project.version},
             
org.apache.camel.component.cxf.transport.http.blueprint;version=${project.version},
             
org.apache.camel.component.cxf.servlet.blueprint;version=${project.version},
-            
org.apache.camel.component.cxf.transport.http_jetty.blueprint;version=${project.version},
-            
org.apache.camel.component.cxf.transport.http_jetty.osgi;version=${project.version},
             
org.apache.camel.component.cxf.ws.addressing.blueprint;version=${project.version},
             
org.apache.camel.component.cxf.ws.policy.blueprint;version=${project.version},
             org.apache.camel.component.cxf.feature;version=${camel-version},
@@ -64,7 +62,7 @@
             
org.apache.camel.component.cxf.transport.header;version=${camel-version},
             
org.apache.camel.component.cxf.transport.message;version=${camel-version},
             
org.apache.camel.component.cxf.binding.soap.blueprint;version=${project.version},
-            org.apache.cxf.*;version=${cxf-version},
+            org.apache.cxf*;version=${cxf-version},
         </camel.osgi.export>
         
<camel.osgi.activator>org.apache.camel.component.cxf.osgi.MainActivator</camel.osgi.activator>
         <camel-osgi-camel-import>
@@ -98,7 +96,6 @@
             jakarta.ws.rs*;version="${camel-osgi-jakarta-ws-rs-version}",
             jakarta.xml.soap*;version="${camel-osgi-saaj-version}",
             jakarta.servlet*;version="${camel-osgi-jakarta-servlet-version}",
-            org.eclipse.jetty*;version="${camel-osgi-jetty-version}",
             
org.glassfish.jaxb.runtime.v2;version="${camel-osgi-jakarta-bind-version}",
             javax.cache*;resolution:=optional,
             org.apache.cxf.tools*;resolution:=optional,
@@ -121,7 +118,7 @@
             org.glassfish.hk2.osgiresourcelocator
         </camel.osgi.import>
         <camel.osgi.dynamicimport.pkg>
-            
org.apache.cxf.bus,org.apache.cxf.*,com.ctc.wstx.*,org.eclipse.jetty.jmx
+            org.apache.cxf.bus,org.apache.cxf.*,com.ctc.wstx.*
         </camel.osgi.dynamicimport.pkg>
         <camel.osgi.export.service>
             
org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace="http://cxf.apache.org/blueprint/core";,
@@ -135,7 +132,6 @@
             
org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace="http://cxf.apache.org/blueprint/simple";,
             
org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace="http://cxf.apache.org/blueprint/jaxrs-client";,
             
org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace="http://cxf.apache.org/transports/http/configuration";,
-            
org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace="http://cxf.apache.org/transports/http-jetty/configuration";,
             
org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace="http://cxf.apache.org/ws/addressing";,
             
org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace="http://cxf.apache.org/policy";,
             
org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace="http://www.w3.org/ns/ws-policy";,
@@ -270,17 +266,6 @@
                 </exclusion>
             </exclusions>
         </dependency>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-transports-http-jetty</artifactId>
-            <version>${cxf-version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.cxf</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
         <dependency>
             <groupId>org.apache.cxf</groupId>
             <artifactId>cxf-rt-ws-addr</artifactId>
@@ -406,7 +391,6 @@
                                     
<include>org.apache.cxf:cxf-rt-frontend-jaxws</include>
                                     
<include>org.apache.cxf:cxf-rt-frontend-simple</include>
                                     
<include>org.apache.cxf:cxf-rt-transports-http</include>
-                                    
<include>org.apache.cxf:cxf-rt-transports-http-jetty</include>
                                     
<include>org.apache.cxf:cxf-rt-cxf-rt-security</include>
                                     
<include>org.apache.cxf:cxf-rt-cxf-rt-rs-client</include>
                                     
<include>org.apache.cxf:cxf-rt-ws-addr</include>
diff --git 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/osgi/MainActivator.java
 
b/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/osgi/MainActivator.java
index bbce0aef..3d51575a 100644
--- 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/osgi/MainActivator.java
+++ 
b/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/osgi/MainActivator.java
@@ -21,7 +21,6 @@ import java.util.List;
 
 import org.apache.camel.component.cxf.bus.osgi.CXFActivator;
 import 
org.apache.camel.component.cxf.transport.http.osgi.HTTPTransportActivator;
-import 
org.apache.camel.component.cxf.transport.http_jetty.osgi.HTTPJettyTransportActivator;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
@@ -36,7 +35,6 @@ public class MainActivator implements BundleActivator {
             new org.apache.camel.component.cxf.frontend.blueprint.Activator(),
             new 
org.apache.camel.component.cxf.jaxrs.client.blueprint.Activator(),
             new HTTPTransportActivator(),
-            new HTTPJettyTransportActivator(),
             new 
org.apache.camel.component.cxf.ws.addressing.blueprint.Activator(),
             new 
org.apache.camel.component.cxf.ws.policy.blueprint.Activator());
 
diff --git 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/HTTPJettyTransportNamespaceHandler.java
 
b/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/HTTPJettyTransportNamespaceHandler.java
deleted file mode 100644
index b2e02efe..00000000
--- 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/HTTPJettyTransportNamespaceHandler.java
+++ /dev/null
@@ -1,81 +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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.component.cxf.transport.http_jetty.blueprint;
-
-import java.net.URL;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import org.apache.aries.blueprint.Namespaces;
-import org.apache.aries.blueprint.ParserContext;
-import org.apache.camel.component.cxf.helpers.BaseNamespaceHandler;
-import org.apache.cxf.common.logging.LogUtils;
-import org.osgi.service.blueprint.reflect.ComponentMetadata;
-import org.osgi.service.blueprint.reflect.Metadata;
-
-@Namespaces("http://cxf.apache.org/transports/http-jetty/configuration";)
-public class HTTPJettyTransportNamespaceHandler extends BaseNamespaceHandler {
-
-    public static final String JETTY_TRANSPORT = 
"http://cxf.apache.org/transports/http-jetty/configuration";;
-
-    private static final String JETTY_ENGINE = "engine";
-
-    private static final String JETTY_ENGINE_FACTORY = "engine-factory";
-
-    private static final Logger LOG = 
LogUtils.getL7dLogger(HTTPJettyTransportNamespaceHandler.class);
-
-    public URL getSchemaLocation(String s) {
-        if (JETTY_TRANSPORT.equals(s)) {
-            return getClass().getClassLoader().
-                    getResource("schemas/configuration/http-jetty.xsd");
-        }
-        return super.findCoreSchemaLocation(s);
-    }
-
-    @SuppressWarnings("rawtypes")
-    public Set<Class> getManagedClasses() {
-        return null;
-    }
-
-    public Metadata parse(Element element, ParserContext parserContext) {
-        if (LOG.isLoggable(Level.FINE)) {
-            LOG.fine("Parsing element {{" + element.getNamespaceURI() + "}}{" 
+ element.getLocalName() + "}");
-        }
-
-        if (JETTY_ENGINE.equals(element.getLocalName())) {
-            //This doesn't hit normal configs.
-            return new JettyServerEngineParser().parse(element, parserContext);
-        } else if (JETTY_ENGINE_FACTORY.equals(element.getLocalName())) {
-
-            return new JettyServerEngineFactoryParser().parse(element, 
parserContext);
-        }
-
-        return null;
-    }
-
-    public ComponentMetadata decorate(Node node,
-                                      ComponentMetadata componentMetadata,
-                                      ParserContext parserContext) {
-        LOG.info("Decorating node " + node + " " + componentMetadata);
-        return componentMetadata;
-    }
-}
diff --git 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
 
b/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
deleted file mode 100644
index 5745d88b..00000000
--- 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
+++ /dev/null
@@ -1,272 +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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.component.cxf.transport.http_jetty.blueprint;
-
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.logging.Logger;
-
-import org.w3c.dom.Element;
-
-import jakarta.xml.bind.JAXBContext;
-import jakarta.xml.bind.JAXBElement;
-import jakarta.xml.bind.JAXBException;
-import org.apache.cxf.Bus;
-import org.apache.cxf.BusFactory;
-import org.apache.cxf.common.jaxb.JAXBContextCache;
-import org.apache.cxf.common.jaxb.JAXBUtils;
-import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.common.util.PackageUtils;
-import org.apache.cxf.common.util.StringUtils;
-import org.apache.cxf.configuration.jsse.TLSServerParameters;
-import org.apache.cxf.configuration.jsse.TLSServerParametersConfig;
-import org.apache.cxf.staxutils.StaxUtils;
-import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine;
-import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory;
-import org.apache.cxf.transport.http_jetty.ThreadingParameters;
-import 
org.apache.cxf.transports.http_jetty.configuration.JettyHTTPServerEngineConfigType;
-import 
org.apache.cxf.transports.http_jetty.configuration.JettyHTTPServerEngineFactoryConfigType;
-import 
org.apache.cxf.transports.http_jetty.configuration.TLSServerParametersIdentifiedType;
-import 
org.apache.cxf.transports.http_jetty.configuration.ThreadingParametersIdentifiedType;
-import 
org.apache.cxf.transports.http_jetty.configuration.ThreadingParametersType;
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Handler;
-
-public class JettyHTTPServerEngineFactoryHolder {
-
-    private static final Logger LOG = 
LogUtils.getL7dLogger(JettyHTTPServerEngineFactoryHolder.class);
-
-    private String parsedElement;
-    private JettyHTTPServerEngineFactory factory;
-
-    private Map<String, Connector> connectorMap;
-
-    private Map<String, List<Handler>> handlersMap;
-
-    private JAXBContext jaxbContext;
-    private Set<Class<?>> jaxbClasses;
-
-    public JettyHTTPServerEngineFactoryHolder() {
-    }
-
-    public void init() {
-        try {
-            Element element = StaxUtils.read(new 
StringReader(parsedElement)).getDocumentElement();
-
-            JettyHTTPServerEngineFactoryConfigType config
-                    = getJaxbObject(element,
-                    JettyHTTPServerEngineFactoryConfigType.class);
-
-            Bus defaultBus = BusFactory.getDefaultBus();
-            factory = new JettyHTTPServerEngineFactory(defaultBus);
-
-            Map<String, ThreadingParameters> threadingParametersMap
-                    = new TreeMap<>();
-
-            if (config.getIdentifiedThreadingParameters() != null) {
-                for (ThreadingParametersIdentifiedType threads : 
config.getIdentifiedThreadingParameters()) {
-                    ThreadingParameters rThreads = new ThreadingParameters();
-                    String id = threads.getId();
-                    if (threads.getThreadingParameters().getMaxThreads() != 
null) {
-                        
rThreads.setMaxThreads(threads.getThreadingParameters().getMaxThreads());
-                    }
-                    if (threads.getThreadingParameters().getMinThreads() != 
null) {
-                        
rThreads.setMinThreads(threads.getThreadingParameters().getMinThreads());
-                    }
-                    
rThreads.setThreadNamePrefix(threads.getThreadingParameters().getThreadNamePrefix());
-                    threadingParametersMap.put(id, rThreads);
-                }
-
-                factory.setThreadingParametersMap(threadingParametersMap);
-            }
-
-            //SSL
-            Map<String, TLSServerParameters> sslMap = new TreeMap<>();
-            if (config.getIdentifiedTLSServerParameters() != null) {
-
-                for (TLSServerParametersIdentifiedType t : 
config.getIdentifiedTLSServerParameters()) {
-                    try {
-                        TLSServerParameters parameter
-                                = new 
TLSServerParametersConfig(t.getTlsServerParameters());
-                        sslMap.put(t.getId(), parameter);
-                    } catch (Exception e) {
-                        throw new RuntimeException("Could not configure TLS 
for id " + t.getId(), e);
-                    }
-                }
-                factory.setTlsServerParametersMap(sslMap);
-            }
-            //Engines
-
-            List<JettyHTTPServerEngine> engineList = new ArrayList<>();
-            for (JettyHTTPServerEngineConfigType engine : config.getEngine()) {
-                JettyHTTPServerEngine eng = new JettyHTTPServerEngine(
-                        factory.getMBeanContainer(), engine.getHost(), 
engine.getPort());
-                if (engine.getConnector() != null && connectorMap != null) {
-                    // we need to setup the Connector from the connectorMap
-                    Connector connector = 
connectorMap.get(engine.getPort().toString());
-                    if (connector != null) {
-                        eng.setConnector(connector);
-                    } else {
-                        throw new RuntimeException("Could not find the 
connector instance for engine with port"
-                                + engine.getPort().toString());
-                    }
-                }
-                if (engine.getHandlers() != null && handlersMap != null) {
-                    List<Handler> handlers = 
handlersMap.get(engine.getPort().toString());
-                    if (handlers != null) {
-                        eng.setHandlers(handlers);
-                    } else {
-                        throw new RuntimeException("Could not find the 
handlers instance for engine with port"
-                                + engine.getPort().toString());
-                    }
-                }
-
-                if (engine.isContinuationsEnabled() != null) {
-                    
eng.setContinuationsEnabled(engine.isContinuationsEnabled());
-                }
-                if (engine.isSendServerVersion() != null) {
-                    eng.setSendServerVersion(engine.isSendServerVersion());
-                }
-                if (engine.getHost() != null && 
!StringUtils.isEmpty(engine.getHost())) {
-                    eng.setHost(engine.getHost());
-                }
-                if (engine.getMaxIdleTime() != null) {
-                    eng.setMaxIdleTime(engine.getMaxIdleTime());
-                }
-                if (engine.getPort() != null) {
-                    eng.setPort(engine.getPort());
-                }
-                if (engine.isReuseAddress() != null) {
-                    eng.setReuseAddress(engine.isReuseAddress());
-                }
-                if (engine.isSessionSupport() != null) {
-                    eng.setSessionSupport(engine.isSessionSupport());
-                }
-                if (engine.getSessionTimeout() != null) {
-                    
eng.setSessionTimeout(engine.getSessionTimeout().intValue());
-                }
-                if (engine.getThreadingParameters() != null) {
-                    ThreadingParametersType threads = 
engine.getThreadingParameters();
-                    ThreadingParameters rThreads = new ThreadingParameters();
-                    if (threads.getMaxThreads() != null) {
-                        rThreads.setMaxThreads(threads.getMaxThreads());
-                    }
-                    if (threads.getMinThreads() != null) {
-                        rThreads.setMinThreads(threads.getMinThreads());
-                    }
-
-                    eng.setThreadingParameters(rThreads);
-                }
-
-                //eng.setServer(engine.getTlsServerParameters());
-                if (engine.getTlsServerParameters() != null
-                        && (engine.getTlsServerParameters().getKeyManagers() 
!= null
-                        || engine.getTlsServerParameters().getTrustManagers() 
!= null)) {
-                    try {
-                        TLSServerParameters parameter =
-                                new 
TLSServerParametersConfig(engine.getTlsServerParameters());
-                        eng.setTlsServerParameters(parameter);
-                    } catch (Exception e) {
-                        throw new RuntimeException("Could not configure TLS 
for engine on  "
-                                + eng.getHost() + ":" + eng.getPort(), e);
-                    }
-                }
-                eng.finalizeConfig();
-
-                engineList.add(eng);
-            }
-            factory.setEnginesList(engineList);
-            //Unravel this completely.
-
-            factory.initComplete();
-        } catch (Exception e) {
-            throw new RuntimeException("Could not process configuration.", e);
-        }
-    }
-
-    public void destroy() {
-        // need to release the reference of the jaxb Classes
-        factory.postShutdown();
-        jaxbClasses.clear();
-        jaxbContext = null;
-    }
-
-    public String getParsedElement() {
-        return parsedElement;
-    }
-
-    public void setParsedElement(String parsedElement) {
-        this.parsedElement = parsedElement;
-    }
-
-    public void setConnectorMap(Map<String, Connector> connectorMap) {
-        this.connectorMap = connectorMap;
-    }
-
-    public void setHandlersMap(Map<String, List<Handler>> handlersMap) {
-        this.handlersMap = handlersMap;
-    }
-
-    protected <T> T getJaxbObject(Element parent, Class<T> c) {
-
-        try {
-            JAXBElement<T> ele = JAXBUtils.unmarshall(getContext(c), parent, 
c);
-            return ele.getValue();
-        } catch (JAXBException e) {
-            LOG.warning("Unable to parse property due to " + e);
-            return null;
-        }
-    }
-
-    protected synchronized JAXBContext getContext(Class<?> cls) {
-        if (jaxbContext == null || jaxbClasses == null || 
!jaxbClasses.contains(cls)) {
-            try {
-                Set<Class<?>> tmp = new HashSet<>();
-                if (jaxbClasses != null) {
-                    tmp.addAll(jaxbClasses);
-                }
-                JAXBContextCache.addPackage(tmp, 
PackageUtils.getPackageName(cls),
-                        cls == null ? getClass().getClassLoader() : 
cls.getClassLoader());
-                if (cls != null) {
-                    boolean hasOf = false;
-                    for (Class<?> c : tmp) {
-                        if (c.getPackage() == cls.getPackage() && 
"ObjectFactory".equals(c.getSimpleName())) {
-                            hasOf = true;
-                        }
-                    }
-                    if (!hasOf) {
-                        tmp.add(cls);
-                    }
-                }
-                JAXBContextCache.scanPackages(tmp);
-                JAXBContextCache.CachedContextAndSchemas ccs
-                        = JAXBContextCache.getCachedContextAndSchemas(tmp, 
null, null, null, false);
-                jaxbClasses = ccs.getClasses();
-                jaxbContext = ccs.getContext();
-            } catch (JAXBException e) {
-                throw new RuntimeException(e);
-            }
-        }
-        return jaxbContext;
-    }
-}
diff --git 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyServerEngineFactoryParser.java
 
b/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyServerEngineFactoryParser.java
deleted file mode 100644
index 2980d014..00000000
--- 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyServerEngineFactoryParser.java
+++ /dev/null
@@ -1,133 +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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.component.cxf.transport.http_jetty.blueprint;
-
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.UUID;
-
-import org.w3c.dom.Element;
-
-import org.apache.aries.blueprint.ParserContext;
-import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
-import org.apache.aries.blueprint.mutable.MutableMapMetadata;
-import 
org.apache.camel.component.cxf.configuration.blueprint.AbstractBPBeanDefinitionParser;
-import org.apache.cxf.common.util.StringUtils;
-import org.apache.cxf.helpers.DOMUtils;
-import org.apache.cxf.staxutils.StaxUtils;
-import org.osgi.service.blueprint.reflect.ComponentMetadata;
-import org.osgi.service.blueprint.reflect.Metadata;
-import org.osgi.service.blueprint.reflect.ValueMetadata;
-
-public class JettyServerEngineFactoryParser extends 
AbstractBPBeanDefinitionParser {
-
-    public static final String JETTY_TRANSPORT = 
"http://cxf.apache.org/transports/http-jetty/configuration";;
-
-    public static final String JETTY_THREADING = 
"http://cxf.apache.org/configuration/parameterized-types";;
-
-    public static String getIdOrName(Element elem) {
-        String id = elem.getAttribute("id");
-
-        if (null == id || "".equals(id)) {
-            String names = elem.getAttribute("name");
-            if (null != names) {
-                StringTokenizer st = new StringTokenizer(names, ",");
-                if (st.countTokens() > 0) {
-                    id = st.nextToken();
-                }
-            }
-        }
-        return id;
-    }
-
-    public Metadata parse(Element element, ParserContext context) {
-
-        //Endpoint definition
-        MutableBeanMetadata ef = 
context.createMetadata(MutableBeanMetadata.class);
-        if (!StringUtils.isEmpty(getIdOrName(element))) {
-            ef.setId(getIdOrName(element));
-        } else {
-            ef.setId("jetty.engine.factory-holder-" + 
UUID.randomUUID().toString());
-        }
-        ef.setRuntimeClass(JettyHTTPServerEngineFactoryHolder.class);
-
-        // setup the ConnectorMap and HandlersMap property for the 
JettyHTTPServerEngineFactoryHolder
-
-        try {
-            // Print the DOM node
-            String xmlString = StaxUtils.toString(element);
-            ef.addProperty("parsedElement", createValue(context, xmlString));
-            ef.setInitMethod("init");
-            ef.setActivation(ComponentMetadata.ACTIVATION_EAGER);
-            ef.setDestroyMethod("destroy");
-
-            // setup the EngineConnector
-            List<Element> engines = DOMUtils
-                    .getChildrenWithName(element, 
HTTPJettyTransportNamespaceHandler.JETTY_TRANSPORT, "engine");
-            ef.addProperty("connectorMap", parseEngineConnector(engines, ef, 
context));
-            ef.addProperty("handlersMap", parseEngineHandlers(engines, ef, 
context));
-            return ef;
-        } catch (Exception e) {
-            throw new RuntimeException("Could not process configuration.", e);
-        }
-    }
-
-    protected Metadata parseEngineConnector(List<Element> engines, 
ComponentMetadata enclosingComponent,
-                                            ParserContext context) {
-        MutableMapMetadata map = 
context.createMetadata(MutableMapMetadata.class);
-        map.setKeyType("java.lang.String");
-        map.setValueType("org.eclipse.jetty.server.Connector");
-
-        for (Element engine : engines) {
-            String port = engine.getAttribute("port");
-            ValueMetadata keyValue = createValue(context, port);
-            Element connector = DOMUtils
-                    .getFirstChildWithName(engine, 
HTTPJettyTransportNamespaceHandler.JETTY_TRANSPORT,
-                            "connector");
-            if (connector != null) {
-                Element first = DOMUtils.getFirstElement(connector);
-                Metadata valValue = context.parseElement(Metadata.class, 
enclosingComponent, first);
-                map.addEntry(keyValue, valValue);
-            }
-        }
-
-        return map;
-    }
-
-    protected Metadata parseEngineHandlers(List<Element> engines, 
ComponentMetadata enclosingComponent,
-                                           ParserContext context) {
-        MutableMapMetadata map = 
context.createMetadata(MutableMapMetadata.class);
-        map.setKeyType("java.lang.String");
-        map.setValueType("java.util.List");
-
-        for (Element engine : engines) {
-            String port = engine.getAttribute("port");
-            ValueMetadata keyValue = createValue(context, port);
-            Element handlers = DOMUtils
-                    .getFirstChildWithName(engine, 
HTTPJettyTransportNamespaceHandler.JETTY_TRANSPORT,
-                            "handlers");
-            if (handlers != null) {
-                Metadata valValue = parseListData(context, enclosingComponent, 
handlers);
-                map.addEntry(keyValue, valValue);
-            }
-        }
-        return map;
-    }
-
-
-}
diff --git 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/osgi/HTTPJettyDestinationFactory.java
 
b/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/osgi/HTTPJettyDestinationFactory.java
deleted file mode 100644
index 61fa21f4..00000000
--- 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/osgi/HTTPJettyDestinationFactory.java
+++ /dev/null
@@ -1,42 +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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.component.cxf.transport.http_jetty.osgi;
-
-import java.io.IOException;
-
-import org.apache.cxf.Bus;
-import org.apache.cxf.common.injection.NoJSR250Annotations;
-import org.apache.cxf.service.model.EndpointInfo;
-import org.apache.cxf.transport.http.AbstractHTTPDestination;
-import org.apache.cxf.transport.http.DestinationRegistry;
-import org.apache.cxf.transport.http.HttpDestinationFactory;
-import org.apache.cxf.transport.http_jetty.JettyHTTPDestination;
-import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory;
-
-@NoJSR250Annotations()
-public class HTTPJettyDestinationFactory implements HttpDestinationFactory {
-
-    @Override
-    public AbstractHTTPDestination createDestination(EndpointInfo 
endpointInfo, Bus bus, DestinationRegistry registry)
-            throws IOException {
-        if (bus.getExtension(ClassLoader.class) == null) {
-            
bus.setExtension(HTTPJettyDestinationFactory.class.getClassLoader(), 
ClassLoader.class);
-        }
-        return new JettyHTTPDestination(bus, registry, endpointInfo, 
bus.getExtension(JettyHTTPServerEngineFactory.class));
-    }
-}
diff --git 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
 
b/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
deleted file mode 100644
index 9ff3f17a..00000000
--- 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
+++ /dev/null
@@ -1,391 +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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.component.cxf.transport.http_jetty.osgi;
-
-import java.io.IOException;
-import java.security.GeneralSecurityException;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import javax.management.MBeanServer;
-
-import 
org.apache.camel.component.cxf.bus.blueprint.BlueprintNameSpaceHandlerFactory;
-import org.apache.camel.component.cxf.bus.blueprint.NamespaceHandlerRegisterer;
-import 
org.apache.camel.component.cxf.transport.http_jetty.blueprint.HTTPJettyTransportNamespaceHandler;
-import org.apache.cxf.common.util.CollectionUtils;
-import org.apache.cxf.configuration.jsse.TLSParameterJaxBUtils;
-import org.apache.cxf.configuration.jsse.TLSServerParameters;
-import org.apache.cxf.configuration.security.CertStoreType;
-import org.apache.cxf.configuration.security.CertificateConstraintsType;
-import org.apache.cxf.configuration.security.ClientAuthentication;
-import org.apache.cxf.configuration.security.CombinatorType;
-import org.apache.cxf.configuration.security.DNConstraintsType;
-import org.apache.cxf.configuration.security.FiltersType;
-import org.apache.cxf.configuration.security.KeyManagersType;
-import org.apache.cxf.configuration.security.KeyStoreType;
-import org.apache.cxf.configuration.security.SecureRandomParameters;
-import org.apache.cxf.configuration.security.TrustManagersType;
-import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine;
-import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory;
-import org.apache.cxf.transport.http_jetty.ThreadingParameters;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.cm.ConfigurationException;
-import org.osgi.service.cm.ManagedServiceFactory;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class HTTPJettyTransportActivator
-        implements BundleActivator, ManagedServiceFactory {
-    public static final String FACTORY_PID = "org.apache.cxf.http.jetty";
-
-    BundleContext context;
-    MBeanServer mbeans;
-    ServiceTracker<MBeanServer, ?> mbeanServerTracker;
-    ServiceRegistration<ManagedServiceFactory> reg;
-
-    JettyHTTPServerEngineFactory factory = new JettyHTTPServerEngineFactory() {
-        public MBeanServer getMBeanServer() {
-            return (MBeanServer)mbeanServerTracker.getService();
-        }
-    };
-
-    public void start(BundleContext ctx) throws Exception {
-        this.context = ctx;
-        mbeanServerTracker = new ServiceTracker<>(ctx, MBeanServer.class, 
null);
-        try {
-            BlueprintNameSpaceHandlerFactory nsHandlerFactory = new 
BlueprintNameSpaceHandlerFactory() {
-
-                @Override
-                public Object createNamespaceHandler() {
-                    return new HTTPJettyTransportNamespaceHandler();
-                }
-            };
-            NamespaceHandlerRegisterer.register(context, nsHandlerFactory,
-                    
"http://cxf.apache.org/transports/http-jetty/configuration";);
-        } catch (NoClassDefFoundError e) {
-            // Blueprint not available, ignore
-        }
-        reg = context.registerService(ManagedServiceFactory.class,
-                this,
-                CollectionUtils.singletonDictionary(Constants.SERVICE_PID, 
FACTORY_PID));
-
-    }
-
-    public void stop(BundleContext ctx) throws Exception {
-        mbeanServerTracker.close();
-        reg.unregister();
-    }
-
-    public String getName() {
-        return FACTORY_PID;
-    }
-
-    public void updated(String pid, Dictionary<String, ?> properties)
-            throws ConfigurationException {
-        if (pid == null) {
-            return;
-        }
-        int port = Integer.parseInt((String)properties.get("port"));
-
-        String host = (String)properties.get("host");
-        try {
-            TLSServerParameters tls = createTlsServerParameters(properties);
-            if (tls != null) {
-                factory.setTLSServerParametersForPort(host, port, tls);
-            } else {
-                factory.createJettyHTTPServerEngine(host, port, "http");
-            }
-
-            JettyHTTPServerEngine e = 
factory.retrieveJettyHTTPServerEngine(port);
-            configure(e, properties);
-        } catch (GeneralSecurityException | IOException e) {
-            throw new ConfigurationException(null, null, e);
-        }
-    }
-
-
-    private void configure(JettyHTTPServerEngine e, Dictionary<String, ?> 
properties) {
-        ThreadingParameters threading = createThreadingParameters(properties);
-        if (threading != null) {
-            e.setThreadingParameters(threading);
-        }
-        Enumeration<String> keys = properties.keys();
-        while (keys.hasMoreElements()) {
-            String k = keys.nextElement();
-            if ("sessionSupport".equals(k)) {
-                
e.setSessionSupport(Boolean.parseBoolean((String)properties.get(k)));
-            } else if ("continuationsEnabled".equals(k)) {
-                
e.setContinuationsEnabled(Boolean.parseBoolean((String)properties.get(k)));
-            } else if ("sendServerVersion".equals(k)) {
-                
e.setSendServerVersion(Boolean.parseBoolean((String)properties.get(k)));
-            } else if ("reuseAddress".equals(k)) {
-                
e.setReuseAddress(Boolean.parseBoolean((String)properties.get(k)));
-            } else if ("maxIdleTime".equals(k)) {
-                e.setMaxIdleTime(Integer.parseInt((String)properties.get(k)));
-            } else if ("sessionTimeout".equals(k)) {
-                
e.setSessionTimeout(Integer.parseInt((String)properties.get(k)));
-            }
-        }
-    }
-
-    public void deleted(String pid) {
-    }
-
-    private ThreadingParameters createThreadingParameters(Dictionary<String, 
?> d) {
-        Enumeration<String> keys = d.keys();
-        ThreadingParameters p = null;
-        while (keys.hasMoreElements()) {
-            String k = keys.nextElement();
-            if (k.startsWith("threadingParameters.")) {
-                if (p == null) {
-                    p = new ThreadingParameters();
-                }
-                String v = (String)d.get(k);
-                k = k.substring("threadingParameters.".length());
-                if ("minThreads".equals(k)) {
-                    p.setMinThreads(Integer.parseInt(v));
-                } else if ("maxThreads".equals(k)) {
-                    p.setMaxThreads(Integer.parseInt(v));
-                } else if ("threadNamePrefix".equals(k)) {
-                    p.setThreadNamePrefix(k);
-                }
-            }
-        }
-        return p;
-    }
-
-    private TLSServerParameters createTlsServerParameters(Dictionary<String, 
?> d) {
-        Enumeration<String> keys = d.keys();
-        TLSServerParameters p = null;
-        SecureRandomParameters srp = null;
-        KeyManagersType kmt = null;
-        TrustManagersType tmt = null;
-        boolean enableRevocation = false;
-        while (keys.hasMoreElements()) {
-            String k = keys.nextElement();
-            if (k.startsWith("tlsServerParameters.")) {
-                if (p == null) {
-                    p = new TLSServerParameters();
-                }
-                String v = (String)d.get(k);
-                k = k.substring("tlsServerParameters.".length());
-
-                if ("secureSocketProtocol".equals(k)) {
-                    p.setSecureSocketProtocol(v);
-                } else if ("jsseProvider".equals(k)) {
-                    p.setJsseProvider(v);
-                } else if ("certAlias".equals(k)) {
-                    p.setCertAlias(v);
-                } else if ("clientAuthentication.want".equals(k)) {
-                    if (p.getClientAuthentication() == null) {
-                        p.setClientAuthentication(new ClientAuthentication());
-                    }
-                    
p.getClientAuthentication().setWant(Boolean.parseBoolean(v));
-                } else if ("clientAuthentication.required".equals(k)) {
-                    if (p.getClientAuthentication() == null) {
-                        p.setClientAuthentication(new ClientAuthentication());
-                    }
-                    
p.getClientAuthentication().setRequired(Boolean.parseBoolean(v));
-                } else if ("enableRevocation".equals(k)) {
-                    enableRevocation = Boolean.parseBoolean(v);
-                } else if (k.startsWith("certConstraints.")) {
-                    configureCertConstraints(p, k, v);
-                } else if (k.startsWith("secureRandomParameters.")) {
-                    srp = configureSecureRandom(srp, k, v);
-                } else if (k.startsWith("cipherSuitesFilter.")) {
-                    configureCipherSuitesFilter(p, k, v);
-                } else if (k.startsWith("cipherSuites")) {
-                    StringTokenizer st = new StringTokenizer(v, ",");
-                    while (st.hasMoreTokens()) {
-                        p.getCipherSuites().add(st.nextToken());
-                    }
-                }  else if (k.startsWith("excludeProtocols")) {
-                    StringTokenizer st = new StringTokenizer(v, ",");
-                    while (st.hasMoreTokens()) {
-                        p.getExcludeProtocols().add(st.nextToken());
-                    }
-                } else if (k.startsWith("trustManagers.")) {
-                    tmt = getTrustManagers(tmt,
-                            k.substring("trustManagers.".length()),
-                            v);
-                } else if (k.startsWith("keyManagers.")) {
-                    kmt = getKeyManagers(kmt,
-                            k.substring("keyManagers.".length()),
-                            v);
-                }
-            }
-        }
-
-        try {
-            if (srp != null) {
-                p.setSecureRandom(TLSParameterJaxBUtils.getSecureRandom(srp));
-            }
-            if (kmt != null) {
-                p.setKeyManagers(TLSParameterJaxBUtils.getKeyManagers(kmt));
-            }
-            if (tmt != null) {
-                p.setTrustManagers(TLSParameterJaxBUtils.getTrustManagers(tmt, 
enableRevocation));
-            }
-        } catch (RuntimeException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        return p;
-    }
-
-    private void configureCipherSuitesFilter(TLSServerParameters p, String k, 
String v) {
-        k = k.substring("cipherSuitesFilter.".length());
-        StringTokenizer st = new StringTokenizer(v, ",");
-        FiltersType ft = p.getCipherSuitesFilter();
-        if (ft == null) {
-            ft = new FiltersType();
-            p.setCipherSuitesFilter(ft);
-        }
-        List<String> lst = "include".equals(k) ? ft.getInclude() : 
ft.getExclude();
-        while (st.hasMoreTokens()) {
-            lst.add(st.nextToken());
-        }
-    }
-
-    private SecureRandomParameters 
configureSecureRandom(SecureRandomParameters srp, String k, String v) {
-        k = k.substring("secureRandomParameters.".length());
-        if (srp == null) {
-            srp = new SecureRandomParameters();
-        }
-        if ("algorithm".equals(k)) {
-            srp.setAlgorithm(v);
-        } else if ("provider".equals(k)) {
-            srp.setProvider(v);
-        }
-        return srp;
-    }
-
-    private void configureCertConstraints(TLSServerParameters p, String k, 
String v) {
-        k = k.substring("certConstraints.".length());
-        CertificateConstraintsType cct = p.getCertConstraints();
-        if (cct == null) {
-            cct = new CertificateConstraintsType();
-            p.setCertConstraints(cct);
-        }
-        DNConstraintsType dnct = null;
-        if (k.startsWith("SubjectDNConstraints.")) {
-            dnct = cct.getSubjectDNConstraints();
-            if (dnct == null) {
-                dnct = new DNConstraintsType();
-                cct.setSubjectDNConstraints(dnct);
-            }
-            k = k.substring("SubjectDNConstraints.".length());
-        } else if (k.startsWith("IssuerDNConstraints.")) {
-            dnct = cct.getIssuerDNConstraints();
-            if (dnct == null) {
-                dnct = new DNConstraintsType();
-                cct.setIssuerDNConstraints(dnct);
-            }
-            k = k.substring("IssuerDNConstraints.".length());
-        }
-        if (dnct != null) {
-            if ("combinator".equals(k)) {
-                dnct.setCombinator(CombinatorType.fromValue(v));
-            } else if ("RegularExpression".equals(k)) {
-                dnct.getRegularExpression().add(k);
-            }
-        }
-    }
-
-    private KeyManagersType getKeyManagers(KeyManagersType keyManagers, String 
k, String v) {
-        if (keyManagers == null) {
-            keyManagers = new KeyManagersType();
-        }
-        if ("factoryAlgorithm".equals(k)) {
-            keyManagers.setFactoryAlgorithm(v);
-        } else if ("provider".equals(k)) {
-            keyManagers.setProvider(v);
-        } else if ("keyPassword".equals(k)) {
-            keyManagers.setKeyPassword(v);
-        } else if (k.startsWith("keyStore.")) {
-            keyManagers.setKeyStore(getKeyStore(keyManagers.getKeyStore(),
-                    k.substring("keyStore.".length()),
-                    v));
-        }
-        return keyManagers;
-    }
-
-    private KeyStoreType getKeyStore(KeyStoreType ks, String k, String v) {
-        if (ks == null) {
-            ks = new KeyStoreType();
-        }
-        if ("type".equals(k)) {
-            ks.setType(v);
-        } else if ("password".equals(k)) {
-            ks.setPassword(v);
-        } else if ("provider".equals(k)) {
-            ks.setProvider(v);
-        } else if ("url".equals(k)) {
-            ks.setUrl(v);
-        } else if ("file".equals(k)) {
-            ks.setFile(v);
-        } else if ("resource".equals(k)) {
-            ks.setResource(v);
-        }
-        return ks;
-    }
-
-    private TrustManagersType getTrustManagers(TrustManagersType tmt, String 
k, String v) {
-        if (tmt == null) {
-            tmt = new TrustManagersType();
-        }
-        if ("provider".equals(k)) {
-            tmt.setProvider(v);
-        } else if ("factoryAlgorithm".equals(k)) {
-            tmt.setFactoryAlgorithm(v);
-        } else if (k.startsWith("keyStore.")) {
-            tmt.setKeyStore(getKeyStore(tmt.getKeyStore(),
-                    k.substring("keyStore.".length()),
-                    v));
-        } else if (k.startsWith("certStore")) {
-            tmt.setCertStore(getCertStore(tmt.getCertStore(),
-                    k.substring("certStore.".length()),
-                    v));
-        }
-        return tmt;
-    }
-
-    private CertStoreType getCertStore(CertStoreType cs, String k, String v) {
-        if (cs == null) {
-            cs = new CertStoreType();
-        }
-        if ("file".equals(k)) {
-            cs.setFile(v);
-        } else if ("url".equals(k)) {
-            cs.setUrl(v);
-        } else if ("resource".equals(k)) {
-            cs.setResource(v);
-        }
-        return cs;
-    }
-
-
-
-
-
-}
diff --git 
a/components/camel-cxf/camel-cxf-all/src/main/resources/META-INF/cxf/bus-extensions.txt
 
b/components/camel-cxf/camel-cxf-all/src/main/resources/META-INF/cxf/bus-extensions.txt
index 8fd23f73..7ad7d9c7 100644
--- 
a/components/camel-cxf/camel-cxf-all/src/main/resources/META-INF/cxf/bus-extensions.txt
+++ 
b/components/camel-cxf/camel-cxf-all/src/main/resources/META-INF/cxf/bus-extensions.txt
@@ -29,8 +29,6 @@ 
org.apache.cxf.transport.http.HTTPWSDLExtensionLoader::true:true
 org.apache.cxf.transport.http.policy.HTTPClientAssertionBuilder::true:true
 org.apache.cxf.transport.http.policy.HTTPServerAssertionBuilder::true:true
 org.apache.cxf.transport.http.policy.NoOpPolicyInterceptorProvider::true:true
-org.apache.camel.component.cxf.transport.http_jetty.osgi.HTTPJettyDestinationFactory::true
-org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory::true
 org.apache.cxf.ws.addressing.policy.AddressingAssertionBuilder::true:true
 org.apache.cxf.ws.addressing.policy.UsingAddressingAssertionBuilder::true:true
 
org.apache.cxf.ws.addressing.policy.AddressingPolicyInterceptorProvider::true:true
diff --git a/features/src/main/feature/camel-features.xml 
b/features/src/main/feature/camel-features.xml
index 59087f61..db9e8473 100644
--- a/features/src/main/feature/camel-features.xml
+++ b/features/src/main/feature/camel-features.xml
@@ -890,7 +890,6 @@
         <feature version="[6,7)">jakarta-servlet</feature>
         <feature 
version="${camel-osgi-jakarta-jws-version}">jakarta-jws</feature>
         <feature version="[3,4)">jakarta-validation</feature>
-        <feature version="[11,12)">jetty</feature>
         <bundle 
dependency="true">mvn:org.glassfish.hk2/osgi-resource-locator/${osgi-resource-locator-version}</bundle>
         <bundle 
dependency="true">mvn:org.apache.neethi/neethi/${auto-detect-version}</bundle>
         <bundle 
dependency="true">mvn:org.apache.ws.xmlschema/xmlschema-core/${auto-detect-version}</bundle>
diff --git a/tests/camel-integration-test/pom.xml 
b/tests/camel-integration-test/pom.xml
index efc453cb..a8bf5e25 100644
--- a/tests/camel-integration-test/pom.xml
+++ b/tests/camel-integration-test/pom.xml
@@ -85,6 +85,7 @@
                             org.awaitility*,
                             org.slf4j
                         </Import-Package>
+                        <DynamicImport-Package>*</DynamicImport-Package>
                     </instructions>
                     
<excludeDependencies>geronimo-atinject_1.0_spec</excludeDependencies>
                 </configuration>
diff --git a/tests/features/camel-cxf/pom.xml b/tests/features/camel-cxf/pom.xml
new file mode 100644
index 00000000..4e7ed9ea
--- /dev/null
+++ b/tests/features/camel-cxf/pom.xml
@@ -0,0 +1,89 @@
+<?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/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.camel.karaf</groupId>
+        <artifactId>camel-karaf-features-test</artifactId>
+        <version>4.7.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-cxf-test</artifactId>
+    <name>Apache Camel :: Karaf :: Tests :: Features :: CXF</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>jakarta.ws.rs</groupId>
+            <artifactId>jakarta.ws.rs-api</artifactId>
+            <version>${jakarta-ws-rs-api-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <version>${jakarta-xml-bind-api-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-cxf-common</artifactId>
+            <version>${camel-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxws</artifactId>
+            <version>${cxf-version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>default-test</id>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                        <phase>integration-test</phase>
+                        <configuration>
+                            <excludes>
+                                <exclude>none</exclude>
+                            </excludes>
+                            <includes>
+                                <include>**/*Test.java</include>
+                            </includes>
+                            <systemPropertyVariables>
+                                
<camel.karaf.version>${project.version}</camel.karaf.version>
+                                
<project.version>${project.version}</project.version>
+                                
<project.target>${project.build.directory}</project.target>
+                                
<users.file.location>${users.file.location}</users.file.location>
+                                
<org.ops4j.pax.logging.DefaultServiceLog.level>WARN</org.ops4j.pax.logging.DefaultServiceLog.level>
+                                <cxf.version>${cxf-version}</cxf.version>
+                            </systemPropertyVariables>
+                            
<forkedProcessExitTimeoutInSeconds>5</forkedProcessExitTimeoutInSeconds>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git 
a/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/CamelCxfRsRouteSupplier.java
 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/CamelCxfRsRouteSupplier.java
new file mode 100644
index 00000000..02a7be9b
--- /dev/null
+++ 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/CamelCxfRsRouteSupplier.java
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.karaf.camel.test;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.karaf.camel.itests.CamelRouteSupplier;
+import org.apache.karaf.camel.test.beans.Customer;
+import org.osgi.service.component.annotations.Component;
+
+@Component(
+        name = "karaf-camel-cxf-rs-test",
+        immediate = true,
+        service = CamelRouteSupplier.class
+)
+public class CamelCxfRsRouteSupplier implements CamelRouteSupplier {
+    private static final String PORT_RS_PATH = 
System.getProperty("cxf.rs.port") + "/CamelCxfRsRouteSupplier";
+    private static final String CXF_RS_ENDPOINT_URI = 
"cxfrs://http://localhost:"; + PORT_RS_PATH
+            + 
"/rest?resourceClasses=org.apache.karaf.camel.test.beans.CustomerService&bindingStyle=SimpleConsumer";
+
+
+    @Override
+    public void createRoutes(RouteBuilder builder) {
+        builder.from(CXF_RS_ENDPOINT_URI)
+                
.recipientList(builder.simple("direct:${header.operationName}"));
+
+        builder.from("direct:getCustomer").process(exchange -> {
+            Object id = exchange.getIn().getHeader("id");
+            if (!"123".equals(id)) {
+                throw new RuntimeException("The expected id is 123 but was " + 
id);
+            }
+            exchange.getMessage().setBody(new Customer(123, "Raul"));
+            exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE, 200);
+        });
+
+        builder.from("direct:newCustomer").process(exchange -> {
+            Customer c = exchange.getIn().getBody(Customer.class);
+            if (c == null) {
+                throw new RuntimeException("The customer should not be null");
+            } else if (123 != c.getId()) {
+                throw new RuntimeException("The expected id is 123 but was " + 
c.getId());
+            }
+            Object age = exchange.getIn().getHeader("age");
+            if (!Integer.valueOf(12).equals(age)) {
+                throw new RuntimeException("The expected age is 12 but was ");
+            }
+            exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE, 200);
+        });
+    }
+}
diff --git 
a/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/CamelCxfWsRouteSupplier.java
 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/CamelCxfWsRouteSupplier.java
new file mode 100644
index 00000000..5c519325
--- /dev/null
+++ 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/CamelCxfWsRouteSupplier.java
@@ -0,0 +1,98 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.karaf.camel.test;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import jakarta.servlet.ServletRequest;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.DataFormat;
+import org.apache.camel.component.cxf.common.message.CxfConstants;
+import org.apache.cxf.endpoint.Client;
+import org.apache.karaf.camel.itests.CamelRouteSupplier;
+import org.osgi.service.component.annotations.Component;
+
+import static org.apache.camel.builder.Builder.header;
+
+@Component(
+        name = "karaf-camel-cxf-ws-test",
+        immediate = true,
+        service = CamelRouteSupplier.class
+)
+public class CamelCxfWsRouteSupplier implements CamelRouteSupplier {
+    private static final String PORT_WS_PATH = 
System.getProperty("cxf.ws.port") + "/CamelCxfWsRouteSupplier";
+    private static final String CXF_WS_ENDPOINT_URI = 
"cxf://http://localhost:"; + PORT_WS_PATH
+            + 
"/test?serviceClass=org.apache.karaf.camel.test.jaxws.HelloService"
+            + "&publishedEndpointUrl=http://www.simple.com/services/test";;
+
+    private static final String ECHO_OPERATION = "echo";
+    private static final String ECHO_BOOLEAN_OPERATION = "echoBoolean";
+
+    @Override
+    public void createRoutes(RouteBuilder builder) {
+        
builder.from(CXF_WS_ENDPOINT_URI).choice().when(header(CxfConstants.OPERATION_NAME).isEqualTo(ECHO_OPERATION))
+                .process(exchange -> {
+                    DataFormat dataFormat = 
exchange.getProperty(CxfConstants.DATA_FORMAT_PROPERTY, DataFormat.class);
+                    if (!DataFormat.POJO.equals(dataFormat)) {
+                        throw new RuntimeException("The expected data format 
is POJO but was " + dataFormat);
+                    }
+                    Message in = exchange.getIn();
+                    // check the remote IP from the cxfMessage
+                    org.apache.cxf.message.Message cxfMessage
+                            = in.getHeader(CxfConstants.CAMEL_CXF_MESSAGE, 
org.apache.cxf.message.Message.class);
+                    if (cxfMessage == null) {
+                        throw new RuntimeException("Should get the cxfMessage 
instance from message header");
+                    }
+                    ServletRequest request = (ServletRequest) 
cxfMessage.get("HTTP.REQUEST");
+                    if (request == null) {
+                        throw new RuntimeException("Should get the 
ServletRequest");
+                    } else if (request.getRemoteAddr() == null) {
+                        throw new RuntimeException("Should get the 
RemoteAddress");
+                    }
+                    // Could verify the HttpRequest
+                    String contentType = in.getHeader(Exchange.CONTENT_TYPE, 
String.class);
+                    if (contentType == null) {
+                        throw new RuntimeException("Should get the 
contentType.");
+                    }
+
+                    // Get the parameter list
+                    List<?> parameter = in.getBody(List.class);
+                    // Get the operation name
+                    String operation = (String) 
in.getHeader(CxfConstants.OPERATION_NAME);
+                    Object result = operation + " " + parameter.get(0);
+                    // Put the result back
+                    exchange.getMessage().setBody(result);
+                    // set up the response context which force start document
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("org.apache.cxf.stax.force-start-document", 
Boolean.TRUE);
+                    exchange.getMessage().setHeader(Client.RESPONSE_CONTEXT, 
map);
+                })
+                
.when(header(CxfConstants.OPERATION_NAME).isEqualTo(ECHO_BOOLEAN_OPERATION)).process(exchange
 -> {
+                    Message in = exchange.getIn();
+                    // Get the parameter list
+                    List<?> parameter = in.getBody(List.class);
+                    // Put the result back
+                    exchange.getMessage().setBody(parameter.get(0));
+                });
+    }
+}
diff --git 
a/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/beans/Customer.java
 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/beans/Customer.java
new file mode 100644
index 00000000..a57866b6
--- /dev/null
+++ 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/beans/Customer.java
@@ -0,0 +1,65 @@
+/**
+ * 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.karaf.camel.test.beans;
+
+import java.util.Objects;
+
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "Customer")
+public class Customer {
+    private long id;
+    private String name;
+
+    public Customer() {
+    }
+
+    public Customer(long id, String name) {
+        setId(id);
+        setName(name);
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Customer customer = (Customer) o;
+        return id == customer.id && Objects.equals(name, customer.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, name);
+    }
+}
diff --git 
a/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/beans/CustomerService.java
 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/beans/CustomerService.java
new file mode 100644
index 00000000..5caf0823
--- /dev/null
+++ 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/beans/CustomerService.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.camel.test.beans;
+
+
+import java.io.InputStream;
+
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.Response;
+
+@Path("/customerservice/")
+public interface CustomerService {
+
+    @GET
+    @Path("/customers/{id}/")
+    Customer getCustomer(@PathParam("id") String id, @QueryParam("test") 
String test);
+
+    @PUT
+    @Path("/customers/{id}")
+    Response updateCustomer(Customer customer, @PathParam("id") String id);
+
+    @POST
+    @Path("/customers/")
+    Response newCustomer(Customer customer, @QueryParam("age") int age);
+
+    @Consumes("image/jpeg")
+    @POST
+    @Path("/customers/{id}/image_inputstream")
+    Response uploadImageInputStream(InputStream is);
+
+}
diff --git 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyServerEngineParser.java
 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/jaxws/HelloService.java
similarity index 63%
rename from 
components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyServerEngineParser.java
rename to 
tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/jaxws/HelloService.java
index a021b5a3..1a2c348b 100644
--- 
a/components/camel-cxf/camel-cxf-all/src/main/java/org/apache/camel/component/cxf/transport/http_jetty/blueprint/JettyServerEngineParser.java
+++ 
b/tests/features/camel-cxf/src/main/java/org/apache/karaf/camel/test/jaxws/HelloService.java
@@ -14,18 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.karaf.camel.test.jaxws;
 
-package org.apache.camel.component.cxf.transport.http_jetty.blueprint;
+import java.util.List;
 
-import org.w3c.dom.Element;
+public interface HelloService {
+    String sayHello();
 
-import org.apache.aries.blueprint.ParserContext;
-import 
org.apache.camel.component.cxf.configuration.blueprint.AbstractBPBeanDefinitionParser;
-import org.osgi.service.blueprint.reflect.Metadata;
+    void ping();
 
-public class JettyServerEngineParser extends AbstractBPBeanDefinitionParser {
+    int getInvocationCount();
+
+    String echo(String text) throws Exception;
+
+    Boolean echoBoolean(Boolean bool);
+
+    String complexParameters(List<String> par1, List<String> par2);
 
-    public Metadata parse(Element element, ParserContext context) {
-        return null;
-    }
 }
diff --git 
a/tests/features/camel-cxf/src/test/java/org/apache/karaf/camel/itest/CamelCxfITest.java
 
b/tests/features/camel-cxf/src/test/java/org/apache/karaf/camel/itest/CamelCxfITest.java
new file mode 100644
index 00000000..27c8afb9
--- /dev/null
+++ 
b/tests/features/camel-cxf/src/test/java/org/apache/karaf/camel/itest/CamelCxfITest.java
@@ -0,0 +1,199 @@
+/*
+ * 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.
+ */
+package org.apache.karaf.camel.itest;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.frontend.ClientFactoryBean;
+import org.apache.cxf.frontend.ClientProxyFactoryBean;
+import org.apache.karaf.camel.itests.AbstractCamelSingleFeatureRouteITest;
+import org.apache.karaf.camel.itests.AvailablePortProvider;
+import org.apache.karaf.camel.itests.CamelKarafTestHint;
+import org.apache.karaf.camel.itests.PaxExamWithExternalResource;
+import org.apache.karaf.camel.test.beans.Customer;
+import org.apache.karaf.camel.test.jaxws.HelloService;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.CoreOptions;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerClass;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.ops4j.pax.exam.OptionUtils.combine;
+
+@CamelKarafTestHint(externalResourceProvider = 
CamelCxfITest.ExternalResourceProviders.class,
+        additionalRequiredFeatures = "camel-undertow")
+@RunWith(PaxExamWithExternalResource.class)
+@ExamReactorStrategy(PerClass.class)
+public class CamelCxfITest extends AbstractCamelSingleFeatureRouteITest {
+
+    private static final String ECHO_REQUEST = "<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>"
+            + "<soap:Body><ns1:echo 
xmlns:ns1=\"http://jaxws.test.camel.karaf.apache.org/\";>"
+            + "<arg0 xmlns=\"http://jaxws.test.camel.karaf.apache.org/\";>Hello 
World!</arg0></ns1:echo></soap:Body></soap:Envelope>";
+    private static final String TEST_MESSAGE = "Hello World!";
+
+    private JAXBContext jaxb;
+    private final HttpClient client = HttpClient.newHttpClient();
+
+    @Before
+    public void initCtx() throws JAXBException {
+        this.jaxb = JAXBContext.newInstance(Customer.class);
+    }
+
+    @Test
+    public void testCxfWs() throws Exception {
+        testInvokingServiceFromCXFClient();
+        testXmlDeclaration();
+        testPublishEndpointUrl();
+    }
+
+    @Test
+    public void testCxfRs() throws Exception {
+        testGetCustomerOnlyHeaders();
+        testNewCustomerWithQueryParam();
+    }
+
+    private String getPortPathRs() {
+        return ExternalResourceProviders.getCxfRsPort() + 
"/CamelCxfRsRouteSupplier";
+    }
+
+    private String getWsEndpointAddress() {
+        return "http://localhost:"; + ExternalResourceProviders.getCxfWsPort() 
+ "/CamelCxfWsRouteSupplier/test";
+    }
+
+    @Override
+    protected List<String> installRequiredBundles() throws Exception {
+        List<String> bundles = new ArrayList<>();
+        // Using the wrap protocol to install the bundle with Import-Package=* 
to avoid the issue with the bad
+        // jakarta.xml.bind and jakarta.servlet import version ranges
+        
installBundle("wrap:mvn:org.apache.cxf/cxf-rt-transports-http-undertow/%s$overwrite=merge&Import-Package=*".formatted(System.getProperty("cxf-version")),
 true);
+        String undertowTransport = 
"org.apache.cxf.cxf-rt-transports-http-undertow";
+        assertBundleInstalledAndRunning(undertowTransport);
+        bundles.add(undertowTransport);
+        bundles.addAll(super.installRequiredBundles());
+        return bundles;
+    }
+
+    @Override
+    protected Option[] getAdditionalOptions() {
+        return combine(
+            super.getAdditionalOptions(), 
CoreOptions.systemProperty("cxf-version").value(System.getProperty("cxf.version"))
+        );
+    }
+
+    private void testGetCustomerOnlyHeaders() throws Exception {
+        URI uri = 
URI.create("http://localhost:%s/rest/customerservice/customers/123".formatted(getPortPathRs()));
+
+        HttpRequest request = HttpRequest.newBuilder()
+                .uri(uri)
+                .header("Accept", "text/xml")
+                .build();
+
+        HttpResponse<String> response = client.send(request, 
HttpResponse.BodyHandlers.ofString());
+        assertEquals(200, response.statusCode());
+        Customer entity = (Customer) jaxb.createUnmarshaller().unmarshal(new 
StringReader(response.body()));
+        assertEquals(123, entity.getId());
+    }
+
+    private void testNewCustomerWithQueryParam() throws Exception {
+        URI uri = 
URI.create("http://localhost:%s/rest/customerservice/customers?age=12".formatted(getPortPathRs()));
+        StringWriter sw = new StringWriter();
+        jaxb.createMarshaller().marshal(new Customer(123, "Raul"), sw);
+        HttpRequest request = HttpRequest.newBuilder()
+                .uri(uri)
+                .header("Content-Type", "text/xml")
+                .header("Accept", "text/xml")
+                .POST(HttpRequest.BodyPublishers.ofString(sw.toString()))
+                .build();
+
+        HttpResponse<String> response = client.send(request, 
HttpResponse.BodyHandlers.ofString());
+        assertEquals(200, response.statusCode());
+    }
+
+
+    private void testInvokingServiceFromCXFClient() throws Exception {
+        ClientProxyFactoryBean proxyFactory = new ClientProxyFactoryBean();
+        ClientFactoryBean clientBean = proxyFactory.getClientFactoryBean();
+        clientBean.setAddress(getWsEndpointAddress());
+        clientBean.setServiceClass(HelloService.class);
+        clientBean.setBus(BusFactory.newInstance().createBus());
+
+        HelloService helloService = (HelloService) proxyFactory.create();
+
+        String result = helloService.echo(TEST_MESSAGE);
+        assertEquals("We should get the echo string result from router", 
result, "echo " + TEST_MESSAGE);
+
+        Boolean bool = helloService.echoBoolean(Boolean.TRUE);
+        assertNotNull("The result should not be null", bool);
+        assertEquals("We should get the echo boolean result from router", 
"true", bool.toString());
+    }
+
+    private void testXmlDeclaration() throws Exception {
+        URI uri = URI.create(getWsEndpointAddress());
+        HttpRequest request = HttpRequest.newBuilder()
+                .uri(uri)
+                .header("Content-Type", "text/xml; charset=UTF-8")
+                .header("Accept", "text/xml")
+                .POST(HttpRequest.BodyPublishers.ofString(ECHO_REQUEST))
+                .build();
+        HttpResponse<String> response = client.send(request, 
HttpResponse.BodyHandlers.ofString());
+        assertEquals(200, response.statusCode());
+        String body = response.body();
+        assertTrue("Can't find the xml declaration.", body.startsWith("<?xml 
version=\"1.0\" encoding="));
+        assertTrue("The response content is incorrect.", body.contains("echo 
Hello World!"));
+    }
+
+    private void testPublishEndpointUrl() throws Exception {
+        URI uri = URI.create(getWsEndpointAddress()+ "?wsdl");
+        HttpRequest request = HttpRequest.newBuilder()
+                .uri(uri)
+                .header("Accept", "text/xml")
+                .build();
+        HttpResponse<String> response = client.send(request, 
HttpResponse.BodyHandlers.ofString());
+        assertEquals(200, response.statusCode());
+        assertTrue("Can't find the right service location.", 
response.body().contains("http://www.simple.com/services/test";));
+    }
+
+    public static final class ExternalResourceProviders {
+        public static final String CXF_RS_PORT = "cxf.rs.port";
+        public static final String CXF_WS_PORT = "cxf.ws.port";
+
+        public static AvailablePortProvider createAvailablePortProvider() {
+            return new AvailablePortProvider(List.of(CXF_RS_PORT, 
CXF_WS_PORT));
+        }
+
+        static String getCxfRsPort() {
+            return System.getProperty(CXF_RS_PORT);
+        }
+
+        static String getCxfWsPort() {
+            return System.getProperty(CXF_WS_PORT);
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/features/pom.xml b/tests/features/pom.xml
index 1c7dfe1f..38c18a94 100644
--- a/tests/features/pom.xml
+++ b/tests/features/pom.xml
@@ -65,6 +65,7 @@
         <module>camel-couchdb</module>
         <module>camel-crypto</module>
         <module>camel-csv</module>
+        <module>camel-cxf</module>
         <module>camel-disruptor</module>
         <module>camel-dns</module>
         <!-- TODO: Fix the integration test and re-add it 
https://github.com/apache/camel-karaf/issues/438 -->
@@ -238,7 +239,7 @@
                 <configuration>
                     <instructions>
                         <Export-Package>
-                            
org.apache.karaf.camel.test;version=${project.version}
+                            
org.apache.karaf.camel.test*;version=${project.version}
                         </Export-Package>
                         <Import-Package>
                             
org.apache.camel*;${camel-osgi-import-camel-version},

Reply via email to