CAMEL-6583: Added option includeAllJMSXProperties to camel-jms.

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/96270b36
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/96270b36
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/96270b36

Branch: refs/heads/master
Commit: 96270b365572bd2194b3d9551b422e15b3a69299
Parents: 9433bf1
Author: Claus Ibsen <davscl...@apache.org>
Authored: Sun Jul 28 14:05:52 2013 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Sun Jul 28 14:05:52 2013 +0200

----------------------------------------------------------------------
 .../apache/camel/component/jms/JmsBinding.java  |  4 +-
 .../camel/component/jms/JmsComponent.java       | 16 ++++-
 .../camel/component/jms/JmsConfiguration.java   | 16 +++++
 .../apache/camel/component/jms/JmsEndpoint.java | 12 +++-
 .../component/jms/JmsHeaderFilterStrategy.java  |  8 ++-
 .../component/jms/JmsHeaderFilteringTest.java   | 19 ++++--
 .../jms/JmsIncludeAllJMSXPropertiesTest.java    | 71 ++++++++++++++++++++
 .../jms/JmsNotIncludeAllJMSXPropertiesTest.java | 71 ++++++++++++++++++++
 8 files changed, 206 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
index 4fca604..ed666df 100644
--- 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
+++ 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
@@ -77,7 +77,7 @@ public class JmsBinding {
 
     public JmsBinding() {
         this.endpoint = null;
-        headerFilterStrategy = new JmsHeaderFilterStrategy();
+        headerFilterStrategy = new JmsHeaderFilterStrategy(false);
         jmsKeyFormatStrategy = new DefaultJmsKeyFormatStrategy();
     }
 
@@ -86,7 +86,7 @@ public class JmsBinding {
         if (endpoint.getHeaderFilterStrategy() != null) {
             headerFilterStrategy = endpoint.getHeaderFilterStrategy();
         } else {
-            headerFilterStrategy = new JmsHeaderFilterStrategy();
+            headerFilterStrategy = new 
JmsHeaderFilterStrategy(endpoint.isIncludeAllJMSXProperties());
         }
         if (endpoint.getJmsKeyFormatStrategy() != null) {
             jmsKeyFormatStrategy = endpoint.getJmsKeyFormatStrategy();

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
index b31d504..2576946 100644
--- 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
+++ 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
@@ -53,7 +53,7 @@ public class JmsComponent extends UriEndpointComponent 
implements ApplicationCon
     private JmsConfiguration configuration;
     private ApplicationContext applicationContext;
     private QueueBrowseStrategy queueBrowseStrategy;
-    private HeaderFilterStrategy headerFilterStrategy = new 
JmsHeaderFilterStrategy();
+    private HeaderFilterStrategy headerFilterStrategy;
     private ExecutorService asyncStartStopExecutorService;
     private MessageListenerContainerFactory messageListenerContainerFactory;
 
@@ -382,7 +382,11 @@ public class JmsComponent extends UriEndpointComponent 
implements ApplicationCon
     public void setIncludeSentJMSMessageID(boolean includeSentJMSMessageID) {
         getConfiguration().setIncludeSentJMSMessageID(includeSentJMSMessageID);
     }
-    
+
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        
getConfiguration().setIncludeAllJMSXProperties(includeAllJMSXProperties);
+    }
+
     public void setDefaultTaskExecutorType(DefaultTaskExecutorType type) {
         getConfiguration().setDefaultTaskExecutorType(type);
     }
@@ -427,6 +431,14 @@ public class JmsComponent extends UriEndpointComponent 
implements ApplicationCon
     // Implementation methods
     // 
-------------------------------------------------------------------------
 
+
+    @Override
+    protected void doStart() throws Exception {
+        if (headerFilterStrategy == null) {
+            headerFilterStrategy = new 
JmsHeaderFilterStrategy(getConfiguration().isIncludeAllJMSXProperties());
+        }
+    }
+
     @Override
     protected void doShutdown() throws Exception {
         if (asyncStartStopExecutorService != null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
index ae22f94..1ae25fa 100644
--- 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
+++ 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
@@ -191,6 +191,8 @@ public class JmsConfiguration implements Cloneable {
     @UriParam
     private boolean includeSentJMSMessageID;
     private DefaultTaskExecutorType defaultTaskExecutorType;
+    @UriParam
+    private boolean includeAllJMSXProperties;
 
     public JmsConfiguration() {
     }
@@ -1379,4 +1381,18 @@ public class JmsConfiguration implements Cloneable {
     public void setDefaultTaskExecutorType(DefaultTaskExecutorType 
defaultTaskExecutorType) {
         this.defaultTaskExecutorType = defaultTaskExecutorType;
     }
+
+    public boolean isIncludeAllJMSXProperties() {
+        return includeAllJMSXProperties;
+    }
+
+    /**
+     * Whether to include all <tt>JMSX</tt> properties as Camel headers when 
binding from JMS to Camel Message.
+     * <p/>
+     * By default a number of properties is excluded accordingly to the table 
of JMS properties in the JMS 1.1 spec,
+     * on page 39.
+     */
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        this.includeAllJMSXProperties = includeAllJMSXProperties;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
index d941af7..0b1741a 100644
--- 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
+++ 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
@@ -313,7 +313,7 @@ public class JmsEndpoint extends DefaultEndpoint implements 
HeaderFilterStrategy
 
     public HeaderFilterStrategy getHeaderFilterStrategy() {
         if (headerFilterStrategy == null) {
-            headerFilterStrategy = new JmsHeaderFilterStrategy();
+            headerFilterStrategy = new 
JmsHeaderFilterStrategy(isIncludeAllJMSXProperties());
         }
         return headerFilterStrategy;
     }
@@ -1083,6 +1083,16 @@ public class JmsEndpoint extends DefaultEndpoint 
implements HeaderFilterStrategy
     }
 
     @ManagedAttribute
+    public boolean isIncludeAllJMSXProperties() {
+        return configuration.isIncludeAllJMSXProperties();
+    }
+
+    @ManagedAttribute
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        configuration.setIncludeAllJMSXProperties(includeAllJMSXProperties);
+    }
+
+    @ManagedAttribute
     public DefaultTaskExecutorType getDefaultTaskExecutorType() {
         return configuration.getDefaultTaskExecutorType();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
index 9f65159..12c7f04 100644
--- 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
+++ 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
@@ -24,7 +24,13 @@ import org.apache.camel.impl.DefaultHeaderFilterStrategy;
 public class JmsHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
 
     public JmsHeaderFilterStrategy() {
-        initialize();
+        this(false);
+    }
+
+    public JmsHeaderFilterStrategy(boolean includeAllJMSXProperties) {
+        if (!includeAllJMSXProperties) {
+            initialize();
+        }
     }
 
     protected void initialize() {

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
index 8ab24fe..fa7dc4f 100644
--- 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
@@ -59,6 +59,7 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
                 exchange.getIn().setHeader("org.apache.camel.test.jms", 20000);
                 exchange.getIn().setHeader("testheader", 1020);
                 exchange.getIn().setHeader("anotherheader", 1030);
+                exchange.getIn().setHeader("JMSXAppID", "myApp");
             }
 
         });
@@ -75,13 +76,15 @@ public class JmsHeaderFilteringTest extends 
CamelTestSupport {
         ConnectionFactory connectionFactory = 
CamelJmsTestHelper.createConnectionFactory();
         camelContext.addComponent(componentName, 
jmsComponentAutoAcknowledge(connectionFactory));
 
-        // add "testheader" to in filter set
         JmsComponent component = camelContext.getComponent(componentName, 
JmsComponent.class);
-        
((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).getInFilter().add("testheader");
-        // add "anotherheader" to out filter set
-        
((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).getOutFilter().add("anotherheader");
+
+        JmsHeaderFilterStrategy filter = new JmsHeaderFilterStrategy();
+        filter.getInFilter().add("testheader");
+        filter.getOutFilter().add("anotherheader");
         // add a regular expression pattern filter, notice that dots are 
encoded to '_DOT_' in jms headers
-        
((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).setInFilterPattern(IN_FILTER_PATTERN);
+        filter.setInFilterPattern(IN_FILTER_PATTERN);
+
+        component.setHeaderFilterStrategy(filter);
 
         return camelContext;
     }
@@ -116,6 +119,9 @@ public class JmsHeaderFilteringTest extends 
CamelTestSupport {
             // like testheader, org.apache.camel.test.jms will be filtered by 
the "in" filter
             assertEquals(20000, 
message.getJmsMessage().getObjectProperty("org_DOT_apache_DOT_camel_DOT_test_DOT_jms"));
 
+            // should be filtered by default
+            assertNull(message.getJmsMessage().getStringProperty("JMSXAppID"));
+
             latch.countDown();
         }
 
@@ -137,6 +143,9 @@ public class JmsHeaderFilteringTest extends 
CamelTestSupport {
             // filtered out by "in" filter
             
assertNull(exchange.getIn().getHeader("org_DOT_apache_DOT_camel_DOT_test_DOT_jms"));
 
+            // should be filtered by default
+            assertNull(exchange.getIn().getHeader("JMSXAppID"));
+
             latch.countDown();
         }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
new file mode 100644
index 0000000..bd11175
--- /dev/null
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jms;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.jms.ConnectionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import static 
org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+
+/**
+ *
+ * @version 
+ */
+public class JmsIncludeAllJMSXPropertiesTest extends CamelTestSupport {
+
+    @Test
+    public void testIncludeAll() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "bar");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXUserID", 
"Donald");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXAppID", 
"MyApp");
+
+        Map headers = new HashMap();
+        headers.put("foo", "bar");
+        headers.put("JMSXUserID", "Donald");
+        headers.put("JMSXAppID", "MyApp");
+
+        template.sendBodyAndHeaders("activemq:queue:in", "Hello World", 
headers);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        ConnectionFactory connectionFactory = 
CamelJmsTestHelper.createConnectionFactory();
+        JmsComponent jms = jmsComponentAutoAcknowledge(connectionFactory);
+        jms.setIncludeAllJMSXProperties(true);
+        camelContext.addComponent("activemq", jms);
+        return camelContext;
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("activemq:queue:in")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
new file mode 100644
index 0000000..4bb8695
--- /dev/null
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jms;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.jms.ConnectionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import static 
org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+
+/**
+ *
+ * @version 
+ */
+public class JmsNotIncludeAllJMSXPropertiesTest extends CamelTestSupport {
+
+    @Test
+    public void testNotIncludeAll() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "bar");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXUserID", 
null);
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXAppID", 
null);
+
+        Map headers = new HashMap();
+        headers.put("foo", "bar");
+        headers.put("JMSXUserID", "Donald");
+        headers.put("JMSXAppID", "MyApp");
+
+        template.sendBodyAndHeaders("activemq:queue:in", "Hello World", 
headers);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        ConnectionFactory connectionFactory = 
CamelJmsTestHelper.createConnectionFactory();
+        JmsComponent jms = jmsComponentAutoAcknowledge(connectionFactory);
+        jms.setIncludeAllJMSXProperties(false);
+        camelContext.addComponent("activemq", jms);
+        return camelContext;
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("activemq:queue:in")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}

Reply via email to