You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/08/21 11:55:40 UTC

[camel] 01/14: CAMEL-19765: camel-core - SPI for DumpRouteStrategy.

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

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

commit 6ddbcc01a416163c9f7a9a9178f51a72e141acfe
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Aug 19 07:42:58 2023 +0200

    CAMEL-19765: camel-core - SPI for DumpRouteStrategy.
---
 .../org/apache/camel/spi/DumpRoutesStrategy.java   |  36 +++++
 .../camel/impl/engine/AbstractCamelContext.java    |   4 +
 .../impl/engine/BaseExecutorServiceManager.java    |   4 +-
 .../camel/impl/engine/SimpleCamelContext.java      |  34 +++++
 .../camel/impl/DefaultDumpRoutesStrategy.java      | 154 +++++++++++++++++++++
 .../services/org/apache/camel/default-dump-routes  |   2 +
 .../org/apache/camel/impl/DefaultCamelContext.java | 117 +---------------
 .../camel/builder/FluentProducerTemplateTest.java  |   4 +-
 .../apache/camel/builder/NotifyBuilderTest.java    |   3 +-
 .../catalog/CustomEndpointUriFactoryTest.java      |   3 +-
 .../bean/BeanInfoAMoreComplexOverloadedTest.java   |   1 -
 .../bean/BeanInfoWithBridgedMethodTest.java        |   9 +-
 .../component/bean/BeanProxyNoBindingTest.java     |   2 +-
 .../component/bean/BeanRefMethodNotFoundTest.java  |   2 +-
 .../camel/processor/async/MyAsyncComponent.java    |   1 -
 .../java/org/apache/camel/util/ObjectHelper.java   |   1 -
 .../java/org/apache/camel/util/StringHelper.java   |   7 +-
 17 files changed, 251 insertions(+), 133 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/DumpRoutesStrategy.java b/core/camel-api/src/main/java/org/apache/camel/spi/DumpRoutesStrategy.java
new file mode 100644
index 00000000000..d03695f9bcd
--- /dev/null
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/DumpRoutesStrategy.java
@@ -0,0 +1,36 @@
+/*
+ * 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.spi;
+
+/**
+ * Strategy for dumping routes during startup dump all loaded routes (incl rests and route templates).
+ */
+public interface DumpRoutesStrategy {
+
+    /**
+     * Service factory key.
+     */
+    String FACTORY = "dump-routes";
+
+    /**
+     * Dump routes
+     *
+     * @param format xml or yaml
+     */
+    void dumpRoutes(String format);
+
+}
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index c92234628a6..1b18b86631e 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -101,6 +101,7 @@ import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.Debugger;
 import org.apache.camel.spi.DebuggerFactory;
 import org.apache.camel.spi.DeferServiceFactory;
+import org.apache.camel.spi.DumpRoutesStrategy;
 import org.apache.camel.spi.EndpointRegistry;
 import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.EventNotifier;
@@ -385,6 +386,7 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.lazyAddContextPlugin(DeferServiceFactory.class, this::createDeferServiceFactory);
         camelContextExtension.lazyAddContextPlugin(AnnotationBasedProcessorFactory.class,
                 this::createAnnotationBasedProcessorFactory);
+        camelContextExtension.lazyAddContextPlugin(DumpRoutesStrategy.class, this::createDumpRoutesStrategy);
     }
 
     protected static <T> T lookup(CamelContext context, String ref, Class<T> type) {
@@ -4064,6 +4066,8 @@ public abstract class AbstractCamelContext extends BaseService
 
     protected abstract RuntimeCamelCatalog createRuntimeCamelCatalog();
 
+    protected abstract DumpRoutesStrategy createDumpRoutesStrategy();
+
     protected abstract Tracer createTracer();
 
     protected abstract LanguageResolver createLanguageResolver();
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BaseExecutorServiceManager.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BaseExecutorServiceManager.java
index ea7f8c8a482..529483f5ba0 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BaseExecutorServiceManager.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BaseExecutorServiceManager.java
@@ -476,8 +476,8 @@ public class BaseExecutorServiceManager extends ServiceSupport implements Execut
                     }
                 } catch (Exception e) {
                     // only log if something goes wrong as we want to shutdown them all
-                    LOG.warn("Error occurred during shutdown of ExecutorService: {}. This exception will be ignored.", 
-                          executorService, e);
+                    LOG.warn("Error occurred during shutdown of ExecutorService: {}. This exception will be ignored.",
+                            executorService, e);
                 }
             }
         }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 6bc6a1437a8..be963980977 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -47,6 +47,7 @@ import org.apache.camel.spi.ComponentResolver;
 import org.apache.camel.spi.ConfigurerResolver;
 import org.apache.camel.spi.DataFormatResolver;
 import org.apache.camel.spi.DeferServiceFactory;
+import org.apache.camel.spi.DumpRoutesStrategy;
 import org.apache.camel.spi.EndpointRegistry;
 import org.apache.camel.spi.ExchangeFactory;
 import org.apache.camel.spi.ExchangeFactoryManager;
@@ -90,6 +91,7 @@ import org.apache.camel.spi.UnitOfWorkFactory;
 import org.apache.camel.spi.UriFactoryResolver;
 import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.spi.ValidatorRegistry;
+import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultRegistry;
 import org.apache.camel.support.DefaultUuidGenerator;
 import org.apache.camel.support.NormalizedUri;
@@ -410,6 +412,38 @@ public class SimpleCamelContext extends AbstractCamelContext {
         }
     }
 
+    @Override
+    protected DumpRoutesStrategy createDumpRoutesStrategy() {
+        // any custom in registry
+        DumpRoutesStrategy answer = CamelContextHelper.findSingleByType(this, DumpRoutesStrategy.class);
+        if (answer != null) {
+            return answer;
+        }
+
+        // is there any custom which we prioritize over default
+        Optional<DumpRoutesStrategy> result = ResolverHelper.resolveService(
+                getCamelContextReference(),
+                getBootstrapFactoryFinder(),
+                DumpRoutesStrategy.FACTORY,
+                DumpRoutesStrategy.class);
+
+        if (result.isEmpty()) {
+            // lookup default factory
+            result = ResolverHelper.resolveService(
+                    getCamelContextReference(),
+                    getBootstrapFactoryFinder(),
+                    "default-" + DumpRoutesStrategy.FACTORY,
+                    DumpRoutesStrategy.class);
+        }
+
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find DumpRoutesStrategy on classpath. Add camel-core-engine to classpath.");
+        }
+    }
+
     @Override
     protected CamelContextNameStrategy createCamelContextNameStrategy() {
         return new DefaultCamelContextNameStrategy();
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/DefaultDumpRoutesStrategy.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/DefaultDumpRoutesStrategy.java
new file mode 100644
index 00000000000..f007b6ab0bc
--- /dev/null
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/DefaultDumpRoutesStrategy.java
@@ -0,0 +1,154 @@
+package org.apache.camel.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.model.Model;
+import org.apache.camel.model.RouteTemplatesDefinition;
+import org.apache.camel.model.RoutesDefinition;
+import org.apache.camel.model.rest.RestsDefinition;
+import org.apache.camel.spi.DumpRoutesStrategy;
+import org.apache.camel.spi.ModelToXMLDumper;
+import org.apache.camel.spi.ModelToYAMLDumper;
+import org.apache.camel.spi.annotations.JdkService;
+import org.apache.camel.support.PluginHelper;
+import org.apache.camel.util.StringHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default {@link DumpRoutesStrategy} that dumps the routes to standard logger.
+ */
+@JdkService("default-" + DumpRoutesStrategy.FACTORY)
+public class DefaultDumpRoutesStrategy implements DumpRoutesStrategy, CamelContextAware {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DefaultDumpRoutesStrategy.class);
+
+    private CamelContext camelContext;
+
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
+    @Override
+    public void dumpRoutes(String format) {
+        if ("yaml".equalsIgnoreCase(format)) {
+            doDumpRoutesAsYaml(camelContext);
+        } else if ("xml".equalsIgnoreCase(format)) {
+            doDumpRoutesAsXml(camelContext);
+        }
+    }
+
+    protected void onDump(String dump) {
+        LOG.info("\n\n{}\n", dump);
+    }
+
+    protected void doDumpRoutesAsYaml(CamelContext camelContext) {
+        final ModelToYAMLDumper dumper = PluginHelper.getModelToYAMLDumper(camelContext);
+        final Model model = camelContext.getCamelContextExtension().getContextPlugin(Model.class);
+
+        int size = model.getRouteDefinitions().size();
+        if (size > 0) {
+            LOG.info("Dumping {} routes as YAML", size);
+            RoutesDefinition def = new RoutesDefinition();
+            def.setRoutes(model.getRouteDefinitions());
+            try {
+                String dump = dumper.dumpModelAsYaml(camelContext, def, true, false);
+                onDump(dump);
+            } catch (Exception e) {
+                LOG.warn("Error dumping routes to YAML due to {}. This exception is ignored.", e.getMessage(), e);
+            }
+        }
+
+        size = model.getRestDefinitions().size();
+        if (size > 0) {
+            LOG.info("Dumping {} rests as YAML", size);
+            RestsDefinition def = new RestsDefinition();
+            def.setRests(model.getRestDefinitions());
+            try {
+                String dump = dumper.dumpModelAsYaml(camelContext, def, true, false);
+                onDump(dump);
+            } catch (Exception e) {
+                LOG.warn("Error dumping rests to YAML due to {}. This exception is ignored.", e.getMessage(), e);
+            }
+        }
+
+        size = model.getRouteTemplateDefinitions().size();
+        if (size > 0) {
+            LOG.info("Dumping {} route templates as YAML", size);
+            RouteTemplatesDefinition def = new RouteTemplatesDefinition();
+            def.setRouteTemplates(model.getRouteTemplateDefinitions());
+            try {
+                String dump = dumper.dumpModelAsYaml(camelContext, def, true, false);
+                onDump(dump);
+            } catch (Exception e) {
+                LOG.warn("Error dumping route-templates to YAML due to {}. This exception is ignored.", e.getMessage(), e);
+            }
+        }
+    }
+
+    protected void doDumpRoutesAsXml(CamelContext camelContext) {
+        final ModelToXMLDumper dumper = PluginHelper.getModelToXMLDumper(camelContext);
+        final Model model = camelContext.getCamelContextExtension().getContextPlugin(Model.class);
+
+        int size = model.getRouteDefinitions().size();
+        if (size > 0) {
+            LOG.info("Dumping {} routes as XML", size);
+            // for XML to output nicely all routes in one XML then lets put them into <routes>
+            RoutesDefinition def = new RoutesDefinition();
+            def.setRoutes(model.getRouteDefinitions());
+            try {
+                String xml = dumper.dumpModelAsXml(camelContext, def, true);
+                // lets separate routes with empty line
+                xml = StringHelper.replaceFirst(xml, "xmlns=\"http://camel.apache.org/schema/spring\">",
+                        "xmlns=\"http://camel.apache.org/schema/spring\">\n");
+                xml = xml.replace("</route>", "</route>\n");
+                onDump(xml);
+            } catch (Exception e) {
+                LOG.warn("Error dumping routes to XML due to {}. This exception is ignored.", e.getMessage(), e);
+            }
+        }
+
+        size = model.getRestDefinitions().size();
+        if (size > 0) {
+            LOG.info("Dumping {} rests as XML", size);
+            // for XML to output nicely all routes in one XML then lets put them into <routes>
+            RestsDefinition def = new RestsDefinition();
+            def.setRests(model.getRestDefinitions());
+            try {
+                String xml = dumper.dumpModelAsXml(camelContext, def, true);
+                // lets separate rests with empty line
+                xml = StringHelper.replaceFirst(xml, "xmlns=\"http://camel.apache.org/schema/spring\">",
+                        "xmlns=\"http://camel.apache.org/schema/spring\">\n");
+                xml = xml.replace("</rest>", "</rest>\n");
+                onDump(xml);
+            } catch (Exception e) {
+                LOG.warn("Error dumping rests to XML due to {}. This exception is ignored.", e.getMessage(), e);
+            }
+        }
+
+        size = model.getRouteTemplateDefinitions().size();
+        if (size > 0) {
+            LOG.info("Dumping {} route templates as XML", size);
+            // for XML to output nicely all routes in one XML then lets put them into <routes>
+            RouteTemplatesDefinition def = new RouteTemplatesDefinition();
+            def.setRouteTemplates(model.getRouteTemplateDefinitions());
+            try {
+                String xml = dumper.dumpModelAsXml(camelContext, def, true);
+                // lets separate rests with empty line
+                xml = StringHelper.replaceFirst(xml, "xmlns=\"http://camel.apache.org/schema/spring\">",
+                        "xmlns=\"http://camel.apache.org/schema/spring\">\n");
+                xml = xml.replace("</routeTemplate>", "</routeTemplate>\n");
+                onDump(xml);
+            } catch (Exception e) {
+                LOG.warn("Error dumping route-templates to XML due to {}. This exception is ignored.", e.getMessage(), e);
+            }
+        }
+    }
+
+}
diff --git a/core/camel-core-engine/src/generated/resources/META-INF/services/org/apache/camel/default-dump-routes b/core/camel-core-engine/src/generated/resources/META-INF/services/org/apache/camel/default-dump-routes
new file mode 100644
index 00000000000..336d9abf4a8
--- /dev/null
+++ b/core/camel-core-engine/src/generated/resources/META-INF/services/org/apache/camel/default-dump-routes
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.impl.DefaultDumpRoutesStrategy
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 15a4a6165bb..268f47d6011 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -55,23 +55,19 @@ import org.apache.camel.model.RouteConfigurationDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteDefinitionHelper;
 import org.apache.camel.model.RouteTemplateDefinition;
-import org.apache.camel.model.RouteTemplatesDefinition;
-import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.TemplatedRouteDefinition;
 import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.model.rest.RestDefinition;
-import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
 import org.apache.camel.spi.BeanRepository;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataType;
+import org.apache.camel.spi.DumpRoutesStrategy;
 import org.apache.camel.spi.ExecutorServiceManager;
 import org.apache.camel.spi.LocalBeanRepositoryAware;
 import org.apache.camel.spi.ModelReifierFactory;
-import org.apache.camel.spi.ModelToXMLDumper;
-import org.apache.camel.spi.ModelToYAMLDumper;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.Registry;
@@ -82,12 +78,10 @@ import org.apache.camel.spi.Validator;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultRegistry;
 import org.apache.camel.support.LocalBeanRegistry;
-import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.SimpleUuidGenerator;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.OrderedLocationProperties;
 import org.apache.camel.util.StopWatch;
-import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.concurrent.NamedThreadLocal;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -154,112 +148,9 @@ public class DefaultCamelContext extends SimpleCamelContext implements ModelCame
 
     @Override
     protected void doDumpRoutes() {
-        if ("yaml".equalsIgnoreCase(getDumpRoutes())) {
-            doDumpRoutesAsYaml();
-        } else {
-            // xml is default
-            doDumpRoutesAsXml();
-        }
-    }
-
-    protected void doDumpRoutesAsXml() {
-        final ModelToXMLDumper dumper = PluginHelper.getModelToXMLDumper(this);
-
-        int size = getRouteDefinitions().size();
-        if (size > 0) {
-            LOG.info("Dumping {} routes as XML", size);
-            // for XML to output nicely all routes in one XML then lets put them into <routes>
-            RoutesDefinition def = new RoutesDefinition();
-            def.setRoutes(getRouteDefinitions());
-            try {
-                String xml = dumper.dumpModelAsXml(this, def, true);
-                // lets separate routes with empty line
-                xml = StringHelper.replaceFirst(xml, "xmlns=\"http://camel.apache.org/schema/spring\">",
-                        "xmlns=\"http://camel.apache.org/schema/spring\">\n");
-                xml = xml.replace("</route>", "</route>\n");
-                LOG.info("\n\n{}\n", xml);
-            } catch (Exception e) {
-                LOG.warn("Error dumping routes to XML due to {}. This exception is ignored.", e.getMessage(), e);
-            }
-        }
-
-        size = getRestDefinitions().size();
-        if (size > 0) {
-            LOG.info("Dumping {} rests as XML", size);
-            // for XML to output nicely all routes in one XML then lets put them into <routes>
-            RestsDefinition def = new RestsDefinition();
-            def.setRests(getRestDefinitions());
-            try {
-                String xml = dumper.dumpModelAsXml(this, def, true);
-                // lets separate rests with empty line
-                xml = StringHelper.replaceFirst(xml, "xmlns=\"http://camel.apache.org/schema/spring\">",
-                        "xmlns=\"http://camel.apache.org/schema/spring\">\n");
-                xml = xml.replace("</rest>", "</rest>\n");
-                LOG.info("\n\n{}\n", xml);
-            } catch (Exception e) {
-                LOG.warn("Error dumping rests to XML due to {}. This exception is ignored.", e.getMessage(), e);
-            }
-        }
-
-        size = getRouteTemplateDefinitions().size();
-        if (size > 0) {
-            LOG.info("Dumping {} route templates as XML", size);
-            // for XML to output nicely all routes in one XML then lets put them into <routes>
-            RouteTemplatesDefinition def = new RouteTemplatesDefinition();
-            def.setRouteTemplates(getRouteTemplateDefinitions());
-            try {
-                String xml = dumper.dumpModelAsXml(this, def, true);
-                // lets separate rests with empty line
-                xml = StringHelper.replaceFirst(xml, "xmlns=\"http://camel.apache.org/schema/spring\">",
-                        "xmlns=\"http://camel.apache.org/schema/spring\">\n");
-                xml = xml.replace("</routeTemplate>", "</routeTemplate>\n");
-                LOG.info("\n\n{}\n", xml);
-            } catch (Exception e) {
-                LOG.warn("Error dumping route-templates to XML due to {}. This exception is ignored.", e.getMessage(), e);
-            }
-        }
-    }
-
-    protected void doDumpRoutesAsYaml() {
-        final ModelToYAMLDumper dumper = PluginHelper.getModelToYAMLDumper(this);
-
-        int size = getRouteDefinitions().size();
-        if (size > 0) {
-            LOG.info("Dumping {} routes as YAML", size);
-            RoutesDefinition def = new RoutesDefinition();
-            def.setRoutes(getRouteDefinitions());
-            try {
-                String yaml = dumper.dumpModelAsYaml(this, def, true, false);
-                LOG.info("\n\n{}\n", yaml);
-            } catch (Exception e) {
-                LOG.warn("Error dumping routes to YAML due to {}. This exception is ignored.", e.getMessage(), e);
-            }
-        }
-
-        size = getRestDefinitions().size();
-        if (size > 0) {
-            LOG.info("Dumping {} rests as YAML", size);
-            RestsDefinition def = new RestsDefinition();
-            def.setRests(getRestDefinitions());
-            try {
-                String taml = dumper.dumpModelAsYaml(this, def, true, false);
-                LOG.info("\n\n{}\n", taml);
-            } catch (Exception e) {
-                LOG.warn("Error dumping rests to YAML due to {}. This exception is ignored.", e.getMessage(), e);
-            }
-        }
-
-        size = getRouteTemplateDefinitions().size();
-        if (size > 0) {
-            LOG.info("Dumping {} route templates as YAML", size);
-            RouteTemplatesDefinition def = new RouteTemplatesDefinition();
-            def.setRouteTemplates(getRouteTemplateDefinitions());
-            try {
-                String yaml = dumper.dumpModelAsYaml(this, def, true, false);
-                LOG.info("\n\n{}\n", yaml);
-            } catch (Exception e) {
-                LOG.warn("Error dumping route-templates to YAML due to {}. This exception is ignored.", e.getMessage(), e);
-            }
+        DumpRoutesStrategy strategy = getCamelContextExtension().getContextPlugin(DumpRoutesStrategy.class);
+        if (strategy != null) {
+            strategy.dumpRoutes(getDumpRoutes());
         }
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
index 692ee12ee40..7ef05345095 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
@@ -236,9 +236,7 @@ public class FluentProducerTemplateTest extends ContextTestSupport {
     public void testExceptionUsingProcessorAndBody() {
         assertThrows(IllegalArgumentException.class, () -> DefaultFluentProducerTemplate.on(context)
                 .withBody("World")
-                .withProcessor(exchange -> exchange.getIn().setHeader("foo", 123)).
-                to("direct:async").
-                send(), "");
+                .withProcessor(exchange -> exchange.getIn().setHeader("foo", 123)).to("direct:async").send(), "");
     }
 
     @Test
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
index c1ff1606d00..07e71dd95fc 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
@@ -978,7 +978,8 @@ public class NotifyBuilderTest extends ContextTestSupport {
         template.sendBody("direct:foo", "Hello World");
         assertFalse(notify.matches());
 
-        assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:fail", "Bye World"), "Should have thrown exception");
+        assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:fail", "Bye World"),
+                "Should have thrown exception");
         assertTrue(notify.matches());
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriFactoryTest.java
index 577c7b96646..2edb143851b 100644
--- a/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriFactoryTest.java
@@ -92,7 +92,8 @@ public class CustomEndpointUriFactoryTest extends ContextTestSupport {
         IllegalArgumentException e = Assertions.assertThrows(IllegalArgumentException.class,
                 () -> assembler.buildUri("acme", params),
                 "Should have thrown an exception");
-        Assertions.assertEquals("Option name is required when creating endpoint uri with syntax acme:name:port", e.getMessage());
+        Assertions.assertEquals("Option name is required when creating endpoint uri with syntax acme:name:port",
+                e.getMessage());
     }
 
     @Test
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoAMoreComplexOverloadedTest.java b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoAMoreComplexOverloadedTest.java
index 4aebec30b77..b82e65bfda1 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoAMoreComplexOverloadedTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoAMoreComplexOverloadedTest.java
@@ -73,7 +73,6 @@ public class BeanInfoAMoreComplexOverloadedTest extends ContextTestSupport {
         Exchange exchange = new DefaultExchange(context);
         exchange.setIn(message);
 
-
         AmbiguousMethodCallException e = assertThrows(AmbiguousMethodCallException.class,
                 () -> beanInfo.createInvocation(new Bean(), exchange),
                 "Should have thrown an exception");
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoWithBridgedMethodTest.java b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoWithBridgedMethodTest.java
index 2eb151b0473..9f630da42dc 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoWithBridgedMethodTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoWithBridgedMethodTest.java
@@ -50,10 +50,11 @@ public class BeanInfoWithBridgedMethodTest extends ContextTestSupport {
         DefaultExchange exchange = new DefaultExchange(context);
         exchange.getIn().setBody(new Request(1));
 
-        assertDoesNotThrow(() -> {MyPackagePrivateService myService = new MyPackagePrivateService();
-        MethodInvocation mi = beanInfo.createInvocation(null, exchange);
-        assertEquals("Service", mi.getMethod().getDeclaringClass().getSimpleName());
-        assertEquals(4, mi.getMethod().invoke(myService, new Request(2)));
+        assertDoesNotThrow(() -> {
+            MyPackagePrivateService myService = new MyPackagePrivateService();
+            MethodInvocation mi = beanInfo.createInvocation(null, exchange);
+            assertEquals("Service", mi.getMethod().getDeclaringClass().getSimpleName());
+            assertEquals(4, mi.getMethod().invoke(myService, new Request(2)));
         }, "This should not be ambiguous!");
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyNoBindingTest.java b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyNoBindingTest.java
index ac4e774e40c..d39956a72f5 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyNoBindingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyNoBindingTest.java
@@ -111,7 +111,7 @@ public class BeanProxyNoBindingTest extends ContextTestSupport {
         Endpoint endpoint = context.getEndpoint("direct:start");
         OrderService service = ProxyHelper.createProxy(endpoint, false, OrderService.class);
 
-/*        try {
+        /*        try {
             service.invalidReturnType("<order type=\"beer\">Carlsberg</order>");
             fail("Should have thrown exception");
         } catch (Exception e) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanRefMethodNotFoundTest.java b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanRefMethodNotFoundTest.java
index 7595a00a362..1525c738ca2 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanRefMethodNotFoundTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanRefMethodNotFoundTest.java
@@ -46,7 +46,7 @@ public class BeanRefMethodNotFoundTest extends ContextTestSupport {
         });
 
         Exception e = assertThrows(Exception.class,
-                () ->  context.start(),
+                () -> context.start(),
                 "Should have thrown exception");
 
         FailedToCreateRouteException failed = assertIsInstanceOf(FailedToCreateRouteException.class, e);
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncComponent.java b/core/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncComponent.java
index 2c2dadc3e83..f18f826f088 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncComponent.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncComponent.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.processor.async;
 
-import java.util.Locale;
 import java.util.Map;
 
 import org.apache.camel.Endpoint;
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java
index b3cee67a36a..fadc1ea22aa 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/ObjectHelper.java
@@ -34,7 +34,6 @@ import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
index 768676a5300..6ceb325801e 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
@@ -253,7 +253,7 @@ public final class StringHelper {
                 return false;
             }
 
-             return Character.isUpperCase(text.charAt(lastIndexOf + 1));
+            return Character.isUpperCase(text.charAt(lastIndexOf + 1));
         }
 
         return false;
@@ -508,8 +508,8 @@ public final class StringHelper {
     /**
      * De-capitalize the string (lower case first character)
      *
-     * @param  text            the string
-     * @return                 the string decapitalized (lower case first character)
+     * @param  text the string
+     * @return      the string decapitalized (lower case first character)
      */
     public static String decapitalize(final String text) {
         if (text == null) {
@@ -1048,7 +1048,6 @@ public final class StringHelper {
             prev = ch;
         }
 
-
         return answer.toString();
     }