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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7ddb7cf  [KARAF-6486] Upgrade to Camel 3.7.1
     new 1b3d076  Merge pull request #229 from jbonofre/KARAF-6486
7ddb7cf is described below

commit 7ddb7cf78dfe7eb9743b88c05ecea56189283a98
Author: jbonofre <[email protected]>
AuthorDate: Fri Jan 29 10:22:42 2021 +0100

    [KARAF-6486] Upgrade to Camel 3.7.1
---
 appender/camel/pom.xml                             | 10 +++-
 .../decanter/appender/camel/CamelAppender.java     | 23 +++++++--
 .../decanter/appender/camel/CamelAppenderTest.java |  4 +-
 assembly/src/main/feature/feature.xml              |  2 +-
 .../decanter/collector/camel/CamelEventMapper.java | 54 ++++++++-----------
 .../collector/camel/DecanterEventNotifier.java     | 60 ++++++++++------------
 .../collector/camel/DecanterInterceptStrategy.java |  3 +-
 .../collector/camel/DefaultExchangeExtender.java   | 50 +++++++++++++++---
 .../collector/camel/DecanterEventNotifierTest.java | 24 ++++-----
 itest/pom.xml                                      |  4 +-
 .../itests/appender/CamelAppenderTest.java         | 23 +++++++--
 .../itests/collector/CamelCollectorTest.java       | 34 ++++++------
 .../itests/processor/CamelProcessorTest.java       | 11 +++-
 pom.xml                                            |  2 +-
 processor/camel/pom.xml                            | 14 ++++-
 .../decanter/processor/camel/CamelProcessor.java   |  9 +++-
 16 files changed, 202 insertions(+), 125 deletions(-)

diff --git a/appender/camel/pom.xml b/appender/camel/pom.xml
index b67d699..3710d86 100644
--- a/appender/camel/pom.xml
+++ b/appender/camel/pom.xml
@@ -35,8 +35,8 @@
 
     <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>
@@ -46,6 +46,12 @@
 
         <!-- test -->
         <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <version>${camel.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-simple</artifactId>
             <scope>test</scope>
diff --git 
a/appender/camel/src/main/java/org/apache/karaf/decanter/appender/camel/CamelAppender.java
 
b/appender/camel/src/main/java/org/apache/karaf/decanter/appender/camel/CamelAppender.java
index ffc0e3f..7f73899 100644
--- 
a/appender/camel/src/main/java/org/apache/karaf/decanter/appender/camel/CamelAppender.java
+++ 
b/appender/camel/src/main/java/org/apache/karaf/decanter/appender/camel/CamelAppender.java
@@ -18,8 +18,14 @@ package org.apache.karaf.decanter.appender.camel;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.core.osgi.OsgiClassResolver;
+import org.apache.camel.core.osgi.OsgiDataFormatResolver;
+import org.apache.camel.core.osgi.OsgiDefaultCamelContext;
+import org.apache.camel.core.osgi.OsgiLanguageResolver;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.karaf.decanter.appender.utils.EventFilter;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
 import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
@@ -48,19 +54,28 @@ public class CamelAppender implements EventHandler {
 
     private final static Logger LOGGER = 
LoggerFactory.getLogger(CamelAppender.class);
 
-    @SuppressWarnings("unchecked")
     @Activate
     public void activate(ComponentContext context) throws 
ConfigurationException {
-        open(context.getProperties());
+        open(context.getProperties(), context.getBundleContext());
     }
     
-    public void open(Dictionary<String, Object> config) throws 
ConfigurationException {
+    public void open(Dictionary<String, Object> config, BundleContext 
bundleContext) throws ConfigurationException {
         this.config = config;
         if (config.get(DESTINATION_URI_KEY) == null) {
             throw new ConfigurationException(DESTINATION_URI_KEY, 
DESTINATION_URI_KEY + " is not defined");
         }
         LOGGER.debug("Creating CamelContext, and use the {} URI", 
config.get(DESTINATION_URI_KEY));
-        this.camelContext = new DefaultCamelContext();
+        if (bundleContext == null) {
+            this.camelContext = new DefaultCamelContext();
+        } else {
+            OsgiDefaultCamelContext osgiCamelContext = new 
OsgiDefaultCamelContext(bundleContext);
+            osgiCamelContext.setName("decanter-appender-context");
+            osgiCamelContext.setClassResolver(new 
OsgiClassResolver(osgiCamelContext, bundleContext));
+            osgiCamelContext.setDataFormatResolver(new 
OsgiDataFormatResolver(bundleContext));
+            osgiCamelContext.setLanguageResolver(new 
OsgiLanguageResolver(bundleContext));
+            this.camelContext = osgiCamelContext;
+        }
+        this.camelContext.start();
     }
 
     @Override
diff --git 
a/appender/camel/src/test/java/org/apache/karaf/decanter/appender/camel/CamelAppenderTest.java
 
b/appender/camel/src/test/java/org/apache/karaf/decanter/appender/camel/CamelAppenderTest.java
index 4fca767..3eb95aa 100644
--- 
a/appender/camel/src/test/java/org/apache/karaf/decanter/appender/camel/CamelAppenderTest.java
+++ 
b/appender/camel/src/test/java/org/apache/karaf/decanter/appender/camel/CamelAppenderTest.java
@@ -62,7 +62,7 @@ public class CamelAppenderTest {
         CamelAppender appender = new CamelAppender();
         Hashtable<String, Object> config = new Hashtable<>();
         config.put(CamelAppender.DESTINATION_URI_KEY, "direct-vm:decanter");
-        appender.open(config);
+        appender.open(config, null);
 
         Map<String, Object> data = new HashMap<>();
         data.put(EventConstants.TIMESTAMP, TIMESTAMP);
@@ -87,7 +87,7 @@ public class CamelAppenderTest {
         config.put(CamelAppender.DESTINATION_URI_KEY, "direct-vm:decanter");
         config.put(EventFilter.PROPERTY_NAME_EXCLUDE_CONFIG, ".*refused.*");
         config.put(EventFilter.PROPERTY_VALUE_EXCLUDE_CONFIG, ".*refused.*");
-        appender.open(config);
+        appender.open(config, null);
 
         Map<String, Object> data = new HashMap<>();
         data.put(EventConstants.TIMESTAMP, TIMESTAMP);
diff --git a/assembly/src/main/feature/feature.xml 
b/assembly/src/main/feature/feature.xml
index d39e479..f10865c 100644
--- a/assembly/src/main/feature/feature.xml
+++ b/assembly/src/main/feature/feature.xml
@@ -496,7 +496,7 @@ 
org.apache.felix.eventadmin.IgnoreTimeout=org.apache.karaf.decanter.
     <feature name="decanter-processor-camel-core" version="${project.version}" 
description="Karaf Decanter Camel Processor core">
         <feature>decanter-common</feature>
         <feature>camel-core</feature>
-        <bundle 
dependency="true">mvn:org.apache.camel/camel-core-osgi/${camel.version}</bundle>
+        <bundle 
dependency="true">mvn:org.apache.camel.karaf/camel-core-osgi/${camel.version}</bundle>
         
<bundle>mvn:org.apache.karaf.decanter.processor/org.apache.karaf.decanter.processor.camel/${project.version}</bundle>
     </feature>
 
diff --git 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java
 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java
index 2c13a20..ded8345 100644
--- 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java
+++ 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelEventMapper.java
@@ -18,25 +18,16 @@ package org.apache.karaf.decanter.collector.camel;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.util.EventObject;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Route;
-import org.apache.camel.management.event.CamelContextResumeFailureEvent;
-import org.apache.camel.management.event.CamelContextStartupFailureEvent;
-import org.apache.camel.management.event.CamelContextStopFailureEvent;
-import org.apache.camel.management.event.ExchangeFailureHandledEvent;
-import org.apache.camel.management.event.ExchangeRedeliveryEvent;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
-import org.apache.camel.management.event.ServiceStartupFailureEvent;
-import org.apache.camel.management.event.ServiceStopFailureEvent;
+import org.apache.camel.spi.CamelEvent;
 
 public class CamelEventMapper {
     
-    public Map<String, Object> toMap(EventObject event) throws 
UnknownHostException {
+    public Map<String, Object> toMap(CamelEvent event) throws 
UnknownHostException {
         HashMap<String, Object> data = new HashMap<String, Object>();
         data.put("eventType", event.getClass().getName());
         data.put("type", "camelEvent");
@@ -46,59 +37,56 @@ public class CamelEventMapper {
         data.put("timestamp", System.currentTimeMillis());
         
         Object source = event.getSource();
-        if (event instanceof ExchangeSentEvent) {
-            ExchangeSentEvent sent = (ExchangeSentEvent) event;
+        if (event instanceof CamelEvent.ExchangeSentEvent) {
+            CamelEvent.ExchangeSentEvent sent = (CamelEvent.ExchangeSentEvent) 
event;
             data.put("sentToEndpointUri", sent.getEndpoint()
                     .getEndpointUri());
             data.put("sentTimeTaken", sent.getTimeTaken());
         }
-        if (event instanceof ExchangeSendingEvent) {
-            ExchangeSendingEvent sending = (ExchangeSendingEvent) event;
+        if (event instanceof CamelEvent.ExchangeSendingEvent) {
+            CamelEvent.ExchangeSendingEvent sending = 
(CamelEvent.ExchangeSendingEvent) event;
             data.put("sendingToEndpointUri", 
sending.getEndpoint().getEndpointUri());
         }
-        if (event instanceof ExchangeFailureHandledEvent) {
-            ExchangeFailureHandledEvent failHandled = 
(ExchangeFailureHandledEvent) event;
-            data.put("failureIsHandled", failHandled.isHandled());
+        if (event instanceof CamelEvent.ExchangeFailureHandledEvent) {
+            CamelEvent.ExchangeFailureHandledEvent failHandled = 
(CamelEvent.ExchangeFailureHandledEvent) event;
             data.put("failureIsDeadLetterChannel", 
failHandled.isDeadLetterChannel());
             data.put("failureHandler", failHandled.getFailureHandler() == null 
? "null"
                             : 
failHandled.getFailureHandler().getClass().getName());
         }
-        if (event instanceof ExchangeRedeliveryEvent) {
-            ExchangeRedeliveryEvent redelivery = (ExchangeRedeliveryEvent) 
event;
+        if (event instanceof CamelEvent.ExchangeRedeliveryEvent) {
+            CamelEvent.ExchangeRedeliveryEvent redelivery = 
(CamelEvent.ExchangeRedeliveryEvent) event;
             data.put("redeliveryAttempt", redelivery.getAttempt());
         }
         if (source instanceof Route) {
             Route route = (Route)source;
             data.put("routeId", route.getId());
-            data.put("camelContextName", 
route.getRouteContext().getCamelContext().getName());
+            data.put("camelContextName", route.getCamelContext().getName());
         }
         if (source instanceof CamelContext) {
             CamelContext context = (CamelContext)source;
             data.put("camelContextName", context.getName());
         }
             
-        if (event instanceof ServiceStartupFailureEvent) {
-            ServiceStartupFailureEvent service = (ServiceStartupFailureEvent) 
event;
+        if (event instanceof CamelEvent.ServiceStartupFailureEvent) {
+            CamelEvent.ServiceStartupFailureEvent service = 
(CamelEvent.ServiceStartupFailureEvent) event;
             data.put("serviceName", service.getService().getClass().getName());
-            data.put("camelContextName", service.getContext().getName());
             data.put("cause", service.getCause().toString());
         }
-        if (event instanceof ServiceStopFailureEvent) {
-            ServiceStopFailureEvent service = (ServiceStopFailureEvent) event;
+        if (event instanceof CamelEvent.ServiceStopFailureEvent) {
+            CamelEvent.ServiceStopFailureEvent service = 
(CamelEvent.ServiceStopFailureEvent) event;
             data.put("serviceName", service.getService().getClass().getName());
-            data.put("camelContextName", service.getContext().getName());
             data.put("cause", service.getCause().toString());
         }
-        if (event instanceof CamelContextResumeFailureEvent) {
-            CamelContextResumeFailureEvent context = 
(CamelContextResumeFailureEvent) event;
+        if (event instanceof CamelEvent.CamelContextResumeFailureEvent) {
+            CamelEvent.CamelContextResumeFailureEvent context = 
(CamelEvent.CamelContextResumeFailureEvent) event;
             data.put("cause", context.getCause().toString());
         }
-        if (event instanceof CamelContextStartupFailureEvent) {
-            CamelContextStartupFailureEvent context = 
(CamelContextStartupFailureEvent) event;
+        if (event instanceof CamelEvent.CamelContextStartupFailureEvent) {
+            CamelEvent.CamelContextStartupFailureEvent context = 
(CamelEvent.CamelContextStartupFailureEvent) event;
             data.put("cause", context.getCause().toString());
         }
-        if (event instanceof CamelContextStopFailureEvent) {
-            CamelContextStartupFailureEvent context = 
(CamelContextStartupFailureEvent) event;
+        if (event instanceof CamelEvent.CamelContextStopFailureEvent) {
+            CamelEvent.CamelContextStartupFailureEvent context = 
(CamelEvent.CamelContextStartupFailureEvent) event;
             data.put("cause", context.getCause().toString());
         }
         return data;
diff --git 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
index df417d0..4aa8eea 100644
--- 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
+++ 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifier.java
@@ -16,20 +16,12 @@
  */
 package org.apache.karaf.decanter.collector.camel;
 
-import java.util.EventObject;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Route;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeFailureHandledEvent;
-import org.apache.camel.management.event.ExchangeRedeliveryEvent;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
-import org.apache.camel.management.event.ServiceStartupFailureEvent;
-import org.apache.camel.management.event.ServiceStopFailureEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
@@ -78,49 +70,48 @@ public class DecanterEventNotifier extends 
EventNotifierSupport {
         dextender.setIncludeProperties(includeProperties);
     }
     
-    private boolean isIgnored(EventObject event) {
+    private boolean isIgnored(CamelEvent event) {
         if (isIgnoredBySourceType(event)) {
             return true;
         }
         
-        if (event instanceof ExchangeSentEvent && 
isIgnoreExchangeSentEvents()) {
+        if (event instanceof CamelEvent.ExchangeSentEvent && 
isIgnoreExchangeSentEvents()) {
             return true;
         }
-        if (event instanceof ExchangeSendingEvent && 
isIgnoreExchangeSendingEvents()) {
+        if (event instanceof CamelEvent.ExchangeSendingEvent && 
isIgnoreExchangeSendingEvents()) {
             return true;
         }
-        if (event instanceof ExchangeFailureHandledEvent && 
isIgnoreExchangeFailedEvents()) {
+        if (event instanceof CamelEvent.ExchangeFailureHandledEvent && 
isIgnoreExchangeFailedEvents()) {
             return true;
         }
-        if (event instanceof ExchangeRedeliveryEvent && 
isIgnoreExchangeRedeliveryEvents()) {
+        if (event instanceof CamelEvent.ExchangeRedeliveryEvent && 
isIgnoreExchangeRedeliveryEvents()) {
             return true;
         }
-        if (event instanceof ExchangeCompletedEvent && 
isIgnoreExchangeCompletedEvent()) {
+        if (event instanceof CamelEvent.ExchangeCompletedEvent && 
isIgnoreExchangeCompletedEvent()) {
             return true;
         }
-        if (event instanceof ExchangeCreatedEvent && 
isIgnoreExchangeCreatedEvent()) {
+        if (event instanceof CamelEvent.ExchangeCreatedEvent && 
isIgnoreExchangeCreatedEvent()) {
             return true;
         }
             
-        if (event instanceof ServiceStartupFailureEvent && 
isIgnoreServiceEvents()) {
+        if (event instanceof CamelEvent.ServiceStartupFailureEvent && 
isIgnoreServiceEvents()) {
             return true;
         }
-        if (event instanceof ServiceStopFailureEvent && 
isIgnoreServiceEvents()) {
+        if (event instanceof CamelEvent.ServiceStopFailureEvent && 
isIgnoreServiceEvents()) {
             return true;
         }
         
         return false;
     }
 
-    private boolean isIgnoredBySourceType(EventObject event) {
+    private boolean isIgnoredBySourceType(CamelEvent event) {
         Object source = event.getSource();
         return (source instanceof Exchange && isIgnoreExchangeEvents()
             || source instanceof Route && isIgnoreRouteEvents()
             || source instanceof CamelContext && isIgnoreCamelContextEvents());
     }
 
-    @Override
-    public boolean isEnabled(EventObject eventObject) {
+    public boolean isEnabled(CamelEvent eventObject) {
         if (eventObject == null) {
             return false;
         }
@@ -141,26 +132,29 @@ public class DecanterEventNotifier extends 
EventNotifierSupport {
             return context.getName().matches(camelContextMatcher);
         } else if (source instanceof Route) {
             Route route = (Route)source;
-            boolean contextMatches = 
route.getRouteContext().getCamelContext().getName().matches(camelContextMatcher);
+            boolean contextMatches = 
route.getCamelContext().getName().matches(camelContextMatcher);
             return contextMatches && route.getId().matches(routeMatcher);
         } else {
             return false;
         }
     }
 
-    public void notify(EventObject event) throws Exception {
-        try {
-            Map<String, Object> eventMap = new CamelEventMapper().toMap(event);
-            Object source = event.getSource();
-            if (source instanceof Exchange) {
-                dextender.extend(eventMap, (Exchange)source);
-                if (extender != null) {
-                    extender.extend(eventMap, (Exchange)source);
+    @Override
+    public void notify(CamelEvent event) throws Exception {
+        if (isEnabled(event)) {
+            try {
+                Map<String, Object> eventMap = new 
CamelEventMapper().toMap(event);
+                Object source = event.getSource();
+                if (source instanceof Exchange) {
+                    dextender.extend(eventMap, (Exchange) source);
+                    if (extender != null) {
+                        extender.extend(eventMap, (Exchange) source);
+                    }
                 }
+                eventAdmin.postEvent(new Event("decanter/collect/camel/event", 
eventMap));
+            } catch (Exception ex) {
+                LOG.warn("Failed to handle event", ex);
             }
-            eventAdmin.postEvent(new Event("decanter/collect/camel/event", 
eventMap));
-        } catch (Exception ex) {
-            LOG.warn("Failed to handle event", ex);
         }
     }
 
diff --git 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategy.java
 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategy.java
index bea43d8..4b7cad8 100644
--- 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategy.java
+++ 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DecanterInterceptStrategy.java
@@ -21,6 +21,7 @@ import java.util.HashMap;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
+import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.InterceptStrategy;
@@ -34,7 +35,7 @@ public class DecanterInterceptStrategy implements 
InterceptStrategy {
     private DecanterCamelEventExtender extender;
 
     @Override
-    public Processor wrapProcessorInInterceptors(CamelContext context, 
ProcessorDefinition<?> definition, Processor target, Processor nextTarget) 
throws Exception {
+    public Processor wrapProcessorInInterceptors(CamelContext context, 
NamedNode definition, Processor target, Processor nextTarget) throws Exception {
         Processor answer = new Processor() {
             @Override
             public void process(Exchange exchange) throws Exception {
diff --git 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java
 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java
index 026e695..d2d7345 100644
--- 
a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java
+++ 
b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/DefaultExchangeExtender.java
@@ -19,10 +19,8 @@ package org.apache.karaf.decanter.collector.camel;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.camel.Exchange;
-import org.apache.camel.MessageHistory;
-import org.apache.camel.RouteNode;
-import org.apache.camel.util.MessageHelper;
+import org.apache.camel.*;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * Adds the default data from the Exchange to the data map
@@ -48,17 +46,17 @@ public class DefaultExchangeExtender implements 
DecanterCamelEventExtender {
             data.put("inHeaders", exchange.getIn().getHeaders());
         }
         if (includeBody) {
-            data.put("inBody", 
MessageHelper.extractBodyAsString(exchange.getIn()));
+            data.put("inBody", extractBodyAsString(exchange.getIn()));
         }
-        data.put("inBodyType", 
MessageHelper.getBodyTypeName(exchange.getIn()));
+        data.put("inBodyType", getBodyTypeName(exchange.getIn()));
         if (exchange.hasOut()) {
             if (includeHeaders) {
                 data.put("outHeaders", exchange.getOut().getHeaders());
             }
             if (includeBody) {
-                data.put("outBody", 
MessageHelper.extractBodyAsString(exchange.getOut()));
+                data.put("outBody", extractBodyAsString(exchange.getOut()));
             }
-            data.put("outBodyType", 
MessageHelper.getBodyTypeName(exchange.getOut()));
+            data.put("outBodyType", getBodyTypeName(exchange.getOut()));
         }
         data.put("causedByException", extractCausedByException(exchange));
     }
@@ -89,6 +87,42 @@ public class DefaultExchangeExtender implements 
DecanterCamelEventExtender {
         return (cause != null) ? cause.toString() : null;
     }
 
+    private static String extractBodyAsString(Message message) {
+        if (message == null) {
+            return null;
+        } else {
+            Object body = message.getBody();
+            if (body instanceof String) {
+                return (String)body;
+            } else {
+                StreamCache newBody = 
(StreamCache)message.getBody(StreamCache.class);
+                if (newBody != null) {
+                    message.setBody(newBody);
+                }
+
+                Object answer = message.getBody(String.class);
+                if (answer == null) {
+                    answer = message.getBody();
+                }
+
+                if (newBody != null) {
+                    newBody.reset();
+                }
+
+                return answer != null ? answer.toString() : null;
+            }
+        }
+    }
+
+    private static String getBodyTypeName(Message message) {
+        if (message == null) {
+            return null;
+        } else {
+            String answer = ObjectHelper.classCanonicalName(message.getBody());
+            return answer != null && answer.startsWith("java.lang.") ? 
answer.substring(10) : answer;
+        }
+    }
+
     public void setIncludeBody(boolean includeBody) {
         this.includeBody = includeBody;
     }
diff --git 
a/collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifierTest.java
 
b/collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifierTest.java
index 6916bc1..5912bf8 100644
--- 
a/collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifierTest.java
+++ 
b/collector/camel/src/test/java/org/apache/karaf/decanter/collector/camel/DecanterEventNotifierTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.management.event.*;
+import org.apache.camel.spi.CamelEvent;
 import org.junit.Assert;
 import org.junit.Test;
 import org.osgi.service.event.Event;
@@ -40,44 +40,38 @@ public class DecanterEventNotifierTest {
         ProducerTemplate producerTemplate = 
camelContext.createProducerTemplate();
         producerTemplate.sendBodyAndHeader("direct:start", "TEST", "foo", 
"bar");
 
-        Assert.assertEquals(10, eventAdmin.getPostEvents().size());
+        Assert.assertEquals(12, eventAdmin.getPostEvents().size());
 
         Event camelContextStartingEvent = eventAdmin.getPostEvents().get(0);
         Assert.assertEquals("test-context", 
camelContextStartingEvent.getProperty("camelContextName"));
-        Assert.assertEquals(CamelContextStartingEvent.class.getName(), 
camelContextStartingEvent.getProperty("eventType"));
+        
Assert.assertEquals(org.apache.camel.impl.event.CamelContextStartingEvent.class.getName(),
 camelContextStartingEvent.getProperty("eventType"));
         Assert.assertEquals("camelEvent", 
camelContextStartingEvent.getProperty("type"));
 
         Event routeAddedEvent = eventAdmin.getPostEvents().get(1);
         Assert.assertEquals("test-context", 
routeAddedEvent.getProperty("camelContextName"));
-        Assert.assertEquals("test-route", 
routeAddedEvent.getProperty("routeId"));
-        Assert.assertEquals(RouteAddedEvent.class.getName(), 
routeAddedEvent.getProperty("eventType"));
+        
Assert.assertEquals(org.apache.camel.impl.event.CamelContextRoutesStartingEvent.class.getName(),
 routeAddedEvent.getProperty("eventType"));
         Assert.assertEquals("camelEvent", routeAddedEvent.getProperty("type"));
 
         Event routeStartedEvent = eventAdmin.getPostEvents().get(2);
         Assert.assertEquals("test-context", 
routeStartedEvent.getProperty("camelContextName"));
         Assert.assertEquals("test-route", 
routeStartedEvent.getProperty("routeId"));
-        Assert.assertEquals(RouteStartedEvent.class.getName(), 
routeStartedEvent.getProperty("eventType"));
+        
Assert.assertEquals(org.apache.camel.impl.event.RouteAddedEvent.class.getName(),
 routeStartedEvent.getProperty("eventType"));
         Assert.assertEquals("camelEvent", 
routeStartedEvent.getProperty("type"));
 
         Event camelContextStartedEvent = eventAdmin.getPostEvents().get(3);
         Assert.assertEquals("test-context", 
camelContextStartedEvent.getProperty("camelContextName"));
-        Assert.assertEquals(CamelContextStartedEvent.class.getName(), 
camelContextStartedEvent.getProperty("eventType"));
+        
Assert.assertEquals(org.apache.camel.impl.event.RouteStartedEvent.class.getName(),
 camelContextStartedEvent.getProperty("eventType"));
         Assert.assertEquals("camelEvent", 
camelContextStartedEvent.getProperty("type"));
 
         Event exchangeSendingEvent = eventAdmin.getPostEvents().get(4);
         Assert.assertEquals("test-context", 
exchangeSendingEvent.getProperty("camelContextName"));
-        Assert.assertEquals(ExchangeSendingEvent.class.getName(), 
exchangeSendingEvent.getProperty("eventType"));
+        
Assert.assertEquals(org.apache.camel.impl.event.CamelContextRoutesStartedEvent.class.getName(),
 exchangeSendingEvent.getProperty("eventType"));
         Assert.assertEquals("camelEvent", 
exchangeSendingEvent.getProperty("type"));
-        Assert.assertEquals("InOnly", 
exchangeSendingEvent.getProperty("exchangePattern"));
-        Assert.assertEquals("direct://start", 
exchangeSendingEvent.getProperty("sendingToEndpointUri"));
-        Assert.assertEquals("TEST", 
exchangeSendingEvent.getProperty("inBody"));
 
         Event exchangeCreatedEvent = eventAdmin.getPostEvents().get(5);
         Assert.assertEquals("test-context", 
exchangeCreatedEvent.getProperty("camelContextName"));
-        Assert.assertEquals(ExchangeCreatedEvent.class.getName(), 
exchangeCreatedEvent.getProperty("eventType"));
+        
Assert.assertEquals(org.apache.camel.impl.event.CamelContextStartedEvent.class.getName(),
 exchangeCreatedEvent.getProperty("eventType"));
         Assert.assertEquals("camelEvent", 
exchangeCreatedEvent.getProperty("type"));
-        Assert.assertEquals("InOnly", 
exchangeCreatedEvent.getProperty("exchangePattern"));
-        Assert.assertEquals("TEST", 
exchangeCreatedEvent.getProperty("inBody"));
     }
 
     @Test
@@ -108,7 +102,7 @@ public class DecanterEventNotifierTest {
         ProducerTemplate producerTemplate = 
camelContext.createProducerTemplate();
         producerTemplate.sendBodyAndHeader("direct:start", "TEST", "foo", 
"bar");
 
-        Assert.assertEquals(4, eventAdmin.getPostEvents().size());
+        Assert.assertEquals(6, eventAdmin.getPostEvents().size());
     }
 
     @Test
diff --git a/itest/pom.xml b/itest/pom.xml
index 09e13c3..9624b77 100644
--- a/itest/pom.xml
+++ b/itest/pom.xml
@@ -98,8 +98,8 @@
 
         <!-- camel -->
         <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>
             <scope>test</scope>
         </dependency>
diff --git 
a/itest/src/test/java/org/apache/karaf/decanter/itests/appender/CamelAppenderTest.java
 
b/itest/src/test/java/org/apache/karaf/decanter/itests/appender/CamelAppenderTest.java
index 4c2ff09..616d81d 100644
--- 
a/itest/src/test/java/org/apache/karaf/decanter/itests/appender/CamelAppenderTest.java
+++ 
b/itest/src/test/java/org/apache/karaf/decanter/itests/appender/CamelAppenderTest.java
@@ -16,9 +16,14 @@
  */
 package org.apache.karaf.decanter.itests.appender;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.core.osgi.OsgiClassResolver;
+import org.apache.camel.core.osgi.OsgiDataFormatResolver;
+import org.apache.camel.core.osgi.OsgiDefaultCamelContext;
+import org.apache.camel.core.osgi.OsgiLanguageResolver;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.karaf.itests.KarafTestSupport;
 import org.apache.karaf.jaas.boot.principal.RolePrincipal;
@@ -31,11 +36,14 @@ import org.ops4j.pax.exam.junit.PaxExam;
 import org.ops4j.pax.exam.karaf.options.KarafDistributionOption;
 import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
 import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.List;
 import java.util.stream.Stream;
 
@@ -53,7 +61,7 @@ public class CamelAppenderTest extends KarafTestSupport {
         return Stream.of(super.config(), 
options).flatMap(Stream::of).toArray(Option[]::new);
     }
 
-    @Test
+    @Test(timeout = 60000)
     public void test() throws Exception {
         final List<Exchange> exchanges = new ArrayList<>();
 
@@ -62,18 +70,25 @@ public class CamelAppenderTest extends KarafTestSupport {
         RouteBuilder routeBuilder = new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct-vm:decanter").process(new Processor() {
+                from("direct-vm:decanter").routeId("test").process(new 
Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
+                        System.out.println("Adding exchange");
                         exchanges.add(exchange);
                     }
                 });
             }
         };
-        DefaultCamelContext camelContext = new DefaultCamelContext();
+
+        BundleContext bundleContext = 
FrameworkUtil.getBundle(this.getClass()).getBundleContext();
+        OsgiDefaultCamelContext camelContext = new 
OsgiDefaultCamelContext(bundleContext);
+        camelContext.setClassResolver(new OsgiClassResolver(camelContext, 
bundleContext));
+        camelContext.setDataFormatResolver(new 
OsgiDataFormatResolver(bundleContext));
+        camelContext.setLanguageResolver(new 
OsgiLanguageResolver(bundleContext));
         camelContext.setName("context-test");
-        camelContext.addRoutes(routeBuilder);
+        bundleContext.registerService(CamelContext.class, camelContext, null);
         camelContext.start();
+        camelContext.addRoutes(routeBuilder);
 
         while (!camelContext.isStarted()) {
             Thread.sleep(200);
diff --git 
a/itest/src/test/java/org/apache/karaf/decanter/itests/collector/CamelCollectorTest.java
 
b/itest/src/test/java/org/apache/karaf/decanter/itests/collector/CamelCollectorTest.java
index 2b211d2..713ef91 100644
--- 
a/itest/src/test/java/org/apache/karaf/decanter/itests/collector/CamelCollectorTest.java
+++ 
b/itest/src/test/java/org/apache/karaf/decanter/itests/collector/CamelCollectorTest.java
@@ -18,6 +18,10 @@ package org.apache.karaf.decanter.itests.collector;
 
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.core.osgi.OsgiClassResolver;
+import org.apache.camel.core.osgi.OsgiDataFormatResolver;
+import org.apache.camel.core.osgi.OsgiDefaultCamelContext;
+import org.apache.camel.core.osgi.OsgiLanguageResolver;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.karaf.decanter.collector.camel.DecanterEventNotifier;
 import org.apache.karaf.decanter.collector.camel.DecanterInterceptStrategy;
@@ -85,11 +89,14 @@ public class CamelCollectorTest extends KarafTestSupport {
                 from("direct:test").routeId("route-test").to("log:foo");
             }
         };
-        DefaultCamelContext camelContext = new DefaultCamelContext();
+        OsgiDefaultCamelContext camelContext = new 
OsgiDefaultCamelContext(bundleContext);
+        camelContext.setClassResolver(new OsgiClassResolver(camelContext, 
bundleContext));
+        camelContext.setDataFormatResolver(new 
OsgiDataFormatResolver(bundleContext));
+        camelContext.setLanguageResolver(new 
OsgiLanguageResolver(bundleContext));
         camelContext.setName("context-test");
-        camelContext.addRoutes(routeBuilder);
         camelContext.addInterceptStrategy(tracer);
         camelContext.start();
+        camelContext.addRoutes(routeBuilder);
 
         // send a exchange into the route
         ProducerTemplate producerTemplate = 
camelContext.createProducerTemplate();
@@ -101,7 +108,6 @@ public class CamelCollectorTest extends KarafTestSupport {
         Assert.assertEquals("context-test", 
received.get(0).getProperty("camelContextName"));
         Assert.assertEquals("InOnly", 
received.get(0).getProperty("exchangePattern"));
         Assert.assertEquals("camelTracer", 
received.get(0).getProperty("type"));
-        Assert.assertEquals("log:foo", 
received.get(0).getProperty("to1.label"));
         Assert.assertEquals("route-test", 
received.get(0).getProperty("routeId"));
         Assert.assertEquals("direct://test", 
received.get(0).getProperty("fromEndpointUri"));
         Assert.assertEquals("root", received.get(0).getProperty("karafName"));
@@ -139,11 +145,14 @@ public class CamelCollectorTest extends KarafTestSupport {
             }
         };
 
-        DefaultCamelContext camelContext = new DefaultCamelContext();
+        OsgiDefaultCamelContext camelContext = new 
OsgiDefaultCamelContext(bundleContext);
+        camelContext.setClassResolver(new OsgiClassResolver(camelContext, 
bundleContext));
+        camelContext.setDataFormatResolver(new 
OsgiDataFormatResolver(bundleContext));
+        camelContext.setLanguageResolver(new 
OsgiLanguageResolver(bundleContext));
         camelContext.setName("context-test");
-        camelContext.addRoutes(builder);
         camelContext.getManagementStrategy().addEventNotifier(notifier);
         camelContext.start();
+        camelContext.addRoutes(builder);
 
         // send a exchange into the route
         ProducerTemplate producerTemplate = 
camelContext.createProducerTemplate();
@@ -154,41 +163,36 @@ public class CamelCollectorTest extends KarafTestSupport {
         // camel context starting
         Assert.assertEquals("decanter/collect/camel/event", 
received.get(0).getTopic());
         Assert.assertEquals("root", received.get(0).getProperty("karafName"));
-        
Assert.assertEquals("org.apache.camel.management.event.CamelContextStartingEvent",
 received.get(0).getProperty("eventType"));
+        
Assert.assertEquals("org.apache.camel.impl.event.CamelContextStartingEvent", 
received.get(0).getProperty("eventType"));
         Assert.assertEquals("context-test", 
received.get(0).getProperty("camelContextName"));
         Assert.assertEquals("camelEvent", received.get(0).getProperty("type"));
 
         // add route
         Assert.assertEquals("decanter/collect/camel/event", 
received.get(1).getTopic());
         Assert.assertEquals("root", received.get(1).getProperty("karafName"));
-        
Assert.assertEquals("org.apache.camel.management.event.RouteAddedEvent", 
received.get(1).getProperty("eventType"));
+        
Assert.assertEquals("org.apache.camel.impl.event.CamelContextRoutesStartingEvent",
 received.get(1).getProperty("eventType"));
         Assert.assertEquals("context-test", 
received.get(1).getProperty("camelContextName"));
-        Assert.assertEquals("route-test", 
received.get(1).getProperty("routeId"));
         Assert.assertEquals("camelEvent", received.get(1).getProperty("type"));
 
         // route started
         Assert.assertEquals("decanter/collect/camel/event", 
received.get(2).getTopic());
         Assert.assertEquals("root", received.get(2).getProperty("karafName"));
-        
Assert.assertEquals("org.apache.camel.management.event.RouteStartedEvent", 
received.get(2).getProperty("eventType"));
+        
Assert.assertEquals("org.apache.camel.impl.event.CamelContextRoutesStartedEvent",
 received.get(2).getProperty("eventType"));
         Assert.assertEquals("context-test", 
received.get(2).getProperty("camelContextName"));
-        Assert.assertEquals("route-test", 
received.get(2).getProperty("routeId"));
         Assert.assertEquals("camelEvent", received.get(2).getProperty("type"));
 
         // camel context started
         Assert.assertEquals("decanter/collect/camel/event", 
received.get(3).getTopic());
         Assert.assertEquals("root", received.get(3).getProperty("karafName"));
-        
Assert.assertEquals("org.apache.camel.management.event.CamelContextStartedEvent",
 received.get(3).getProperty("eventType"));
+        
Assert.assertEquals("org.apache.camel.impl.event.CamelContextStartedEvent", 
received.get(3).getProperty("eventType"));
         Assert.assertEquals("context-test", 
received.get(3).getProperty("camelContextName"));
         Assert.assertEquals("camelEvent", received.get(3).getProperty("type"));
 
         // exchange sending
         Assert.assertEquals("decanter/collect/camel/event", 
received.get(4).getTopic());
         Assert.assertEquals("root", received.get(4).getProperty("karafName"));
-        
Assert.assertEquals("org.apache.camel.management.event.ExchangeSendingEvent", 
received.get(4).getProperty("eventType"));
+        Assert.assertEquals("org.apache.camel.impl.event.RouteAddedEvent", 
received.get(4).getProperty("eventType"));
         Assert.assertEquals("context-test", 
received.get(4).getProperty("camelContextName"));
-        Assert.assertEquals("direct://test", 
received.get(4).getProperty("fromEndpointUri"));
-        Assert.assertEquals("This is a test", 
received.get(4).getProperty("inBody"));
-        Assert.assertEquals("String", 
received.get(4).getProperty("inBodyType"));
     }
 
 }
diff --git 
a/itest/src/test/java/org/apache/karaf/decanter/itests/processor/CamelProcessorTest.java
 
b/itest/src/test/java/org/apache/karaf/decanter/itests/processor/CamelProcessorTest.java
index 62bbc2d..552b6fd 100644
--- 
a/itest/src/test/java/org/apache/karaf/decanter/itests/processor/CamelProcessorTest.java
+++ 
b/itest/src/test/java/org/apache/karaf/decanter/itests/processor/CamelProcessorTest.java
@@ -19,6 +19,10 @@ package org.apache.karaf.decanter.itests.processor;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.core.osgi.OsgiClassResolver;
+import org.apache.camel.core.osgi.OsgiDataFormatResolver;
+import org.apache.camel.core.osgi.OsgiDefaultCamelContext;
+import org.apache.camel.core.osgi.OsgiLanguageResolver;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.karaf.itests.KarafTestSupport;
 import org.apache.karaf.jaas.boot.principal.RolePrincipal;
@@ -64,8 +68,12 @@ public class CamelProcessorTest extends KarafTestSupport {
         }
 
         System.out.println("Creating test Camel route ...");
-        DefaultCamelContext camelContext = new DefaultCamelContext();
+        OsgiDefaultCamelContext camelContext = new 
OsgiDefaultCamelContext(bundleContext);
+        camelContext.setClassResolver(new OsgiClassResolver(camelContext, 
bundleContext));
+        camelContext.setDataFormatResolver(new 
OsgiDataFormatResolver(bundleContext));
+        camelContext.setLanguageResolver(new 
OsgiLanguageResolver(bundleContext));
         camelContext.setName("decanter-test-context");
+        camelContext.start();
         camelContext.addRoutes(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
@@ -80,7 +88,6 @@ public class CamelProcessorTest extends KarafTestSupport {
                         }).to("direct-vm:decanter-callback");
             }
         });
-        camelContext.start();
         while (!camelContext.isStarted()) {
             Thread.sleep(200);
         }
diff --git a/pom.xml b/pom.xml
index 0447f2e..7814a7d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,7 +38,7 @@
         <baseline>1.0.0</baseline>
         <baseline.skip>true</baseline.skip>
         <activemq.version>5.15.13</activemq.version>
-        <camel.version>2.25.2</camel.version>
+        <camel.version>3.7.1</camel.version>
         <cassandra.driver.version>4.9.0</cassandra.driver.version>
         <glassfish-json.version>1.1.4</glassfish-json.version>
         <json-api.version>1.1.4</json-api.version>
diff --git a/processor/camel/pom.xml b/processor/camel/pom.xml
index a7c8cef..74c7077 100644
--- a/processor/camel/pom.xml
+++ b/processor/camel/pom.xml
@@ -35,7 +35,7 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.apache.camel</groupId>
+            <groupId>org.apache.camel.karaf</groupId>
             <artifactId>camel-core-osgi</artifactId>
             <version>${camel.version}</version>
         </dependency>
@@ -46,6 +46,18 @@
             <artifactId>slf4j-simple</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-languages</artifactId>
+            <version>${camel.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-directvm</artifactId>
+            <version>${camel.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/processor/camel/src/main/java/org/apache/karaf/decanter/processor/camel/CamelProcessor.java
 
b/processor/camel/src/main/java/org/apache/karaf/decanter/processor/camel/CamelProcessor.java
index 1f4b224..ecd610b 100644
--- 
a/processor/camel/src/main/java/org/apache/karaf/decanter/processor/camel/CamelProcessor.java
+++ 
b/processor/camel/src/main/java/org/apache/karaf/decanter/processor/camel/CamelProcessor.java
@@ -21,7 +21,10 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.core.osgi.OsgiClassResolver;
+import org.apache.camel.core.osgi.OsgiDataFormatResolver;
 import org.apache.camel.core.osgi.OsgiDefaultCamelContext;
+import org.apache.camel.core.osgi.OsgiLanguageResolver;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.RouteDefinition;
@@ -70,7 +73,11 @@ public class CamelProcessor implements EventHandler {
         delegateUri = (configuration.get("delegate.uri") != null) ? 
configuration.get("delegate.uri").toString() : "direct-vm:decanter-delegate";
 
         if (bundleContext != null) {
-            camelContext = new OsgiDefaultCamelContext(bundleContext);
+            OsgiDefaultCamelContext osgiCamelContext = new 
OsgiDefaultCamelContext(bundleContext);
+            osgiCamelContext.setClassResolver(new 
OsgiClassResolver(camelContext, bundleContext));
+            osgiCamelContext.setDataFormatResolver(new 
OsgiDataFormatResolver(bundleContext));
+            osgiCamelContext.setLanguageResolver(new 
OsgiLanguageResolver(bundleContext));
+            camelContext = osgiCamelContext;
             serviceRegistration = 
bundleContext.registerService(CamelContext.class, camelContext, null);
         } else {
             camelContext = new DefaultCamelContext();

Reply via email to