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/31 18:30:29 UTC
[camel] 01/01: CAMEL-19806: camel-jbang - Use aries blueprint-noosgi for parsing blueprint xml files. Experiemtal and WIP.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch blueprint-noosgi
in repository https://gitbox.apache.org/repos/asf/camel.git
commit ee519679c19c41a8e784e4261371dacec829ae69
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Aug 31 20:29:55 2023 +0200
CAMEL-19806: camel-jbang - Use aries blueprint-noosgi for parsing blueprint xml files. Experiemtal and WIP.
---
dsl/camel-kamelet-main/pom.xml | 7 +++
.../xml/blueprint/BlueprintXmlBeansHandler.java | 73 +++++++++++++++++++++-
2 files changed, 79 insertions(+), 1 deletion(-)
diff --git a/dsl/camel-kamelet-main/pom.xml b/dsl/camel-kamelet-main/pom.xml
index 1b80da944a8..481c9f0b2cc 100644
--- a/dsl/camel-kamelet-main/pom.xml
+++ b/dsl/camel-kamelet-main/pom.xml
@@ -40,6 +40,13 @@
<dependencies>
+ <!-- TODO: experiment -->
+ <dependency>
+ <groupId>org.apache.aries.blueprint</groupId>
+ <artifactId>org.apache.aries.blueprint.noosgi</artifactId>
+ <version>1.2.0</version>
+ </dependency>
+
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-main</artifactId>
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/xml/blueprint/BlueprintXmlBeansHandler.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/xml/blueprint/BlueprintXmlBeansHandler.java
index 15a2e88b342..09ceb59d868 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/xml/blueprint/BlueprintXmlBeansHandler.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/xml/blueprint/BlueprintXmlBeansHandler.java
@@ -16,27 +16,38 @@
*/
package org.apache.camel.main.xml.blueprint;
+import java.net.URI;
+import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.StringJoiner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.w3c.dom.Document;
+import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import org.apache.aries.blueprint.NamespaceHandler;
+import org.apache.aries.blueprint.ParserContext;
+import org.apache.aries.blueprint.container.BlueprintContainerImpl;
+import org.apache.aries.blueprint.container.SimpleNamespaceHandlerSet;
import org.apache.camel.CamelContext;
import org.apache.camel.main.MainConfigurationProperties;
import org.apache.camel.main.util.XmlHelper;
import org.apache.camel.model.Model;
import org.apache.camel.model.app.RegistryBeanDefinition;
+import org.apache.camel.spi.ClassResolver;
import org.apache.camel.spi.Resource;
import org.apache.camel.spi.ResourceLoader;
import org.apache.camel.support.PropertyBindingSupport;
import org.apache.camel.util.StringHelper;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.Metadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,7 +78,11 @@ public class BlueprintXmlBeansHandler {
if (id.startsWith("camel-xml-io-dsl-blueprint-xml:")) {
// this is a camel bean via camel-xml-io-dsl
String fileName = StringHelper.afterLast(id, ":");
- discoverBeans(camelContext, fileName, doc);
+ try {
+ discoverBeans(camelContext, fileName, doc);
+ } catch (Exception e) {
+ LOG.warn("Error due: " + e.getMessage(), e);
+ }
}
});
}
@@ -76,6 +91,48 @@ public class BlueprintXmlBeansHandler {
* Invoked at later stage to create and register Blueprint beans into Camel {@link org.apache.camel.spi.Registry}.
*/
public void createAndRegisterBeans(CamelContext camelContext) {
+
+ for (Resource resource : resources.values()) {
+ SimpleNamespaceHandlerSet ns = new SimpleNamespaceHandlerSet();
+ ns.addNamespace(URI.create("http://camel.apache.org/schema/blueprint"), null, new NamespaceHandler() {
+ @Override
+ public URL getSchemaLocation(String s) {
+ return null;
+ }
+
+ @Override
+ public Set<Class> getManagedClasses() {
+ return null;
+ }
+
+ @Override
+ public Metadata parse(Element element, ParserContext parserContext) {
+ return null;
+ }
+
+ @Override
+ public ComponentMetadata decorate(Node node, ComponentMetadata componentMetadata, ParserContext parserContext) {
+ return null;
+ }
+ });
+
+ try {
+ ClassLoader cl = new MyClassLoader(camelContext.getClassResolver());
+ BlueprintContainerImpl container
+ = new BlueprintContainerImpl(
+ cl, List.of(resource.getURL()), null,
+ ns, false);
+ System.out.println(container);
+ container.init(false);
+ System.out.println(container.getComponentIds());
+ for (String id : container.getComponentIds()) {
+ System.out.println(container.getComponentMetadata(id));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
if (delayedBeans.isEmpty()) {
return;
}
@@ -224,4 +281,18 @@ public class BlueprintXmlBeansHandler {
}
}
+ private class MyClassLoader extends ClassLoader {
+
+ private final ClassResolver classResolver;
+
+ private MyClassLoader(ClassResolver classResolver) {
+ this.classResolver = classResolver;
+ }
+
+ @Override
+ public Class<?> loadClass(String name) throws ClassNotFoundException {
+ return classResolver.resolveMandatoryClass(name);
+ }
+ }
+
}