You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by al...@apache.org on 2018/09/29 08:40:21 UTC

[camel] 02/03: Makes encoding activation configuration

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

aldettinger pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 0740130b68c366bb546784e747e9b92404fdcd09
Author: Frederic Giloux <fg...@users.noreply.github.com>
AuthorDate: Fri Sep 28 19:35:23 2018 +0200

    Makes encoding activation configuration
---
 .../src/main/docs/opentracing.adoc                 |  5 ++--
 .../camel/opentracing/OpenTracingTracer.java       | 15 +++++++++---
 .../apache/camel/opentracing/SpanDecorator.java    |  6 +++--
 .../decorators/AbstractMessagingSpanDecorator.java |  8 +++----
 .../decorators/AbstractSpanDecorator.java          |  6 +++--
 .../CamelMessagingHeadersExtractAdapter.java       |  9 ++++++--
 .../CamelMessagingHeadersInjectAdapter.java        |  6 +++--
 .../CamelMessagingHeadersExtractAdapterTest.java   | 27 +++++++++++++++++-----
 .../CamelMessagingHeadersInjectAdapterTest.java    | 13 ++++++++---
 .../starter/OpenTracingAutoConfiguration.java      |  3 +++
 .../OpenTracingConfigurationProperties.java        | 11 +++++++++
 11 files changed, 83 insertions(+), 26 deletions(-)

diff --git a/components/camel-opentracing/src/main/docs/opentracing.adoc b/components/camel-opentracing/src/main/docs/opentracing.adoc
index 6055895..7fe3107 100644
--- a/components/camel-opentracing/src/main/docs/opentracing.adoc
+++ b/components/camel-opentracing/src/main/docs/opentracing.adoc
@@ -26,6 +26,8 @@ The configuration properties for the OpenTracing tracer are:
 |excludePatterns |  | Sets exclude pattern(s) that will disable tracing for Camel
 messages that matches the pattern. The content is a Set<String> where the key is a pattern. The pattern
 uses the rules from Intercept.
+|encoding |false| Sets whether the header keys need to be encoded (connector specific) or not. The value is a boolean.
+Dashes need for instances to be encoded for JMS property keys.
 
 |=======================================================================
 
@@ -102,10 +104,9 @@ The OpenTracing Java Agent is associated with the following dependency:
 
 The `Tracer` used will be implicitly loaded from the camel context `Registry` or using the `ServiceLoader`.
 
-How this agent is used will be specific to how you execute your application. _Service2_ in the https://github.com/apache/camel/tree/master/examples/camel-example-opentracing[camel-example-opentracing] downloads the agent into a local folder and then uses the `exec-maven-plugin` to launch the service with the `-javaagent` command line option. 
+How this agent is used will be specific to how you execute your application. _Service2_ in the https://github.com/apache/camel/tree/master/examples/camel-example-opentracing[camel-example-opentracing] downloads the agent into a local folder and then uses the `exec-maven-plugin` to launch the service with the `-javaagent` command line option.
 
 ### Example
 
 You can find an example demonstrating the three ways to configure OpenTracing here:
 https://github.com/apache/camel/tree/master/examples/camel-example-opentracing[camel-example-opentracing]
-
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
index d4f0dba..e6f9c6d 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
@@ -74,6 +74,7 @@ public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFact
     private Tracer tracer;
     private CamelContext camelContext;
     private Set<String> excludePatterns = new HashSet<>();
+    private boolean encoding;
 
     static {
         ServiceLoader.load(SpanDecorator.class).forEach(d -> {
@@ -131,7 +132,15 @@ public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFact
         this.excludePatterns = excludePatterns;
     }
 
-    /**
+    public boolean isEncoding() {
+		return encoding;
+	}
+
+	public void setEncoding(boolean encoding) {
+		this.encoding = encoding;
+	}
+
+	/**
      * Adds an exclude pattern that will disable tracing for Camel messages that matches the pattern.
      *
      * @param pattern  the pattern such as route id, endpoint url
@@ -233,7 +242,7 @@ public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFact
                     Span span = spanBuilder.start();
                     sd.pre(span, ese.getExchange(), ese.getEndpoint());
                     tracer.inject(span.context(), Format.Builtin.TEXT_MAP,
-                        sd.getInjectAdapter(ese.getExchange().getIn().getHeaders()));
+                        sd.getInjectAdapter(ese.getExchange().getIn().getHeaders(), encoding));
                     ActiveSpanManager.activate(ese.getExchange(), span);
 
                     if (LOG.isTraceEnabled()) {
@@ -289,7 +298,7 @@ public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFact
                 SpanDecorator sd = getSpanDecorator(route.getEndpoint());
                 Span span = tracer.buildSpan(sd.getOperationName(exchange, route.getEndpoint()))
                     .asChildOf(tracer.extract(Format.Builtin.TEXT_MAP,
-                        sd.getExtractAdapter(exchange.getIn().getHeaders())))
+                        sd.getExtractAdapter(exchange.getIn().getHeaders(), encoding)))
                     .withTag(Tags.SPAN_KIND.getKey(), sd.getReceiverSpanKind())
                     .start();
                 sd.pre(span, exchange, route.getEndpoint());
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java
index 393e363..44c2a41 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/SpanDecorator.java
@@ -109,17 +109,19 @@ public interface SpanDecorator {
      * when the component is receiving a communication.
      *
      * @param a map containing the objects
+     * @param whether the headers are encoded
      * @return The extraction map
      */
-    TextMap getExtractAdapter(Map<String, Object> map);
+    TextMap getExtractAdapter(Map<String, Object> map, boolean encoding);
 
     /**
      * This method returns the map to be used for headers injection
      *  when the component is receiving a communication.
      *
      * @param a map containing the objects
+     * @param whether the headers are encoded
      * @return The injection map
      */
-    TextMap getInjectAdapter(Map<String, Object> map);
+    TextMap getInjectAdapter(Map<String, Object> map, boolean encoding);
 
 }
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java
index a0addfb..5a03953 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractMessagingSpanDecorator.java
@@ -80,12 +80,12 @@ public abstract class AbstractMessagingSpanDecorator extends AbstractSpanDecorat
     }
 
     @Override
-    public TextMap getExtractAdapter(final Map<String, Object> map) {
-    	return new CamelMessagingHeadersExtractAdapter(map);
+    public TextMap getExtractAdapter(final Map<String, Object> map, final boolean jmsEncoding) {
+    	return new CamelMessagingHeadersExtractAdapter(map, jmsEncoding);
     }
 
     @Override
-    public TextMap getInjectAdapter(final Map<String, Object> map) {
-    	return new CamelMessagingHeadersInjectAdapter(map);    	
+    public TextMap getInjectAdapter(final Map<String, Object> map, final boolean jmsEncoding) {
+    	return new CamelMessagingHeadersInjectAdapter(map, jmsEncoding);    	
     }
 }
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java
index 89648c5..6f51365 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/AbstractSpanDecorator.java
@@ -131,12 +131,14 @@ public abstract class AbstractSpanDecorator implements SpanDecorator {
     }
 
     @Override
-    public TextMap getExtractAdapter(final Map<String, Object> map) {
+    public TextMap getExtractAdapter(final Map<String, Object> map, boolean encoding) {
+    	// no encoding supported per default
     	return new CamelHeadersExtractAdapter(map);
     }
 
     @Override
-    public TextMap getInjectAdapter(final Map<String, Object> map) {
+    public TextMap getInjectAdapter(final Map<String, Object> map, boolean encoding) {
+    	// no encoding supported per default
     	return new CamelHeadersInjectAdapter(map);    	
     }
 }
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapter.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapter.java
index 2797fec..30d3d08 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapter.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapter.java
@@ -25,9 +25,11 @@ import java.util.Map;
 public final class CamelMessagingHeadersExtractAdapter implements TextMap {
  
     private final Map<String, String> map = new HashMap<>();
+    private final boolean jmsEncoding;
 
-    public CamelMessagingHeadersExtractAdapter(final Map<String, Object> map) {
+    public CamelMessagingHeadersExtractAdapter(final Map<String, Object> map, boolean jmsEncoding) {
     	// Extract string valued map entries
+        this.jmsEncoding = jmsEncoding;
         map.entrySet().stream().filter(e -> e.getValue() instanceof String).forEach(e ->
             this.map.put(decodeDash(e.getKey()), (String) e.getValue()));
     }
@@ -51,6 +53,9 @@ public final class CamelMessagingHeadersExtractAdapter implements TextMap {
      * @return the result
      */
     private String decodeDash(String key) {
-      return key.replace(CamelMessagingHeadersInjectAdapter.JMS_DASH, "-");
+    	if (jmsEncoding)
+    		return key.replace(CamelMessagingHeadersInjectAdapter.JMS_DASH, "-");
+    	else
+    		return key;
   }
 }
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapter.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapter.java
index c819d22..cb979c6 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapter.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapter.java
@@ -29,9 +29,11 @@ public final class CamelMessagingHeadersInjectAdapter implements TextMap {
 	static final String JMS_DASH = "_$dash$_";
 
 	private final Map<String, Object> map;
+	private final boolean jmsEncoding;
 
-    public CamelMessagingHeadersInjectAdapter(final Map<String, Object> map) {
+    public CamelMessagingHeadersInjectAdapter(final Map<String, Object> map, boolean jmsEncoding) {
         this.map = map;
+        this.jmsEncoding = jmsEncoding;
     }
 
     @Override
@@ -51,7 +53,7 @@ public final class CamelMessagingHeadersInjectAdapter implements TextMap {
      * Encode all dashes because JMS specification doesn't allow them in property name
      */
     private String encodeDash(String key) {
-      if (key == null || key.isEmpty()) {
+      if (key == null || key.isEmpty() || !jmsEncoding) {
         return key;
       }
 
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapterTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapterTest.java
index 178c46b..0d7bf85 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapterTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersExtractAdapterTest.java
@@ -8,23 +8,30 @@ import static org.apache.camel.opentracing.propagation.CamelMessagingHeadersInje
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+
+import org.junit.Before;
 import org.junit.Test;
 
 public class CamelMessagingHeadersExtractAdapterTest {
 	
+	private Map<String,Object> map;
+	
+	@Before
+	public void before() {
+	    map = new HashMap<String,Object>();
+	}
+	
 	@Test
 	public void noProperties() {
-		final Map<String, Object> map = new HashMap<String, Object>();
-		CamelMessagingHeadersExtractAdapter adapter = new CamelMessagingHeadersExtractAdapter(map);
+		CamelMessagingHeadersExtractAdapter adapter = new CamelMessagingHeadersExtractAdapter(map,true);
 		Iterator<Map.Entry<String, String>> iterator = adapter.iterator();
 		assertFalse(iterator.hasNext());
 	}
 
 	@Test
 	public void oneProperty() {
-		final Map<String, Object> map = new HashMap<String, Object>();
 		map.put("key", "value");
-		CamelMessagingHeadersExtractAdapter adapter = new CamelMessagingHeadersExtractAdapter(map);
+		CamelMessagingHeadersExtractAdapter adapter = new CamelMessagingHeadersExtractAdapter(map,true);
 		Iterator<Map.Entry<String, String>> iterator = adapter.iterator();
 		Map.Entry<String, String> entry = iterator.next();
 		assertEquals("key", entry.getKey());
@@ -33,12 +40,20 @@ public class CamelMessagingHeadersExtractAdapterTest {
 
 	@Test
 	public void propertyWithDash() {
-		final Map<String, Object> map = new HashMap<String, Object>();
 		map.put(JMS_DASH + "key" + JMS_DASH + "1" + JMS_DASH, "value1");
-		CamelMessagingHeadersExtractAdapter adapter = new CamelMessagingHeadersExtractAdapter(map);
+		CamelMessagingHeadersExtractAdapter adapter = new CamelMessagingHeadersExtractAdapter(map,true);
 		Iterator<Map.Entry<String, String>> iterator = adapter.iterator();
 		Map.Entry<String, String> entry = iterator.next();
 		assertEquals("-key-1-", entry.getKey());
 		assertEquals("value1", entry.getValue());
 	}
+
+	@Test
+	public void propertyWithoutDashEncoding() {
+		map.put(JMS_DASH + "key" + JMS_DASH + "1" + JMS_DASH, "value1");
+		CamelMessagingHeadersExtractAdapter adapter = new CamelMessagingHeadersExtractAdapter(map,false);
+		Iterator<Map.Entry<String, String>> iterator = adapter.iterator();
+		Map.Entry<String, String> entry = iterator.next();
+		assertEquals(JMS_DASH + "key" + JMS_DASH + "1" + JMS_DASH, entry.getKey());
+	}
 }
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapterTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapterTest.java
index 1220e77..7fe8152 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapterTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/propagation/CamelMessagingHeadersInjectAdapterTest.java
@@ -27,14 +27,14 @@ public class CamelMessagingHeadersInjectAdapterTest {
 	
 	@Test
 	public void cannotGetIterator() {
-		CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map);
+		CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map,true);
 		thrown.expect(UnsupportedOperationException.class);
 		adapter.iterator();
 	}
 
 	@Test
 	public void putProperties() {
-		CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map);
+		CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map,true);
 		adapter.put("key1", "value1");
 	    adapter.put("key2", "value2");
 	    adapter.put("key1", "value3");
@@ -44,8 +44,15 @@ public class CamelMessagingHeadersInjectAdapterTest {
 
 	@Test
 	public void propertyWithDash() {
-		CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map);
+		CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map,true);
 		adapter.put("-key-1-", "value1");
 		assertEquals("value1", map.get(JMS_DASH + "key" + JMS_DASH + "1" + JMS_DASH));
 	}
+
+	@Test
+	public void propertyWithoutDashEncoding() {
+		CamelMessagingHeadersInjectAdapter adapter = new CamelMessagingHeadersInjectAdapter(map,false);
+		adapter.put("-key-1-", "value1");
+		assertEquals(null, map.get(JMS_DASH + "key" + JMS_DASH + "1" + JMS_DASH));
+	}
 }
diff --git a/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingAutoConfiguration.java
index 76e5455..61afab3 100644
--- a/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingAutoConfiguration.java
@@ -47,6 +47,9 @@ public class OpenTracingAutoConfiguration {
         if (config.getExcludePatterns() != null) {
             ottracer.setExcludePatterns(config.getExcludePatterns());
         }
+        if (config.getEncoding() != null) {
+            ottracer.setEncoding(config.getEncoding().booleanValue());
+        }
         ottracer.init(camelContext);
 
         return ottracer;
diff --git a/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingConfigurationProperties.java b/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingConfigurationProperties.java
index 8add6b9..7cbf532 100644
--- a/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingConfigurationProperties.java
+++ b/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingConfigurationProperties.java
@@ -27,6 +27,10 @@ public class OpenTracingConfigurationProperties {
      * Sets exclude pattern(s) that will disable tracing for Camel messages that matches the pattern.
      */
     private Set<String> excludePatterns;
+    /**
+     * Activate or deactivate dash encoding in headers (required by JMS) for messaging
+     */
+    private Boolean encoding;
 
     public Set<String> getExcludePatterns() {
         return excludePatterns;
@@ -36,4 +40,11 @@ public class OpenTracingConfigurationProperties {
         this.excludePatterns = excludePatterns;
     }
 
+	public Boolean getEncoding() {
+		return encoding;
+	}
+
+	public void setEncoding(Boolean encoding) {
+		this.encoding = encoding;
+	}
 }