You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2020/09/06 04:59:49 UTC

[karaf] branch karaf-4.2.x updated: Upgrade to Apache Camel 3.4.3 and add camel core example

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

jbonofre pushed a commit to branch karaf-4.2.x
in repository https://gitbox.apache.org/repos/asf/karaf.git


The following commit(s) were added to refs/heads/karaf-4.2.x by this push:
     new ce01dd1  Upgrade to Apache Camel 3.4.3 and add camel core example
ce01dd1 is described below

commit ce01dd1d3880e7b3b7303808276194fc5c2e7735
Author: jbonofre <jb...@apache.org>
AuthorDate: Fri Aug 28 21:59:33 2020 +0200

    Upgrade to Apache Camel 3.4.3 and add camel core example
---
 examples/karaf-camel-example/README.md             |   6 +-
 .../main/resources/OSGI-INF/blueprint/route.xml    |  16 ++--
 .../src/main/feature/feature.xml                   |  20 ++--
 .../karaf-camel-example-java/pom.xml               |  12 ++-
 .../karaf/examples/camel/java/CamelComponent.java  | 102 +++++++++++++++++++++
 .../camel/java/ExampleCamelRouteBuilder.java       |  66 -------------
 .../main/resources/OSGI-INF/blueprint/route.xml    |  27 ------
 examples/karaf-profile-example/pom.xml             |   4 +
 pom.xml                                            |   2 +-
 9 files changed, 138 insertions(+), 117 deletions(-)

diff --git a/examples/karaf-camel-example/README.md b/examples/karaf-camel-example/README.md
index 666c4f9..aae5691 100644
--- a/examples/karaf-camel-example/README.md
+++ b/examples/karaf-camel-example/README.md
@@ -24,11 +24,11 @@ This example shows how to use Apache Camel in Karaf. Apache Camel is a integrati
 
 Apache Camel supports several DSL. This example shows how to use the Camel Java DSL and the Camel Blueprint DSL.
 
-It creates several Camel routes, exposing a HTTP endpoint and using a Content Based Router EIP (Enterprise Integration Pattern).
+It creates several Camel routes, exposing HTTP endpoint and using a Content Based Router EIP (Enterprise Integration Pattern).
 
 ## Artifacts
 
-* **karaf-camel-example-java** is a bundle containing routes described using the Camel Java DSL.
+* **karaf-camel-example-java** is a bundle containing routes described using the Camel Java DSL loaded by SCR.
 * **karaf-camel-example-blueprint** is just a wrapper containing routes described using Blueprint. Karaf supports deployment of this DSL directly (in the deploy folder for instance) or packaged as a bundle.
 * **karaf-camel-example-features** provides a Karaf features repository used for the deployment.
 
@@ -60,7 +60,7 @@ karaf@root()> feature:install karaf-camel-example-blueprint
 
 ## Usage
 
-Once you have install a Camel feature, the main route is started and bind a HTTP endpoint on `http://localhost:9090/example`.
+Once you have installed a Camel feature, the main route started and bind HTTP endpoint on `http://localhost:9090/example`.
 
 We can test payloads testing different paths of the content based router.
 
diff --git a/examples/karaf-camel-example/karaf-camel-example-blueprint/src/main/resources/OSGI-INF/blueprint/route.xml b/examples/karaf-camel-example/karaf-camel-example-blueprint/src/main/resources/OSGI-INF/blueprint/route.xml
index 00fa7bb..093bcd6 100644
--- a/examples/karaf-camel-example/karaf-camel-example-blueprint/src/main/resources/OSGI-INF/blueprint/route.xml
+++ b/examples/karaf-camel-example/karaf-camel-example-blueprint/src/main/resources/OSGI-INF/blueprint/route.xml
@@ -26,7 +26,7 @@
             <choice>
                 <when>
                     <simple>${headers.CamelHttpMethod} == 'POST'</simple>
-                    <setHeader headerName="type">
+                    <setHeader name="type">
                         <jsonpath>$.notification.type</jsonpath>
                     </setHeader>
                     <choice>
@@ -34,33 +34,33 @@
                             <simple>${header.type} == 'email'</simple>
                             <log message="[EXAMPLE INBOUND] Received email notification"/>
                             <to uri="direct:email"/>
-                            <setHeader headerName="Exchange.HTTP_RESPONSE_CODE"><constant>200</constant></setHeader>
+                            <setHeader name="Exchange.HTTP_RESPONSE_CODE"><constant>200</constant></setHeader>
                         </when>
                         <when>
                             <simple>${header.type} == 'http'</simple>
                             <log message="[EXAMPLE INBOUND] Received http notification"/>
                             <to uri="direct:http"/>
-                            <setHeader headerName="Exchange.HTTP_RESPONSE_CODE"><constant>200</constant></setHeader>
+                            <setHeader name="Exchange.HTTP_RESPONSE_CODE"><constant>200</constant></setHeader>
                         </when>
                         <otherwise>
                             <log message="[EXAMPLE INBOUND] Unknown notification"/>
                             <setBody><constant>{ "status": "reject", "type": "unknown" }</constant></setBody>
-                            <setHeader headerName="Exchange.HTTP_RESPONSE_CODE"><constant>400</constant></setHeader>
+                            <setHeader name="Exchange.HTTP_RESPONSE_CODE"><constant>400</constant></setHeader>
                         </otherwise>
                     </choice>
                 </when>
                 <otherwise>
                     <log message="[EXAMPLE INBOUND] only POST is accepted (${headers.CamelHttpMethod})"/>
                     <setBody><constant>{ "error": "only POST is accepted" }</constant></setBody>
-                    <setHeader headerName="Exchange.HTTP_RESPONSE_CODE"><constant>500</constant></setHeader>
+                    <setHeader name="Exchange.HTTP_RESPONSE_CODE"><constant>500</constant></setHeader>
                 </otherwise>
             </choice>
         </route>
         <route id="example-email">
             <from uri="direct:email"/>
             <log message="[EXAMPLE EMAIL] Sending notification email"/>
-            <setHeader headerName="to"><jsonpath>$.notification.to</jsonpath></setHeader>
-            <setHeader headerName="subject"><constant>Notification</constant></setHeader>
+            <setHeader name="to"><jsonpath>$.notification.to</jsonpath></setHeader>
+            <setHeader name="subject"><constant>Notification</constant></setHeader>
             <setBody><jsonpath>$.notification.message</jsonpath></setBody>
             <!-- <to uri="smtp://localhost"/> -->
             <setBody><simple>{ "status": "email sent", "to": "${header.to}", "subject": "${header.subject}" }</simple></setBody>
@@ -68,7 +68,7 @@
         <route id="example-http">
             <from uri="direct:http"/>
             <log message="[EXAMPLE HTTP] Sending http notification"/>
-            <setHeader headerName="service"><jsonpath>$.notification.service</jsonpath></setHeader>
+            <setHeader name="service"><jsonpath>$.notification.service</jsonpath></setHeader>
             <!-- <to uri="jetty:..." /> -->
             <setBody><simple>{ "status": "http requested", "service": "${header.service}" }</simple></setBody>
         </route>
diff --git a/examples/karaf-camel-example/karaf-camel-example-features/src/main/feature/feature.xml b/examples/karaf-camel-example/karaf-camel-example-features/src/main/feature/feature.xml
index 92f485c..0b00cea 100644
--- a/examples/karaf-camel-example/karaf-camel-example-features/src/main/feature/feature.xml
+++ b/examples/karaf-camel-example/karaf-camel-example-features/src/main/feature/feature.xml
@@ -20,7 +20,16 @@
 
     <repository>mvn:org.apache.camel.karaf/apache-camel/${camel.version}/xml/features</repository>
 
-    <feature name="karaf-camel-example-common" version="${project.version}">
+    <feature name="karaf-camel-example-java" version="${project.version}">
+        <feature>scr</feature>
+        <feature>camel-core</feature>
+        <feature>camel-jetty</feature>
+        <feature>camel-jsonpath</feature>
+        <feature>camel-mail</feature>
+        <bundle>mvn:org.apache.karaf.examples/karaf-camel-example-java/${project.version}</bundle>
+    </feature>
+
+    <feature name="karaf-camel-example-blueprint" version="${project.version}">
         <feature prerequisite="true">aries-blueprint</feature>
         <feature>camel-blueprint</feature>
         <feature>camel-jetty</feature>
@@ -29,15 +38,6 @@
         <capability>
             osgi.service;objectClass=org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace=http://camel.apache.org/schema/blueprint;effective:=active;
         </capability>
-    </feature>
-
-    <feature name="karaf-camel-example-java" version="${project.version}">
-        <feature version="${project.version}">karaf-camel-example-common</feature>
-        <bundle>mvn:org.apache.karaf.examples/karaf-camel-example-java/${project.version}</bundle>
-    </feature>
-
-    <feature name="karaf-camel-example-blueprint" version="${project.version}">
-        <feature version="${project.version}">karaf-camel-example-common</feature>
         <bundle>blueprint:mvn:org.apache.karaf.examples/karaf-camel-example-blueprint/${project.version}/xml/route</bundle>
     </feature>
 
diff --git a/examples/karaf-camel-example/karaf-camel-example-java/pom.xml b/examples/karaf-camel-example/karaf-camel-example-java/pom.xml
index 05d39cb..f7b08b7 100644
--- a/examples/karaf-camel-example/karaf-camel-example-java/pom.xml
+++ b/examples/karaf-camel-example/karaf-camel-example-java/pom.xml
@@ -34,10 +34,18 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core</artifactId>
+            <groupId>org.apache.camel.karaf</groupId>
+            <artifactId>camel-core-osgi</artifactId>
             <version>${camel.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.cmpn</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/examples/karaf-camel-example/karaf-camel-example-java/src/main/java/org/apache/karaf/examples/camel/java/CamelComponent.java b/examples/karaf-camel-example/karaf-camel-example-java/src/main/java/org/apache/karaf/examples/camel/java/CamelComponent.java
new file mode 100644
index 0000000..4fd9556
--- /dev/null
+++ b/examples/karaf-camel-example/karaf-camel-example-java/src/main/java/org/apache/karaf/examples/camel/java/CamelComponent.java
@@ -0,0 +1,102 @@
+/*
+ * 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.karaf.examples.camel.java;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.core.osgi.OsgiDefaultCamelContext;
+import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.RouteDefinition;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+
+import java.util.ArrayList;
+
+@Component(
+        name = "karaf-camel-example-java",
+        immediate = true
+)
+public class CamelComponent {
+
+    private BundleContext bundleContext;
+    private ModelCamelContext camelContext;
+    private ServiceRegistration<CamelContext> serviceRegistration;
+
+    @Activate
+    public void activate(ComponentContext componentContext) throws Exception {
+        bundleContext = componentContext.getBundleContext();
+        camelContext = new OsgiDefaultCamelContext(bundleContext);
+        serviceRegistration = bundleContext.registerService(CamelContext.class, camelContext, null);
+        camelContext.start();
+        camelContext.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("jetty:http://0.0.0.0:9090/example")
+                        .id("example-http-inbound")
+                        .convertBodyTo(String.class)
+                        .log("[EXAMPLE INBOUND] Received: ${body}")
+                        .choice()
+                        .when().simple("${headers.CamelHttpMethod} == 'POST'")
+                        .setHeader("type").jsonpath("$.notification.type")
+                        .choice()
+                        .when().simple("${header.type} == 'email'")
+                        .log("[EXAMPLE INBOUND] Received email notification")
+                        .to("direct:email")
+                        .setHeader("Exchange.HTTP_RESPONSE_CODE", constant(200))
+                        .when().simple("${header.type} == 'http'")
+                        .log("[EXAMPLE INBOUND] Received http notification")
+                        .to("direct:http")
+                        .setHeader("Exchange.HTTP_RESPONSE_CODE", constant(200))
+                        .otherwise()
+                        .log("[EXAMPLE INBOUND] Unknown notification")
+                        .setBody(constant("{ \"status\": \"reject\", \"type\": \"unknown\" }"))
+                        .setHeader("Exchange.HTTP_RESPONSE_CODE", constant(400))
+                        .otherwise()
+                        .log("[EXAMPLE INBOUND] only POST is accepted (${headers.CamelHttpMethod})")
+                        .setBody(constant("{ \"error\": \"only POST is accepted\" }"))
+                        .setHeader("Exchange.HTTP_RESPONSE_CODE", constant(500));
+
+                from("direct:email")
+                        .id("example-email")
+                        .log("[EXAMPLE EMAIL] Sending notification email")
+                        .setHeader("to").jsonpath("$.notification.to")
+                        .setHeader("subject", constant("Notification"))
+                        .setHeader("payload").jsonpath("$.notification.message")
+                        //.to("smtp://localhost");
+                        .setBody(simple("{ \"status\": \"email sent\", \"to\": \"${header.to}\", \"subject\": \"${header.subject}\" }"));
+
+                from("direct:http")
+                        .id("example-http")
+                        .log("[EXAMPLE HTTP] Sending http notification")
+                        .setHeader("service").jsonpath("$.notification.service")
+                        // send to HTTP service
+                        .setBody(simple("{ \"status\": \"http requested\", \"service\": \"${header.service}\" }"));
+            }
+        });
+    }
+
+    @Deactivate
+    public void deactivate() throws Exception {
+        camelContext.stop();
+        camelContext.removeRouteDefinitions(new ArrayList<RouteDefinition>(camelContext.getRouteDefinitions()));
+        bundleContext.ungetService(serviceRegistration.getReference());
+    }
+
+}
diff --git a/examples/karaf-camel-example/karaf-camel-example-java/src/main/java/org/apache/karaf/examples/camel/java/ExampleCamelRouteBuilder.java b/examples/karaf-camel-example/karaf-camel-example-java/src/main/java/org/apache/karaf/examples/camel/java/ExampleCamelRouteBuilder.java
deleted file mode 100644
index 9d21e66..0000000
--- a/examples/karaf-camel-example/karaf-camel-example-java/src/main/java/org/apache/karaf/examples/camel/java/ExampleCamelRouteBuilder.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.karaf.examples.camel.java;
-
-import org.apache.camel.builder.RouteBuilder;
-
-public class ExampleCamelRouteBuilder extends RouteBuilder {
-
-    @Override
-    public void configure() throws Exception {
-        from("jetty:http://0.0.0.0:9090/example")
-                .id("example-http-inbound")
-                .convertBodyTo(String.class)
-                .log("[EXAMPLE INBOUND] Received: ${body}")
-                .choice()
-                    .when().simple("${headers.CamelHttpMethod} == 'POST'")
-                        .setHeader("type").jsonpath("$.notification.type")
-                        .choice()
-                            .when().simple("${header.type} == 'email'")
-                                .log("[EXAMPLE INBOUND] Received email notification")
-                                .to("direct:email")
-                                .setHeader("Exchange.HTTP_RESPONSE_CODE", constant(200))
-                            .when().simple("${header.type} == 'http'")
-                                .log("[EXAMPLE INBOUND] Received http notification")
-                                .to("direct:http")
-                                .setHeader("Exchange.HTTP_RESPONSE_CODE", constant(200))
-                            .otherwise()
-                                .log("[EXAMPLE INBOUND] Unknown notification")
-                                .setBody(constant("{ \"status\": \"reject\", \"type\": \"unknown\" }"))
-                                .setHeader("Exchange.HTTP_RESPONSE_CODE", constant(400))
-                    .otherwise()
-                        .log("[EXAMPLE INBOUND] only POST is accepted (${headers.CamelHttpMethod})")
-                        .setBody(constant("{ \"error\": \"only POST is accepted\" }"))
-                        .setHeader("Exchange.HTTP_RESPONSE_CODE", constant(500));
-
-        from("direct:email")
-                .id("example-email")
-                .log("[EXAMPLE EMAIL] Sending notification email")
-                .setHeader("to").jsonpath("$.notification.to")
-                .setHeader("subject", constant("Notification"))
-                .setHeader("payload").jsonpath("$.notification.message")
-                //.to("smtp://localhost");
-                .setBody(simple("{ \"status\": \"email sent\", \"to\": \"${header.to}\", \"subject\": \"${header.subject}\" }"));
-
-        from("direct:http")
-                .id("example-http")
-                .log("[EXAMPLE HTTP] Sending http notification")
-                .setHeader("service").jsonpath("$.notification.service")
-                // send to HTTP service
-                .setBody(simple("{ \"status\": \"http requested\", \"service\": \"${header.service}\" }"));
-    }
-    
-}
diff --git a/examples/karaf-camel-example/karaf-camel-example-java/src/main/resources/OSGI-INF/blueprint/route.xml b/examples/karaf-camel-example/karaf-camel-example-java/src/main/resources/OSGI-INF/blueprint/route.xml
deleted file mode 100644
index 3adb646..0000000
--- a/examples/karaf-camel-example/karaf-camel-example-java/src/main/resources/OSGI-INF/blueprint/route.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <bean id="routeBuilder" class="org.apache.karaf.examples.camel.java.ExampleCamelRouteBuilder"/>
-
-    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
-        <routeBuilder ref="routeBuilder"/>
-    </camelContext>
-
-</blueprint>
\ No newline at end of file
diff --git a/examples/karaf-profile-example/pom.xml b/examples/karaf-profile-example/pom.xml
index 48e4c76..5e1acb2 100644
--- a/examples/karaf-profile-example/pom.xml
+++ b/examples/karaf-profile-example/pom.xml
@@ -32,6 +32,10 @@
     <name>Apache Karaf :: Examples :: Profile</name>
     <packaging>pom</packaging>
 
+    <properties>
+        <camel.version>2.24.3</camel.version>
+    </properties>
+
     <modules>
         <module>karaf-profile-example-registry</module>
         <module>karaf-profile-example-dynamic</module>
diff --git a/pom.xml b/pom.xml
index b491001..eb4a580 100644
--- a/pom.xml
+++ b/pom.xml
@@ -146,7 +146,7 @@
         <asm.version>8.0.1</asm.version>
         <javax.annotation.version>1.3.1</javax.annotation.version>
         <awaitility.version>3.1.6</awaitility.version>
-        <camel.version>2.24.3</camel.version>
+        <camel.version>3.4.3</camel.version>
         <cglib.bundle.version>3.2.9_1</cglib.bundle.version>
         <cxf.version>3.3.5</cxf.version>
         <jackson.version>2.10.5</jackson.version>