You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2020/03/29 14:25:53 UTC

[camel] 01/02: CAMEL-14715 - Removed camel-test-karaf (camel-karaf migration)

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

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

commit 37956a246f1c7e7695970135774fd4b8cb0cae5d
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Sun Mar 29 16:21:21 2020 +0200

    CAMEL-14715 - Removed camel-test-karaf (camel-karaf migration)
---
 apache-camel/src/main/descriptors/common-bin.xml   |   1 -
 bom/camel-bom/pom.xml                              |   5 -
 components/camel-test-karaf/pom.xml                | 216 ----------
 .../services/org/apache/camel/other.properties     |   7 -
 .../src/generated/resources/test-karaf.json        |  14 -
 .../camel-test-karaf/src/main/docs/test-karaf.adoc |  10 -
 .../camel/test/karaf/AbstractFeatureTest.java      | 479 ---------------------
 .../camel/test/karaf/CamelKarafTestSupport.java    | 390 -----------------
 components/pom.xml                                 |   1 -
 docs/components/modules/ROOT/nav.adoc              |   1 -
 docs/components/modules/ROOT/pages/aws-xray.adoc   |   2 +-
 docs/components/modules/ROOT/pages/index.adoc      |   4 +-
 docs/components/modules/ROOT/pages/test-karaf.adoc |  11 -
 parent/pom.xml                                     |   5 -
 14 files changed, 2 insertions(+), 1144 deletions(-)

diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index 3e8bff3..cd819b9 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -350,7 +350,6 @@
         <include>org.apache.camel:camel-test</include>
         <include>org.apache.camel:camel-test-cdi</include>
         <include>org.apache.camel:camel-test-junit5</include>
-        <include>org.apache.camel:camel-test-karaf</include>
         <include>org.apache.camel:camel-test-spring</include>
         <include>org.apache.camel:camel-test-spring-junit5</include>
         <include>org.apache.camel:camel-testcontainers</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 563ef34..ad4b7a113 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -1715,11 +1715,6 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
-        <artifactId>camel-test-karaf</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.camel</groupId>
         <artifactId>camel-test-spring</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/camel-test-karaf/pom.xml b/components/camel-test-karaf/pom.xml
deleted file mode 100644
index fbb7701..0000000
--- a/components/camel-test-karaf/pom.xml
+++ /dev/null
@@ -1,216 +0,0 @@
-<?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</groupId>
-        <artifactId>components</artifactId>
-        <version>3.2.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>camel-test-karaf</artifactId>
-    <packaging>jar</packaging>
-
-    <name>Camel :: Test :: Karaf</name>
-    <description>Camel integration testing with Apache Karaf</description>
-
-    <properties>
-        <firstVersion>2.18.0</firstVersion>
-        <label>testing,java,osgi</label>
-
-        <karf-test-version>${karaf4-version}</karf-test-version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-junit4</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-container-karaf</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-link-mvn</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.inject</groupId>
-            <artifactId>javax.inject</artifactId>
-            <version>1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-            <version>${karaf4-version}</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>apache-karaf</artifactId>
-            <version>${karf-test-version}</version>
-            <type>tar.gz</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.configadmin</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <version>1.1.2</version>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>osgi.cmpn</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-support</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-test</artifactId>
-        </dependency>
-
-        <!-- test -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <pluginManagement>
-            <plugins>
-                <!-- Eclipse m2e Lifecycle Management -->
-                <plugin>
-                    <groupId>org.eclipse.m2e</groupId>
-                    <artifactId>lifecycle-mapping</artifactId>
-                    <version>${lifecycle-mapping-version}</version>
-                    <configuration>
-                        <lifecycleMappingMetadata>
-                            <pluginExecutions>
-                                <pluginExecution>
-                                    <pluginExecutionFilter>
-                                        <groupId>org.apache.servicemix.tooling</groupId>
-                                        <artifactId>depends-maven-plugin</artifactId>
-                                        <versionRange>${depends-maven-plugin-version}</versionRange>
-                                        <goals>
-                                            <goal>generate-depends-file</goal>
-                                        </goals>
-                                    </pluginExecutionFilter>
-                                    <action>
-                                        <ignore />
-                                    </action>
-                                </pluginExecution>
-                            </pluginExecutions>
-                        </lifecycleMappingMetadata>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-        <plugins>
-            <!-- generate dependencies versions -->
-            <plugin>
-                <groupId>org.apache.servicemix.tooling</groupId>
-                <artifactId>depends-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>generate-depends-file</id>
-                        <goals>
-                            <goal>generate-depends-file</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <!-- do not re-run these tests -->
-                    <rerunFailingTestsCount>0</rerunFailingTestsCount>
-                    <systemPropertyVariables>
-                        <karafVersion>${karaf4-version}</karafVersion>
-                    </systemPropertyVariables>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.camel</groupId>
-                <artifactId>camel-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <!-- Export-Package>org.apache.camel.test.karaf</Export-Package -->
-                        <DynamicImport-Package>*</DynamicImport-Package>
-                        <Import-Package />
-                        <_removeheaders>Import-Package, Private-Package, Include-Resource, Karaf-Info,
-                            Require-Capability
-                        </_removeheaders>
-                    </instructions>
-                </configuration>
-            </plugin>
-
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>ci-build-profile</id>
-            <activation>
-                <property>
-                    <name>maven.repo.local</name>
-                </property>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
-                            <!--
-                                when the local repo location has been specified, we need to pass
-                                on this information to PAX mvn url
-                            -->
-                            <argLine>-Dorg.ops4j.pax.url.mvn.localRepository=${maven.repo.local}</argLine>
-                            <systemPropertyVariables>
-                                <karafVersion>${karaf4-version}</karafVersion>
-                            </systemPropertyVariables>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-
-    </profiles>
-</project>
diff --git a/components/camel-test-karaf/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-test-karaf/src/generated/resources/META-INF/services/org/apache/camel/other.properties
deleted file mode 100644
index ca2a150..0000000
--- a/components/camel-test-karaf/src/generated/resources/META-INF/services/org/apache/camel/other.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# Generated by camel build tools - do NOT edit this file!
-name=test-karaf
-groupId=org.apache.camel
-artifactId=camel-test-karaf
-version=3.2.0-SNAPSHOT
-projectName=Camel :: Test :: Karaf
-projectDescription=Camel integration testing with Apache Karaf
diff --git a/components/camel-test-karaf/src/generated/resources/test-karaf.json b/components/camel-test-karaf/src/generated/resources/test-karaf.json
deleted file mode 100644
index 37d1409..0000000
--- a/components/camel-test-karaf/src/generated/resources/test-karaf.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "other": {
-    "kind": "other",
-    "name": "test-karaf",
-    "title": "Test Karaf",
-    "description": "Camel integration testing with Apache Karaf",
-    "deprecated": false,
-    "firstVersion": "2.18.0",
-    "label": "testing,java,osgi",
-    "groupId": "org.apache.camel",
-    "artifactId": "camel-test-karaf",
-    "version": "3.2.0-SNAPSHOT"
-  }
-}
diff --git a/components/camel-test-karaf/src/main/docs/test-karaf.adoc b/components/camel-test-karaf/src/main/docs/test-karaf.adoc
deleted file mode 100644
index 5668522..0000000
--- a/components/camel-test-karaf/src/main/docs/test-karaf.adoc
+++ /dev/null
@@ -1,10 +0,0 @@
-= Test Karaf
-
-*Available since Camel 2.18*
-
-Camel testing using Apache Karaf with Pax-Exam.
-
-This component allows to perform integration testing by running Karaf containers using Pax-Exam.
-
-The component is in development and needs some more polish to be ready.
-In addition there is also need for documentation.
diff --git a/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/AbstractFeatureTest.java b/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/AbstractFeatureTest.java
deleted file mode 100644
index 4297bdb..0000000
--- a/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/AbstractFeatureTest.java
+++ /dev/null
@@ -1,479 +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.test.karaf;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.net.URL;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Dictionary;
-import java.util.EnumSet;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.function.Consumer;
-
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Component;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.Language;
-import org.apache.karaf.features.FeaturesService;
-import org.junit.After;
-import org.junit.Before;
-import org.ops4j.pax.exam.CoreOptions;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.ProbeBuilder;
-import org.ops4j.pax.exam.TestProbeBuilder;
-import org.ops4j.pax.exam.karaf.container.internal.JavaVersionUtil;
-import org.ops4j.pax.exam.karaf.options.KarafDistributionOption;
-import org.ops4j.pax.exam.karaf.options.LogLevelOption;
-import org.ops4j.pax.exam.options.UrlReference;
-import org.ops4j.pax.exam.options.extra.VMOption;
-import org.ops4j.pax.tinybundles.core.TinyBundle;
-import org.ops4j.pax.tinybundles.core.TinyBundles;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.blueprint.container.BlueprintContainer;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.Assert.assertNotNull;
-import static org.ops4j.pax.exam.CoreOptions.maven;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
-import static org.ops4j.pax.exam.CoreOptions.vmOption;
-import static org.ops4j.pax.exam.CoreOptions.when;
-import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.configureConsole;
-import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfigurationFilePut;
-import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features;
-import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.keepRuntimeFolder;
-import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.logLevel;
-
-public abstract class AbstractFeatureTest {
-
-    public static final Long SERVICE_TIMEOUT = 30000L;
-    protected static final Logger LOG = LoggerFactory.getLogger(AbstractFeatureTest.class);
-
-    @Inject
-    protected BundleContext bundleContext;
-
-    @Inject
-    protected BlueprintContainer blueprintContainer;
-
-    @Inject
-    protected FeaturesService featuresService;
-
-    @ProbeBuilder
-    public TestProbeBuilder probeConfiguration(TestProbeBuilder probe) {
-        // makes sure the generated Test-Bundle contains this import!
-        probe.setHeader(Constants.DYNAMICIMPORT_PACKAGE, "*");
-        return probe;
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        LOG.info("setUp() using BundleContext: {}", bundleContext);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        LOG.info("tearDown()");
-    }
-
-    protected Bundle installBlueprintAsBundle(String name, URL url, boolean start) throws BundleException {
-        return installBlueprintAsBundle(name, url, start, bundle -> { });
-    }
-
-    protected Bundle installBlueprintAsBundle(String name, URL url, boolean start, Consumer<Object> consumer) throws BundleException {
-        // TODO Type Consumer<TinyBundle> cannot be used for this method signature to avoid bundle dependency to pax tinybundles
-        TinyBundle bundle = TinyBundles.bundle();
-        bundle.add("OSGI-INF/blueprint/blueprint-" + name.toLowerCase(Locale.ENGLISH) + ".xml", url);
-        bundle.set("Manifest-Version", "2")
-                .set("Bundle-ManifestVersion", "2")
-                .set("Bundle-SymbolicName", name)
-                .set("Bundle-Version", "1.0.0")
-                .set(Constants.DYNAMICIMPORT_PACKAGE, "*");
-        consumer.accept(bundle);
-        Bundle answer = bundleContext.installBundle(name, bundle.build());
-
-        if (start) {
-            answer.start();
-        }
-        return answer;
-    }
-
-    protected Bundle installSpringAsBundle(String name, URL url, boolean start) throws BundleException {
-        return installSpringAsBundle(name, url, start, bundle -> { });
-    }
-
-    protected Bundle installSpringAsBundle(String name, URL url, boolean start, Consumer<Object> consumer) throws BundleException {
-        // TODO Type Consumer<TinyBundle> cannot be used for this method signature to avoid bundle dependency to pax tinybundles
-        TinyBundle bundle = TinyBundles.bundle();
-        bundle.add("META-INF/spring/spring-" + name.toLowerCase(Locale.ENGLISH) + ".xml", url);
-        bundle.set("Manifest-Version", "2")
-                .set("Bundle-ManifestVersion", "2")
-                .set("Bundle-SymbolicName", name)
-                .set("Bundle-Version", "1.0.0");
-        consumer.accept(bundle);
-        Bundle answer = bundleContext.installBundle(name, bundle.build());
-
-        if (start) {
-            answer.start();
-        }
-        return answer;
-    }
-
-    protected void installCamelFeature(String mainFeature) throws Exception {
-        if (!mainFeature.startsWith("camel-")) {
-            mainFeature = "camel-" + mainFeature;
-        }
-        LOG.info("Install main feature: {}", mainFeature);
-        // do not refresh bundles causing out bundle context to be invalid
-        // TODO: see if we can find a way maybe to install camel.xml as bundle/feature instead of part of unit test (see src/test/resources/OSGI-INF/blueprint)
-        featuresService.installFeature(mainFeature, EnumSet.of(FeaturesService.Option.NoAutoRefreshBundles));
-    }
-
-    protected void overridePropertiesWithConfigAdmin(String pid, Properties props) throws IOException {
-        ConfigurationAdmin configAdmin = getOsgiService(bundleContext, ConfigurationAdmin.class);
-        // passing null as second argument ties the configuration to correct bundle.
-        Configuration config = configAdmin.getConfiguration(pid, null);
-        if (config == null) {
-            throw new IllegalArgumentException("Cannot find configuration with pid " + pid + " in OSGi ConfigurationAdmin service.");
-        }
-
-        // let's merge configurations
-        Dictionary<String, Object> currentProperties = config.getProperties();
-        Dictionary newProps = new Properties();
-        if (currentProperties == null) {
-            currentProperties = newProps;
-        }
-        for (Enumeration<String> ek = currentProperties.keys(); ek.hasMoreElements();) {
-            String k = ek.nextElement();
-            newProps.put(k, currentProperties.get(k));
-        }
-        for (String p : props.stringPropertyNames()) {
-            newProps.put(p, props.getProperty(p));
-        }
-
-        LOG.info("Updating ConfigAdmin {} by overriding properties {}", config, newProps);
-        config.update(newProps);
-    }
-
-    protected void testComponent(String component) throws Exception {
-        testComponent("camel-" + component, component);
-    }
-
-    protected void testComponent(String mainFeature, String component) throws Exception {
-        LOG.info("Looking up CamelContext(myCamel) in OSGi Service Registry");
-
-        installCamelFeature(mainFeature);
-
-        CamelContext camelContext = getOsgiService(bundleContext, CamelContext.class, "(camel.context.name=myCamel)", SERVICE_TIMEOUT);
-        assertNotNull("Cannot find CamelContext with name myCamel", camelContext);
-
-        LOG.info("Getting Camel component: {}", component);
-        // do not auto start the component as it may not have been configured properly and fail in its start method
-        Component comp = camelContext.getComponent(component, true, false);
-        assertNotNull("Cannot get component with name: " + component, comp);
-
-        LOG.info("Found Camel component: {} instance: {} with className: {}", component, comp, comp.getClass());
-    }
-
-    protected void testDataFormat(String dataFormat) throws Exception {
-        testDataFormat("camel-" + dataFormat, dataFormat);
-    }
-
-    protected void testDataFormat(String mainFeature, String dataFormat) throws Exception {
-        LOG.info("Looking up CamelContext(myCamel) in OSGi Service Registry");
-
-        installCamelFeature(mainFeature);
-
-        CamelContext camelContext = getOsgiService(bundleContext, CamelContext.class, "(camel.context.name=myCamel)", SERVICE_TIMEOUT);
-        assertNotNull("Cannot find CamelContext with name myCamel", camelContext);
-
-        LOG.info("Getting Camel dataformat: {}", dataFormat);
-        DataFormat df = camelContext.resolveDataFormat(dataFormat);
-        assertNotNull("Cannot get dataformat with name: " + dataFormat, df);
-
-        LOG.info("Found Camel dataformat: {} instance: {} with className: {}", dataFormat, df, df.getClass());
-    }
-
-    protected void testLanguage(String language) throws Exception {
-        testLanguage("camel-" + language, language);
-    }
-
-    protected void testLanguage(String mainFeature, String language) throws Exception {
-        LOG.info("Looking up CamelContext(myCamel) in OSGi Service Registry");
-
-        installCamelFeature(mainFeature);
-
-        CamelContext camelContext = getOsgiService(bundleContext, CamelContext.class, "(camel.context.name=myCamel)", 20000);
-        assertNotNull("Cannot find CamelContext with name myCamel", camelContext);
-
-        LOG.info("Getting Camel language: {}", language);
-        Language lan = camelContext.resolveLanguage(language);
-        assertNotNull("Cannot get language with name: " + language, lan);
-
-        LOG.info("Found Camel language: {} instance: {} with className: {}", language, lan, lan.getClass());
-    }
-
-    public static String extractName(Class<?> clazz) {
-        String name = clazz.getName();
-        int id0 = name.indexOf("Camel") + "Camel".length();
-        int id1 = name.indexOf("Test");
-        StringBuilder sb = new StringBuilder();
-        for (int i = id0; i < id1; i++) {
-            char c = name.charAt(i);
-            if (Character.isUpperCase(c) && sb.length() > 0) {
-                sb.append("-");
-            }
-            sb.append(Character.toLowerCase(c));
-        }
-        return sb.toString();
-    }
-
-    public static UrlReference getCamelKarafFeatureUrl() {
-        return mavenBundle().
-                groupId("org.apache.camel.karaf").
-                artifactId("apache-camel").
-                version(getCamelKarafFeatureVersion()).
-                type("xml/features");
-    }
-
-    private static String getCamelKarafFeatureVersion() {
-        String camelKarafFeatureVersion = System.getProperty("camelKarafFeatureVersion");
-        if (camelKarafFeatureVersion == null) {
-            throw new RuntimeException("Please specify the maven artifact version to use for org.apache.camel.karaf/apache-camel through the camelKarafFeatureVersion System property");
-        }
-        return camelKarafFeatureVersion;
-    }
-
-    private static void switchPlatformEncodingToUTF8() {
-        try {
-            System.setProperty("file.encoding", "UTF-8");
-            Field charset = Charset.class.getDeclaredField("defaultCharset");
-            charset.setAccessible(true);
-            charset.set(null, null);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private static String getKarafVersion() {
-        InputStream ins = AbstractFeatureTest.class.getResourceAsStream("/META-INF/maven/dependencies.properties");
-        Properties p = new Properties();
-        try {
-            p.load(ins);
-        } catch (Throwable t) {
-            // ignore
-        }
-        String karafVersion = p.getProperty("org.apache.karaf/apache-karaf/version");
-        if (karafVersion == null) {
-            karafVersion = System.getProperty("karafVersion");
-        }
-        if (karafVersion == null) {
-            // setup the default version of it
-            karafVersion = "4.1.0";
-        }
-        return karafVersion;
-    }
-
-    public static Option[] configure(String... extra) {
-
-        List<String> camel = new ArrayList<>();
-        camel.add("camel");
-        if (extra != null && extra.length > 0) {
-            for (String e : extra) {
-                camel.add(e);
-            }
-        }
-        final String[] camelFeatures = camel.toArray(new String[camel.size()]);
-
-        switchPlatformEncodingToUTF8();
-        String karafVersion = getKarafVersion();
-        LOG.info("*** Apache Karaf version is " + karafVersion + " ***");
-
-        Option[] options = new Option[]{
-            // for remote debugging
-//            new VMOption("-Xdebug"),
-//            new VMOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5008"),
-
-            KarafDistributionOption.karafDistributionConfiguration()
-                    .frameworkUrl(maven().groupId("org.apache.karaf").artifactId("apache-karaf").type("tar.gz").versionAsInProject())
-                    .karafVersion(karafVersion)
-                    .name("Apache Karaf")
-                    .useDeployFolder(false).unpackDirectory(new File("target/paxexam/unpack/")),
-            logLevel(LogLevelOption.LogLevel.INFO),
-
-            // keep the folder so we can look inside when something fails
-            keepRuntimeFolder(),
-
-            // Disable the SSH port
-            configureConsole().ignoreRemoteShell(),
-
-            // need to modify the jre.properties to export some com.sun packages that some features rely on
-//            KarafDistributionOption.replaceConfigurationFile("etc/jre.properties", new File("src/test/resources/jre.properties")),
-
-            vmOption("-Dfile.encoding=UTF-8"),
-
-            // Disable the Karaf shutdown port
-            editConfigurationFilePut("etc/custom.properties", "karaf.shutdown.port", "-1"),
-
-            // log config
-            editConfigurationFilePut("etc/custom.properties", "karaf.log", "${karaf.data}/log"),
-
-            // Assign unique ports for Karaf
-//            editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port", Integer.toString(AvailablePortFinder.getNextAvailable())),
-//            editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiRegistryPort", Integer.toString(AvailablePortFinder.getNextAvailable())),
-//            editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiServerPort", Integer.toString(AvailablePortFinder.getNextAvailable())),
-
-            // install junit
-            CoreOptions.junitBundles(),
-
-            // install camel
-            features(getCamelKarafFeatureUrl(), camelFeatures),
-
-            // install camel-test-karaf as bundle (not feature as the feature causes a bundle refresh that invalidates the @Inject bundleContext)
-            mavenBundle().groupId("org.apache.camel").artifactId("camel-test-karaf").versionAsInProject(),
-            when(JavaVersionUtil.getMajorVersion() >= 9)
-                    .useOptions(
-                    systemProperty("pax.exam.osgi.`unresolved.fail").value("true"),
-                    systemProperty("java.awt.headless").value("true"),
-                    new VMOption("--add-reads=java.xml=java.logging"),
-                    new VMOption("--add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED"),
-                    new VMOption("--patch-module"),
-                    new VMOption("java.base=lib/endorsed/org.apache.karaf.specs.locator-"
-                            + System.getProperty("karafVersion", "4.2.4") + ".jar"),
-                    new VMOption("--patch-module"),
-                    new VMOption("java.xml=lib/endorsed/org.apache.karaf.specs.java.xml-"
-                            + System.getProperty("karafVersion", "4.2.4") + ".jar"),
-                    new VMOption("--add-opens"),
-                    new VMOption("java.base/java.security=ALL-UNNAMED"),
-                    new VMOption("--add-opens"),
-                    new VMOption("java.base/java.net=ALL-UNNAMED"),
-                    new VMOption("--add-opens"),
-                    new VMOption("java.base/java.lang=ALL-UNNAMED"),
-                    new VMOption("--add-opens"),
-                    new VMOption("java.base/java.util=ALL-UNNAMED"),
-                    new VMOption("--add-opens"),
-                    new VMOption("java.naming/javax.naming.spi=ALL-UNNAMED"),
-                    new VMOption("--add-opens"),
-                    new VMOption("java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED"),
-                    new VMOption("--add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED"),
-                    new VMOption("--add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED"),
-                    new VMOption("--add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED"),
-                    new VMOption("--add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED"),
-                    new VMOption("-classpath"),
-                    new VMOption("lib/jdk9plus/*" + File.pathSeparator + "lib/boot/*")
-            )
-        };
-
-        return options;
-    }
-
-    protected <T> T getOsgiService(BundleContext bundleContext, Class<T> type) {
-        return getOsgiService(bundleContext, type, null, SERVICE_TIMEOUT);
-    }
-
-    protected <T> T getOsgiService(BundleContext bundleContext, Class<T> type, long timeout) {
-        return getOsgiService(bundleContext, type, null, timeout);
-    }
-
-    @SuppressWarnings("unchecked")
-    public static <T> T getOsgiService(BundleContext bundleContext, Class<T> type, String filter, long timeout) {
-        ServiceTracker tracker;
-        try {
-            String flt;
-            if (filter != null) {
-                if (filter.startsWith("(")) {
-                    flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")" + filter + ")";
-                } else {
-                    flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")(" + filter + "))";
-                }
-            } else {
-                flt = "(" + Constants.OBJECTCLASS + "=" + type.getName() + ")";
-            }
-            Filter osgiFilter = FrameworkUtil.createFilter(flt);
-            tracker = new ServiceTracker(bundleContext, osgiFilter, null);
-            tracker.open(true);
-            // Note that the tracker is not closed to keep the reference
-            // This is buggy, as the service reference may change i think
-            Object svc = tracker.waitForService(timeout);
-
-            if (svc == null) {
-                Dictionary<?, ?> dic = bundleContext.getBundle().getHeaders();
-                LOG.warn("Test bundle headers: " + explode(dic));
-
-                for (ServiceReference ref : asCollection(bundleContext.getAllServiceReferences(null, null))) {
-                    LOG.warn("ServiceReference: " + ref + ", bundle: " + ref.getBundle() + ", symbolicName: " + ref.getBundle().getSymbolicName());
-                }
-
-                for (ServiceReference ref : asCollection(bundleContext.getAllServiceReferences(null, flt))) {
-                    LOG.warn("Filtered ServiceReference: " + ref + ", bundle: " + ref.getBundle() + ", symbolicName: " + ref.getBundle().getSymbolicName());
-                }
-
-                throw new RuntimeException("Gave up waiting for service " + flt);
-            }
-            return type.cast(svc);
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException("Invalid filter", e);
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * Explode the dictionary into a <code>,</code> delimited list of <code>key=value</code> pairs.
-     */
-    private static String explode(Dictionary<?, ?> dictionary) {
-        Enumeration<?> keys = dictionary.keys();
-        StringBuilder result = new StringBuilder();
-        while (keys.hasMoreElements()) {
-            Object key = keys.nextElement();
-            result.append(String.format("%s=%s", key, dictionary.get(key)));
-            if (keys.hasMoreElements()) {
-                result.append(", ");
-            }
-        }
-        return result.toString();
-    }
-
-    /**
-     * Provides an iterable collection of references, even if the original array is <code>null</code>.
-     */
-    private static Collection<ServiceReference> asCollection(ServiceReference[] references) {
-        return references == null ? new ArrayList<>(0) : Arrays.asList(references);
-    }
-
-}
diff --git a/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/CamelKarafTestSupport.java b/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/CamelKarafTestSupport.java
deleted file mode 100644
index 992af1e..0000000
--- a/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/CamelKarafTestSupport.java
+++ /dev/null
@@ -1,390 +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.test.karaf;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.PrintStream;
-import java.net.URL;
-import java.security.Principal;
-import java.security.PrivilegedExceptionAction;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.FutureTask;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXServiceURL;
-import javax.security.auth.Subject;
-
-import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.ProbeBuilder;
-import org.ops4j.pax.exam.TestProbeBuilder;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class CamelKarafTestSupport extends CamelTestSupport {
-
-    static final Long COMMAND_TIMEOUT = 30000L;
-    static final Long SERVICE_TIMEOUT = 30000L;
-
-    protected ExecutorService executor = Executors.newCachedThreadPool();
-
-    @Inject
-    protected BundleContext bundleContext;
-
-    @Inject
-    protected FeaturesService featuresService;
-
-    @ProbeBuilder
-    public TestProbeBuilder probeConfiguration(TestProbeBuilder probe) {
-        probe.setHeader(Constants.DYNAMICIMPORT_PACKAGE, "*,org.apache.felix.service.*;status=provisional");
-        return probe;
-    }
-
-    public File getConfigFile(String path) {
-        URL res = this.getClass().getResource(path);
-        if (res == null) {
-            throw new RuntimeException("Config resource " + path + " not found");
-        }
-        return new File(res.getFile());
-    }
-
-    public static Option[] configure(String... extra) {
-        return AbstractFeatureTest.configure(extra);
-    }
-
-    /**
-     * Executes a shell command and returns output as a String.
-     * Commands have a default timeout of 10 seconds.
-     *
-     * @param command The command to execute
-     * @param principals The principals (e.g. RolePrincipal objects) to run the command under
-     */
-    protected String executeCommand(final String command, Principal... principals) {
-        return executeCommand(command, COMMAND_TIMEOUT, false, principals);
-    }
-
-    /**
-     * Executes a shell command and returns output as a String.
-     * Commands have a default timeout of 10 seconds.
-     *
-     * @param command    The command to execute.
-     * @param timeout    The amount of time in millis to wait for the command to execute.
-     * @param silent     Specifies if the command should be displayed in the screen.
-     * @param principals The principals (e.g. RolePrincipal objects) to run the command under
-     */
-    protected String executeCommand(final String command, final Long timeout, final Boolean silent, final Principal... principals) {
-
-        waitForCommandService(command);
-        String response;
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        final PrintStream printStream = new PrintStream(byteArrayOutputStream);
-        final Callable<String> commandCallable = new Callable<String>() {
-            @Override
-            public String call() throws Exception {
-                try {
-                    if (!silent) {
-                        System.err.println(command);
-                    }
-                    final CommandProcessor commandProcessor = getOsgiService(CommandProcessor.class);
-                    final CommandSession commandSession = commandProcessor.createSession(System.in, printStream, System.err);
-                    commandSession.execute(command);
-                } catch (Exception e) {
-                    throw new RuntimeException(e.getMessage(), e);
-                }
-                printStream.flush();
-                return byteArrayOutputStream.toString();
-            }
-        };
-
-        FutureTask<String> commandFuture;
-        if (principals.length == 0) {
-            commandFuture = new FutureTask<>(commandCallable);
-        } else {
-            // If principals are defined, run the command callable via Subject.doAs()
-            commandFuture = new FutureTask<>(new Callable<String>() {
-                @Override
-                public String call() throws Exception {
-                    Subject subject = new Subject();
-                    subject.getPrincipals().addAll(Arrays.asList(principals));
-                    return Subject.doAs(subject, new PrivilegedExceptionAction<String>() {
-                        @Override
-                        public String run() throws Exception {
-                            return commandCallable.call();
-                        }
-                    });
-                }
-            });
-        }
-
-
-        try {
-            executor.submit(commandFuture);
-            response = commandFuture.get(timeout, TimeUnit.MILLISECONDS);
-        } catch (Exception e) {
-            e.printStackTrace(System.err);
-            response = "SHELL COMMAND TIMED OUT: ";
-        }
-
-        return response;
-    }
-
-    private void waitForCommandService(String command) {
-        // the commands are represented by services. Due to the asynchronous nature of services they may not be
-        // immediately available. This code waits the services to be available, in their secured form. It
-        // means that the code waits for the command service to appear with the roles defined.
-    
-        if (command == null || command.length() == 0) {
-            return;
-        }
-       
-        int spaceIdx = command.indexOf(' ');
-        if (spaceIdx > 0) {
-            command = command.substring(0, spaceIdx);
-        }
-        int colonIndx = command.indexOf(':');
-        
-        try {
-            if (colonIndx > 0) {
-                String scope = command.substring(0, colonIndx);
-                String function = command.substring(colonIndx + 1);
-                waitForService("(&(osgi.command.scope=" + scope + ")(osgi.command.function=" + function + "))", SERVICE_TIMEOUT);
-            } else {
-                waitForService("(osgi.command.function=" + command + ")", SERVICE_TIMEOUT);
-            }
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private void waitForService(String filter, long timeout) throws InvalidSyntaxException,
-        InterruptedException {
-        
-        ServiceTracker st = new ServiceTracker(bundleContext,
-                                               bundleContext.createFilter(filter),
-                                               null);
-        try {
-            st.open();
-            st.waitForService(timeout);
-        } finally {
-            st.close();
-        }
-    }
-
-    protected <T> T getOsgiService(Class<T> type, long timeout) {
-        return getOsgiService(type, null, timeout);
-    }
-
-    protected <T> T getOsgiService(Class<T> type) {
-        return getOsgiService(type, null, SERVICE_TIMEOUT);
-    }
-
-    @SuppressWarnings("unchecked")
-    protected <T> T getOsgiService(Class<T> type, String filter, long timeout) {
-        ServiceTracker tracker = null;
-        try {
-            String flt;
-            if (filter != null) {
-                if (filter.startsWith("(")) {
-                    flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")" + filter + ")";
-                } else {
-                    flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")(" + filter + "))";
-                }
-            } else {
-                flt = "(" + Constants.OBJECTCLASS + "=" + type.getName() + ")";
-            }
-            Filter osgiFilter = FrameworkUtil.createFilter(flt);
-            tracker = new ServiceTracker(bundleContext, osgiFilter, null);
-            tracker.open(true);
-            // Note that the tracker is not closed to keep the reference
-            // This is buggy, as the service reference may change i think
-            Object svc = type.cast(tracker.waitForService(timeout));
-            if (svc == null) {
-                Dictionary dic = bundleContext.getBundle().getHeaders();
-                System.err.println("Test bundle headers: " + explode(dic));
-
-                for (ServiceReference ref : asCollection(bundleContext.getAllServiceReferences(null, null))) {
-                    System.err.println("ServiceReference: " + ref);
-                }
-
-                for (ServiceReference ref : asCollection(bundleContext.getAllServiceReferences(null, flt))) {
-                    System.err.println("Filtered ServiceReference: " + ref);
-                }
-
-                throw new RuntimeException("Gave up waiting for service " + flt);
-            }
-            return type.cast(svc);
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException("Invalid filter", e);
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /*
-    * Explode the dictionary into a ,-delimited list of key=value pairs
-    */
-    private static String explode(Dictionary dictionary) {
-        Enumeration keys = dictionary.keys();
-        StringBuilder sb = new StringBuilder();
-        while (keys.hasMoreElements()) {
-            Object key = keys.nextElement();
-            sb.append(String.format("%s=%s", key, dictionary.get(key)));
-            if (keys.hasMoreElements()) {
-                sb.append(", ");
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Provides an iterable collection of references, even if the original array is null
-     */
-    private static Collection<ServiceReference> asCollection(ServiceReference[] references) {
-        return references != null ? Arrays.asList(references) : Collections.<ServiceReference>emptyList();
-    }
-
-    public JMXConnector getJMXConnector() throws Exception {
-        return getJMXConnector("karaf", "karaf");
-    }
-
-    public JMXConnector getJMXConnector(String userName, String passWord) throws Exception {
-        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-root");
-        Hashtable<String, Object> env = new Hashtable<>();
-        String[] credentials = new String[]{userName, passWord};
-        env.put("jmx.remote.credentials", credentials);
-        JMXConnector connector = JMXConnectorFactory.connect(url, env);
-        return connector;
-    }
-
-    public void assertFeatureInstalled(String featureName) {
-        try {
-            Feature[] features = featuresService.listInstalledFeatures();
-            for (Feature feature : features) {
-                if (featureName.equals(feature.getName())) {
-                    return;
-                }
-            }
-            fail("Feature " + featureName + " should be installed but is not");
-        } catch (Exception e) {
-            throw RuntimeCamelException.wrapRuntimeCamelException(e);
-        }
-    }
-
-    public void assertFeatureInstalled(String featureName, String featureVersion) {
-        try {
-            Feature[] features = featuresService.listInstalledFeatures();
-            for (Feature feature : features) {
-                if (featureName.equals(feature.getName()) && featureVersion.equals(feature.getVersion())) {
-                    return;
-                }
-            }
-            fail("Feature " + featureName + "/" + featureVersion + " should be installed but is not");
-        } catch (Exception e) {
-            throw RuntimeCamelException.wrapRuntimeCamelException(e);
-        }
-    }
-    
-    protected void installAndAssertFeature(String feature) throws Exception {
-        featuresService.installFeature(feature);
-        assertFeatureInstalled(feature);
-    }
-
-    protected void installAndAssertFeature(String feature, String version) throws Exception {
-        featuresService.installFeature(feature, version);
-        assertFeatureInstalled(feature, version);
-    }
-
-    protected void installAssertAndUninstallFeature(String feature) throws Exception {
-        Set<Feature> featuresBefore = new HashSet<>(Arrays.asList(featuresService.listInstalledFeatures()));
-        try {
-            featuresService.installFeature(feature);
-            assertFeatureInstalled(feature);
-        } finally {
-            uninstallNewFeatures(featuresBefore);
-        }
-    }
-
-    protected void installAssertAndUninstallFeature(String feature, String version) throws Exception {
-        Set<Feature> featuresBefore = new HashSet<>(Arrays.asList(featuresService.listInstalledFeatures()));
-        try {
-            featuresService.installFeature(feature, version);
-            assertFeatureInstalled(feature, version);
-        } finally {
-            uninstallNewFeatures(featuresBefore);
-        }
-    }
-
-    protected void installAssertAndUninstallFeatures(String... feature) throws Exception {
-        Set<Feature> featuresBefore = new HashSet<>(Arrays.asList(featuresService.listInstalledFeatures()));
-        try {
-            for (String curFeature : feature) {
-                featuresService.installFeature(curFeature);
-                assertFeatureInstalled(curFeature);
-            }
-        } finally {
-            uninstallNewFeatures(featuresBefore);
-        }
-    }
-
-    /**
-     * The feature service does not uninstall feature dependencies when uninstalling a single feature.
-     * So we need to make sure we uninstall all features that were newly installed.
-     */
-    protected void uninstallNewFeatures(Set<Feature> featuresBefore) {
-        try {
-            Feature[] features = featuresService.listInstalledFeatures();
-            for (Feature curFeature : features) {
-                if (!featuresBefore.contains(curFeature)) {
-                    try {
-                        System.out.println("Uninstalling " + curFeature.getName());
-                        featuresService.uninstallFeature(curFeature.getName(), curFeature.getVersion());
-                    } catch (Exception e) {
-                        // ignore
-                    }
-                }
-            }
-        } catch (Exception e) {
-            throw RuntimeCamelException.wrapRuntimeCamelException(e);
-        }
-    }
-
-}
diff --git a/components/pom.xml b/components/pom.xml
index 04f9ae1..70abb2d 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -60,7 +60,6 @@
         <!-- we want to test these modules first to catch any errors early as possible -->
         <module>camel-test</module>
         <module>camel-test-cdi</module>
-        <module>camel-test-karaf</module>
         <module>camel-test-spring</module>
         <module>camel-testcontainers</module>
         <module>camel-testcontainers-spring</module>
diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index 1f6a866..a00ce88 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -333,7 +333,6 @@
 ** xref:stub-component.adoc[Stub Component]
 ** xref:swagger-java.adoc[Swagger Java Component]
 ** xref:telegram-component.adoc[Telegram Component]
-** xref:test-karaf.adoc[Test Karaf]
 ** xref:test-junit5.adoc[Test Module]
 ** xref:test.adoc[Test Module]
 ** xref:test-spring.adoc[Test Spring]
diff --git a/docs/components/modules/ROOT/pages/aws-xray.adoc b/docs/components/modules/ROOT/pages/aws-xray.adoc
index cce689b..4e34a1b 100644
--- a/docs/components/modules/ROOT/pages/aws-xray.adoc
+++ b/docs/components/modules/ROOT/pages/aws-xray.adoc
@@ -21,7 +21,7 @@ To include both, AWS XRay and Camel, dependencies use the following Maven import
       <dependency>
         <groupId>com.amazonaws</groupId>
         <artifactId>aws-xray-recorder-sdk-bom</artifactId>
-        <version>1.3.1</version>
+        <version>2.4.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
diff --git a/docs/components/modules/ROOT/pages/index.adoc b/docs/components/modules/ROOT/pages/index.adoc
index 1e40650..28e2016 100644
--- a/docs/components/modules/ROOT/pages/index.adoc
+++ b/docs/components/modules/ROOT/pages/index.adoc
@@ -827,7 +827,7 @@ Number of Languages: 17 in 11 JAR artifacts (0 deprecated)
 == Miscellaneous Components
 
 // others: START
-Number of Miscellaneous Components: 34 in 34 JAR artifacts (0 deprecated)
+Number of Miscellaneous Components: 33 in 33 JAR artifacts (0 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -885,8 +885,6 @@ Number of Miscellaneous Components: 34 in 34 JAR artifacts (0 deprecated)
 
 | xref:test-junit5.adoc[Test JUnit5] (camel-test-junit5) | 3.0 | Camel unit testing with JUnit 5
 
-| xref:test-karaf.adoc[Test Karaf] (camel-test-karaf) | 2.18 | Camel integration testing with Apache Karaf
-
 | xref:test-spring.adoc[Test Spring] (camel-test-spring) | 2.10 | Camel unit testing with Spring
 
 | xref:test-spring-junit5.adoc[Test Spring JUnit5] (camel-test-spring-junit5) | 3.0 | Camel unit testing with Spring and JUnit 5
diff --git a/docs/components/modules/ROOT/pages/test-karaf.adoc b/docs/components/modules/ROOT/pages/test-karaf.adoc
deleted file mode 100644
index 22cfe4d..0000000
--- a/docs/components/modules/ROOT/pages/test-karaf.adoc
+++ /dev/null
@@ -1,11 +0,0 @@
-= Test Karaf
-:page-source: components/camel-test-karaf/src/main/docs/test-karaf.adoc
-
-*Available since Camel 2.18*
-
-Camel testing using Apache Karaf with Pax-Exam.
-
-This component allows to perform integration testing by running Karaf containers using Pax-Exam.
-
-The component is in development and needs some more polish to be ready.
-In addition there is also need for documentation.
diff --git a/parent/pom.xml b/parent/pom.xml
index dabb498..2f41935 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -2421,11 +2421,6 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
-        <artifactId>camel-test-karaf</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.camel</groupId>
         <artifactId>camel-test-spring</artifactId>
         <version>${project.version}</version>
       </dependency>