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:01 UTC

[camel] branch main updated (84a854aad38 -> dc585543b02)

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

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


    from 84a854aad38 (chores) camel-api: add overloaded service methods (#11185)
     new 7585e9d5bd9 CAMEL-19772: camel-core - Dump routes to include custom beans
     new 9e63194d018 CAMEL-19772: camel-core - Dump routes to include custom beans
     new dc585543b02 Polish

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/camel/yaml/LwModelToYAMLDumper.java |  2 +-
 .../apache/camel/dsl/jbang/core/commands/Init.java |  1 -
 .../java/org/apache/camel/main/KameletMain.java    | 58 +++++++++++++++++++++-
 .../camel/dsl/xml/io/XmlRoutesBuilderLoader.java   |  2 +-
 4 files changed, 59 insertions(+), 4 deletions(-)


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

Posted by da...@apache.org.
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);
         }
     }


[camel] 03/03: Polish

Posted by da...@apache.org.
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 dc585543b0255f3807542a1b083194e45aed1294
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 23 15:47:10 2023 +0200

    Polish
---
 .../src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java     | 1 -
 1 file changed, 1 deletion(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
index 75f46f30290..653c5326d45 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
@@ -139,7 +139,6 @@ public class Init extends CamelCommand {
             StringBuilder sb = new StringBuilder();
             String[] lines = content.split("\n");
             boolean top = true;
-            boolean ann = false;
             for (String line : lines) {
                 // remove top license header
                 if (top && line.startsWith("#")) {


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

Posted by da...@apache.org.
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 7585e9d5bd9dd459e790dbb72ccea23a644c6c09
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 23 15:01:19 2023 +0200

    CAMEL-19772: camel-core - Dump routes to include custom beans
---
 .../org/apache/camel/yaml/LwModelToYAMLDumper.java |  2 +-
 .../java/org/apache/camel/main/KameletMain.java    | 35 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/LwModelToYAMLDumper.java b/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/LwModelToYAMLDumper.java
index c3081ca2d68..ed49ca2fceb 100644
--- a/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/LwModelToYAMLDumper.java
+++ b/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/LwModelToYAMLDumper.java
@@ -309,7 +309,7 @@ public class LwModelToYAMLDumper implements ModelToYAMLDumper {
 
         private void doWriteRegistryBeanDefinition(RegistryBeanDefinition b) {
             buffer.write(String.format("    - name: %s%n", b.getName()));
-            buffer.write(String.format("      type: %s%n", b.getType()));
+            buffer.write(String.format("      type: \"%s\"%n", b.getType()));
             if (b.getProperties() != null && !b.getProperties().isEmpty()) {
                 buffer.write(String.format("      properties:%n"));
                 for (Map.Entry<String, Object> entry : b.getProperties().entrySet()) {
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 3c434a76cad..3df25dd3d73 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
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -65,6 +66,8 @@ import org.apache.camel.main.download.PackageNameSourceLoader;
 import org.apache.camel.main.download.TypeConverterLoaderDownloadListener;
 import org.apache.camel.main.injection.AnnotationDependencyInjection;
 import org.apache.camel.main.util.ExtraFilesClassLoader;
+import org.apache.camel.model.Model;
+import org.apache.camel.model.app.RegistryBeanDefinition;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.CliConnector;
 import org.apache.camel.spi.CliConnectorFactory;
@@ -84,11 +87,15 @@ 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.springframework.beans.MutablePropertyValues;
+import org.springframework.beans.PropertyValue;
 import org.springframework.beans.factory.BeanFactory;
 import org.springframework.beans.factory.CannotLoadBeanClassException;
 import org.springframework.beans.factory.SmartFactoryBean;
 import org.springframework.beans.factory.SmartInitializingSingleton;
 import org.springframework.beans.factory.config.BeanDefinition;
+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.xml.XmlBeanDefinitionReader;
@@ -798,6 +805,34 @@ public class KameletMain extends MainCommandLineSupport {
                 // rely on the bean factory to implement prototype scope
                 registry.bind(name, (Supplier<Object>) () -> beanFactory.getBean(name));
             }
+
+            // register bean into model (as a BeanRegistry that allows Camel DSL to know about these beans)
+            Model model = camelContext.getCamelContextExtension().getContextPlugin(Model.class);
+            if (model != null) {
+                RegistryBeanDefinition rrd = new RegistryBeanDefinition();
+                // TODO: Resource
+                // rrd.setResource();
+                rrd.setType(def.getBeanClassName());
+                rrd.setName(name);
+                model.addRegistryBean(rrd);
+                if (def.hasPropertyValues()) {
+                    Map<String, Object> properties = new LinkedHashMap<>();
+                    rrd.setProperties(properties);
+
+                    MutablePropertyValues values = def.getPropertyValues();
+                    for (PropertyValue v : values) {
+                        String key = v.getName();
+                        PropertyValue src = v.getOriginalPropertyValue();
+                        Object val = src.getValue();
+                        // ref was string value
+                        if (val instanceof TypedStringValue tsv) {
+                            properties.put(key, tsv.getValue());
+                        } else if (val instanceof BeanReference br) {
+                            properties.put(key, "#bean:" + br.getBeanName());
+                        }
+                    }
+                }
+            }
         }
     }