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);
}
}