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/23 13:48:03 UTC

[camel] 02/03: CAMEL-19772: camel-core - Dump routes to include custom beans

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

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

commit 9e63194d01864097e7cba73cb36584bb598915b4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 23 15:33:14 2023 +0200

    CAMEL-19772: camel-core - Dump routes to include custom beans
---
 .../java/org/apache/camel/main/KameletMain.java    | 27 +++++++++++++++++++---
 .../camel/dsl/xml/io/XmlRoutesBuilderLoader.java   |  2 +-
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 3df25dd3d73..b93f55abde2 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -87,6 +87,7 @@ import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.RouteOnDemandReloadStrategy;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.tooling.maven.MavenGav;
+import org.apache.camel.util.StringHelper;
 import org.springframework.beans.MutablePropertyValues;
 import org.springframework.beans.PropertyValue;
 import org.springframework.beans.factory.BeanFactory;
@@ -98,8 +99,10 @@ import org.springframework.beans.factory.config.BeanReference;
 import org.springframework.beans.factory.config.TypedStringValue;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.support.GenericBeanDefinition;
 import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.core.io.AbstractResource;
+import org.springframework.core.io.Resource;
 import org.springframework.core.metrics.StartupStep;
 
 /**
@@ -675,7 +678,7 @@ public class KameletMain extends MainCommandLineSupport {
         Map<String, Document> springBeansDocs = registry.findByTypeWithName(Document.class);
         if (springBeansDocs != null) {
             springBeansDocs.forEach((id, doc) -> {
-                if (id.startsWith("spring-document:")) {
+                if (id.startsWith("camel-xml-io-dsl-spring-xml:")) {
                     xmls.put(id, doc);
                 }
             });
@@ -709,6 +712,15 @@ public class KameletMain extends MainCommandLineSupport {
         final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
         xmls.forEach((id, doc) -> {
             reader.registerBeanDefinitions(doc, new AbstractResource() {
+                @Override
+                public String getFilename() {
+                    if (id.startsWith("camel-xml-io-dsl-spring-xml:")) {
+                        // this is a camel bean via camel-xml-io-dsl
+                        return StringHelper.afterLast(id, ":");
+                    }
+                    return null;
+                }
+
                 @Override
                 public String getDescription() {
                     return id;
@@ -810,8 +822,17 @@ public class KameletMain extends MainCommandLineSupport {
             Model model = camelContext.getCamelContextExtension().getContextPlugin(Model.class);
             if (model != null) {
                 RegistryBeanDefinition rrd = new RegistryBeanDefinition();
-                // TODO: Resource
-                // rrd.setResource();
+                if (def instanceof GenericBeanDefinition gbd) {
+                    // set camel resource to refer to the source file
+                    Resource res = gbd.getResource();
+                    if (res != null) {
+                        String fn = res.getFilename();
+                        if (fn != null) {
+                            rrd.setResource(camelContext.getCamelContextExtension().getContextPlugin(ResourceLoader.class)
+                                    .resolveResource("file:" + fn));
+                        }
+                    }
+                }
                 rrd.setType(def.getBeanClassName());
                 rrd.setName(name);
                 model.addRegistryBean(rrd);
diff --git a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
index 2cfb1a2341c..b5a7b2770d6 100644
--- a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
+++ b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
@@ -296,7 +296,7 @@ public class XmlRoutesBuilderLoader extends RouteBuilderLoaderSupport {
             Document doc = app.getSpringBeans().get(0).getOwnerDocument();
             // bind as Document, to be picked up later - bean id allows nice sorting
             // (can also be single ID - documents will get collected in LinkedHashMap, so we'll be fine)
-            String id = String.format("spring-document:%05d:%s", counter.incrementAndGet(), resource.getLocation());
+            String id = String.format("camel-xml-io-dsl-spring-xml:%05d:%s", counter.incrementAndGet(), resource.getLocation());
             getCamelContext().getRegistry().bind(id, doc);
         }
     }