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