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
  */