You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/05/25 14:39:55 UTC
[1/2] camel git commit: CAMEL-11149: SPI - Allow to plugin different
headers map implementation.
Repository: camel
Updated Branches:
refs/heads/master 1e67f3ca8 -> 2dc3a599c
CAMEL-11149: SPI - Allow to plugin different headers map implementation.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6dcfe8fc
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6dcfe8fc
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6dcfe8fc
Branch: refs/heads/master
Commit: 6dcfe8fc125e27ae7c74a28529ff6c099011dfb1
Parents: 1e67f3c
Author: Claus Ibsen <da...@apache.org>
Authored: Thu May 25 16:30:38 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu May 25 16:30:38 2017 +0200
----------------------------------------------------------------------
.../java/org/apache/camel/impl/DefaultCamelContext.java | 4 ++++
.../org/apache/camel/impl/DefaultHeadersMapFactory.java | 5 +++++
.../org/apache/camel/impl/HashMapHeadersMapFactory.java | 5 +++++
.../main/java/org/apache/camel/spi/HeadersMapFactory.java | 10 ++++++++++
.../camel/impl/CustomHeadersMapFactoryRouteTest.java | 5 +++++
5 files changed, 29 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/6dcfe8fc/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 7a1c772..656e963 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -3303,6 +3303,10 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
log.debug("AllowUseOriginalMessage enabled because UseOriginalMessage is in use");
}
+ if (!getHeadersMapFactory().isCaseInsensitive()) {
+ log.info("HeadersMapFactory is case-sensitive which can cause problems for protocols such as HTTP based, which rely on case-insensitive headers.");
+ }
+
// start routes
if (doNotStartRoutesOnFirstStart) {
log.debug("Skip starting of routes as CamelContext has been configured with autoStartup=false");
http://git-wip-us.apache.org/repos/asf/camel/blob/6dcfe8fc/camel-core/src/main/java/org/apache/camel/impl/DefaultHeadersMapFactory.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultHeadersMapFactory.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultHeadersMapFactory.java
index 77d38cb..ee2e190f 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultHeadersMapFactory.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultHeadersMapFactory.java
@@ -44,4 +44,9 @@ public class DefaultHeadersMapFactory implements HeadersMapFactory {
public boolean isInstanceOf(Map<String, Object> map) {
return map instanceof CaseInsensitiveMap;
}
+
+ @Override
+ public boolean isCaseInsensitive() {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6dcfe8fc/camel-core/src/main/java/org/apache/camel/impl/HashMapHeadersMapFactory.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/HashMapHeadersMapFactory.java b/camel-core/src/main/java/org/apache/camel/impl/HashMapHeadersMapFactory.java
index 386aae1..fe7c0dd 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/HashMapHeadersMapFactory.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/HashMapHeadersMapFactory.java
@@ -43,4 +43,9 @@ public class HashMapHeadersMapFactory implements HeadersMapFactory {
public boolean isInstanceOf(Map<String, Object> map) {
return map instanceof HashMap;
}
+
+ @Override
+ public boolean isCaseInsensitive() {
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6dcfe8fc/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java b/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java
index c789763..57a226f 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java
@@ -53,5 +53,15 @@ public interface HeadersMapFactory {
*/
boolean isInstanceOf(Map<String, Object> map);
+ /**
+ * Whether the created {@link Map} are case insensitive or not.
+ * <p/>
+ * Important: When using case sensitive (this method return false).
+ * Then the map is case sensitive which means headers such as <tt>content-type</tt> and <tt>Content-Type</tt> are
+ * two different keys which can be a problem for some protocols such as HTTP based, which rely on case insensitive headers.
+ * However case sensitive implementations can yield faster performance. Therefore use case sensitive implementation with care.
+ */
+ boolean isCaseInsensitive();
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6dcfe8fc/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java b/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java
index 734fb7a..37c3bb4 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java
@@ -79,5 +79,10 @@ public class CustomHeadersMapFactoryRouteTest extends ContextTestSupport {
public boolean isInstanceOf(Map<String, Object> map) {
return map instanceof HashMap;
}
+
+ @Override
+ public boolean isCaseInsensitive() {
+ return false;
+ }
}
}
[2/2] camel git commit: CAMEL-11149: SPI - Allow to plugin different
headers map implementation.
Posted by da...@apache.org.
CAMEL-11149: SPI - Allow to plugin different headers map implementation.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2dc3a599
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2dc3a599
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2dc3a599
Branch: refs/heads/master
Commit: 2dc3a599cd5264d944c547cd8afdef8b702d3fd2
Parents: 6dcfe8f
Author: Claus Ibsen <da...@apache.org>
Authored: Thu May 25 16:39:44 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu May 25 16:39:44 2017 +0200
----------------------------------------------------------------------
.../java/org/apache/camel/impl/DefaultCamelContext.java | 3 ++-
.../main/java/org/apache/camel/impl/DefaultExchange.java | 11 ++++++++---
.../java/org/apache/camel/spi/HeadersMapFactory.java | 3 +--
3 files changed, 11 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/2dc3a599/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 656e963..5869183 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -3303,8 +3303,9 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
log.debug("AllowUseOriginalMessage enabled because UseOriginalMessage is in use");
}
+ log.debug("Using HeadersMapFactory: {}", getHeadersMapFactory());
if (!getHeadersMapFactory().isCaseInsensitive()) {
- log.info("HeadersMapFactory is case-sensitive which can cause problems for protocols such as HTTP based, which rely on case-insensitive headers.");
+ log.info("HeadersMapFactory: {} is case-sensitive which can cause problems for protocols such as HTTP based, which rely on case-insensitive headers.", getHeadersMapFactory());
}
// start routes
http://git-wip-us.apache.org/repos/asf/camel/blob/2dc3a599/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
index 520dcad..229b274 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
@@ -141,7 +141,7 @@ public final class DefaultExchange implements Exchange {
return null;
}
- Map<String, Object> answer = context.getHeadersMapFactory().newMap(properties);
+ Map<String, Object> answer = createProperties();
// safe copy message history using a defensive copy
List<MessageHistory> history = (List<MessageHistory>) answer.remove(Exchange.MESSAGE_HISTORY);
@@ -253,7 +253,7 @@ public final class DefaultExchange implements Exchange {
public Map<String, Object> getProperties() {
if (properties == null) {
- properties = new ConcurrentHashMap<String, Object>();
+ properties = createProperties();
}
return properties;
}
@@ -517,7 +517,12 @@ public final class DefaultExchange implements Exchange {
}
return answer;
}
-
+
+ protected Map<String, Object> createProperties() {
+ // TODO: a concurrent map is likely not needed
+ return new ConcurrentHashMap<String, Object>();
+ }
+
private static boolean isExcludePatternMatch(String key, String... excludePatterns) {
for (String pattern : excludePatterns) {
if (EndpointHelper.matchPattern(key, pattern)) {
http://git-wip-us.apache.org/repos/asf/camel/blob/2dc3a599/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java b/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java
index 57a226f..fe2543e 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java
@@ -21,8 +21,7 @@ import java.util.Map;
import org.apache.camel.Message;
/**
- * Factory to create the {@link Map} implementation to use for storing headers and properties
- * on {@link Message} and {@link org.apache.camel.Exchange}.
+ * Factory to create the {@link Map} implementation to use for storing headers on {@link Message}.
*
* @see org.apache.camel.impl.DefaultHeadersMapFactory
*/