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 2009/03/20 15:20:27 UTC

svn commit: r756479 - in /camel/trunk/components/camel-jms/src: main/java/org/apache/camel/component/jms/ test/java/org/apache/camel/component/jms/

Author: davsclaus
Date: Fri Mar 20 14:20:27 2009
New Revision: 756479

URL: http://svn.apache.org/viewvc?rev=756479&view=rev
Log:
CAMEL-1212: Introduced JmsKeyFormatStrategy for pluggable encoder/decoder for JMS keys.

Added:
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsKeyFormatStrategy.java   (with props)
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsKeyFormatStrategy.java   (with props)
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategy.java   (with props)
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/DefaultJmsHeaderKeyFormatStrategyTest.java   (with props)
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithCustomKeyFormatStrategyTest.java   (with props)
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java   (with props)
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithPassThroughKeyFormatStrategyTest.java   (with props)
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategyTest.java   (with props)
Modified:
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java

Added: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsKeyFormatStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsKeyFormatStrategy.java?rev=756479&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsKeyFormatStrategy.java (added)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsKeyFormatStrategy.java Fri Mar 20 14:20:27 2009
@@ -0,0 +1,40 @@
+/**
+ * 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;
+
+/**
+ * Default strategy that handles dots and hyphens.
+ * <p/>
+ * This can be used for sending keys containg package names that is common by Java frameworks.
+ *
+ * @version $Revision$
+ */
+public class DefaultJmsKeyFormatStrategy implements JmsKeyFormatStrategy {
+
+    public String encodeKey(String key) {
+        String answer = key.replace(".", "_");
+        answer = answer.replaceAll("-", "_HYPHEN_");
+        return answer;
+    }
+
+    public String decodeKey(String key) {
+        String answer = key.replaceAll("_HYPHEN_", "-");
+        answer = answer.replace("_", ".");
+        return answer;
+    }
+
+}

Propchange: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsKeyFormatStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsKeyFormatStrategy.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java?rev=756479&r1=756478&r2=756479&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java Fri Mar 20 14:20:27 2009
@@ -144,7 +144,7 @@
 
                     // must decode back from safe JMS header name to original header name
                     // when storing on this Camel JmsMessage object.
-                    String key = JmsBinding.decodeFromSafeJmsHeaderName(name);
+                    String key = endpoint.getJmsKeyFormatStrategy().decodeKey(name);
                     map.put(key, value);
                 } catch (JMSException e) {
                     throw new RuntimeCamelException(name, e);
@@ -224,28 +224,25 @@
                                   String headerName, Object headerValue) throws JMSException {
         if (headerName.startsWith("JMS") && !headerName.startsWith("JMSX")) {
             if (headerName.equals("JMSCorrelationID")) {
-                jmsMessage.setJMSCorrelationID(ExchangeHelper.convertToType(exchange, String.class,
-                    headerValue));
+                jmsMessage.setJMSCorrelationID(ExchangeHelper.convertToType(exchange, String.class, headerValue));
             } else if (headerName.equals("JMSReplyTo") && headerValue != null) {
-                jmsMessage.setJMSReplyTo(ExchangeHelper.convertToType(exchange, Destination.class,
-                    headerValue));
+                jmsMessage.setJMSReplyTo(ExchangeHelper.convertToType(exchange, Destination.class, headerValue));
             } else if (headerName.equals("JMSType")) {
                 jmsMessage.setJMSType(ExchangeHelper.convertToType(exchange, String.class, headerValue));
             } else if (LOG.isDebugEnabled()) {
-                // The following properties are set by the MessageProducer
-                // JMSDeliveryMode, JMSDestination, JMSExpiration,
-                // JMSPriority,
-                // The following are set on the underlying JMS provider
+                // The following properties are set by the MessageProducer:
+                // JMSDeliveryMode, JMSDestination, JMSExpiration, JMSPriorit
+                // The following are set on the underlying JMS provider:
                 // JMSMessageID, JMSTimestamp, JMSRedelivered
                 LOG.debug("Ignoring JMS header: " + headerName + " with value: " + headerValue);
             }
         } else if (shouldOutputHeader(in, headerName, headerValue)) {
-            // must encode to safe JMS header name before setting property on jmsMessage
-            String key = encodeToSafeJmsHeaderName(headerName);
             // only primitive headers and strings is allowed as properties
             // see message properties: http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Message.html
             Object value = getValidJMSHeaderValue(headerName, headerValue);
             if (value != null) {
+                // must encode to safe JMS header name before setting property on jmsMessage
+                String key = endpoint.getJmsKeyFormatStrategy().encodeKey(headerName);
                 jmsMessage.setObjectProperty(key, value);
             } else if (LOG.isDebugEnabled()) {
                 // okay the value is not a primitive or string so we cannot sent it over the wire
@@ -398,29 +395,4 @@
             || !headerFilterStrategy.applyFilterToCamelHeaders(headerName, headerValue);
     }
 
-    /**
-     * Encoder to encode JMS header keys that is that can be sent over the JMS transport.
-     * <p/>
-     * For example: Sending dots is the key is not allowed. Especially the Bean component has
-     * this problem if you want to provide the method name to invoke on the bean.
-     * <p/>
-     * <b>Note</b>: Currently this encoder is simple as it only supports encoding dots to underscores.
-     *
-     * @param headerName the header name
-     * @return the key to use instead for storing properties and to be for lookup of the same property
-     */
-    public static String encodeToSafeJmsHeaderName(String headerName) {
-        return headerName.replace(".", "_");
-    }
-
-    /**
-     * Decode operation for the {@link #encodeToSafeJmsHeaderName(String)}.
-     *
-     * @param headerName the header name
-     * @return the original key
-     */
-    public static String decodeFromSafeJmsHeaderName(String headerName) {
-        return headerName.replace("_", ".");
-    }
-
 }

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java?rev=756479&r1=756478&r2=756479&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java Fri Mar 20 14:20:27 2009
@@ -423,8 +423,26 @@
                 throw new IllegalArgumentException("The JmsComponent's username or password is null");
             }
         }
-        setProperties(endpoint.getConfiguration(), parameters);
 
+        // jms header strategy
+        String strategy = getAndRemoveParameter(parameters, "jmsKeyFormatStrategy", String.class);
+        if (strategy != null) {
+            if (isReferenceParameter(strategy)) {
+                String key = strategy.substring(1);
+                endpoint.setJmsKeyFormatStrategy(lookup(key, JmsKeyFormatStrategy.class));
+            } else {
+                // should be on of the default ones we support
+                if ("default".equalsIgnoreCase(strategy)) {
+                    endpoint.setJmsKeyFormatStrategy(new DefaultJmsKeyFormatStrategy());
+                } else if ("passthrough".equalsIgnoreCase(strategy)) {
+                    endpoint.setJmsKeyFormatStrategy(new PassThroughJmsKeyFormatStrategy());
+                } else {
+                    throw new IllegalArgumentException("Unknown jmsKeyFormatStrategy option: " + strategy);
+                }
+            }
+        }
+
+        setProperties(endpoint.getConfiguration(), parameters);
         endpoint.setHeaderFilterStrategy(getHeaderFilterStrategy());
 
         return endpoint;

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java?rev=756479&r1=756478&r2=756479&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java Fri Mar 20 14:20:27 2009
@@ -132,6 +132,7 @@
     private String replyToDestination;
     private String replyToDestinationSelectorName;
     private JmsMessageType jmsMessageType;
+    private JmsKeyFormatStrategy jmsKeyFormatStrategy;
 
     public JmsConfiguration() {
     }
@@ -1153,4 +1154,15 @@
     public void setJmsMessageType(JmsMessageType jmsMessageType) {
         this.jmsMessageType = jmsMessageType;
     }
+
+    public JmsKeyFormatStrategy getJmsKeyFormatStrategy() {
+        if (jmsKeyFormatStrategy == null) {
+            jmsKeyFormatStrategy = new DefaultJmsKeyFormatStrategy();
+        }
+        return jmsKeyFormatStrategy;
+    }
+
+    public void setJmsKeyFormatStrategy(JmsKeyFormatStrategy jmsKeyFormatStrategy) {
+        this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
+    }
 }

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java?rev=756479&r1=756478&r2=756479&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java Fri Mar 20 14:20:27 2009
@@ -771,6 +771,14 @@
         getConfiguration().setJmsMessageType(jmsMessageType);
     }
 
+    public JmsKeyFormatStrategy getJmsKeyFormatStrategy() {
+        return getConfiguration().getJmsKeyFormatStrategy();
+    }
+
+    public void setJmsKeyFormatStrategy(JmsKeyFormatStrategy jmsHeaderStrategy) {
+        getConfiguration().setJmsKeyFormatStrategy(jmsHeaderStrategy);
+    }
+
     // Implementation methods
     //-------------------------------------------------------------------------
 

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java?rev=756479&r1=756478&r2=756479&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java Fri Mar 20 14:20:27 2009
@@ -41,9 +41,4 @@
         getOutFilter().add("JMSXState");
     }
 
-    @Override
-    protected boolean extendedFilter(Direction direction, String key, Object value) {
-        return Direction.OUT == direction
-            && !ObjectHelper.isJavaIdentifier(JmsBinding.encodeToSafeJmsHeaderName(key));
-    }
 }

Added: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsKeyFormatStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsKeyFormatStrategy.java?rev=756479&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsKeyFormatStrategy.java (added)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsKeyFormatStrategy.java Fri Mar 20 14:20:27 2009
@@ -0,0 +1,41 @@
+/**
+ * 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;
+
+/**
+ * Strategy for applying encoding and decoding of JMS headers so they apply to the JMS spec.
+ *
+ * @version $Revision$
+ */
+public interface JmsKeyFormatStrategy {
+
+    /**
+     * Encodes the key before its sent as a {@link javax.jms.Message} message.
+     *
+     * @param key  the original key
+     * @return the encoded key
+     */
+    String encodeKey(String key);
+
+    /**
+     * Decodes the key after its received from a {@link javax.jms.Message} message.
+     *
+     * @param key the encoded key
+     * @return the decoded key as the original key
+     */
+    String decodeKey(String key);
+}

Propchange: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsKeyFormatStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsKeyFormatStrategy.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategy.java?rev=756479&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategy.java (added)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategy.java Fri Mar 20 14:20:27 2009
@@ -0,0 +1,33 @@
+/**
+ * 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;
+
+/**
+ * A strategy that does not do any encoding or decoding, eg. the keys is passed throught as is.
+ *
+ * @version $Revision$
+ */
+public class PassThroughJmsKeyFormatStrategy implements JmsKeyFormatStrategy {
+
+    public String encodeKey(String key) {
+        return key;
+    }
+
+    public String decodeKey(String key) {
+        return key;
+    }
+}

Propchange: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategy.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/DefaultJmsHeaderKeyFormatStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/DefaultJmsHeaderKeyFormatStrategyTest.java?rev=756479&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/DefaultJmsHeaderKeyFormatStrategyTest.java (added)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/DefaultJmsHeaderKeyFormatStrategyTest.java Fri Mar 20 14:20:27 2009
@@ -0,0 +1,45 @@
+/**
+ * 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 junit.framework.TestCase;
+
+/**
+ * @version $Revision$
+ */
+public class DefaultJmsHeaderKeyFormatStrategyTest extends TestCase {
+
+    private JmsKeyFormatStrategy strategy = new DefaultJmsKeyFormatStrategy();
+
+    public void testEncodeValidKeys() {
+        assertEquals("foo", strategy.encodeKey("foo"));
+        assertEquals("foo123bar", strategy.encodeKey("foo123bar"));
+        assertEquals("CamelFileName", strategy.encodeKey("CamelFileName"));
+        assertEquals("org_apache_camel_MyBean", strategy.encodeKey("org.apache.camel.MyBean"));
+        assertEquals("Content_HYPHEN_Type", strategy.encodeKey("Content-Type"));
+        assertEquals("My_HYPHEN_Header_You", strategy.encodeKey("My-Header.You"));
+    }
+
+    public void testDeccodeValidKeys() {
+        assertEquals("foo", strategy.decodeKey("foo"));
+        assertEquals("foo123bar", strategy.decodeKey("foo123bar"));
+        assertEquals("CamelFileName", strategy.decodeKey("CamelFileName"));
+        assertEquals("Content-Type", strategy.decodeKey("Content_HYPHEN_Type"));
+        assertEquals("My-Header.You", strategy.decodeKey("My_HYPHEN_Header_You"));
+    }
+
+}

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/DefaultJmsHeaderKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/DefaultJmsHeaderKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithCustomKeyFormatStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithCustomKeyFormatStrategyTest.java?rev=756479&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithCustomKeyFormatStrategyTest.java (added)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithCustomKeyFormatStrategyTest.java Fri Mar 20 14:20:27 2009
@@ -0,0 +1,63 @@
+/**
+ * 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 org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * With the passthrough option
+ *
+ * @version $Revision$
+ */
+public class JmsRouteWithCustomKeyFormatStrategyTest extends JmsRouteWithDefaultKeyFormatStrategyTest {
+
+    protected String getUri() {
+        return "activemq:queue:foo?jmsKeyFormatStrategy=#myJmsKeyStrategy";
+    }
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("myJmsKeyStrategy", new MyCustomKeyFormatStrategy());
+        return jndi;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to(getUri());
+
+                from(getUri()).to("mock:result");
+            }
+        };
+    }
+
+    private class MyCustomKeyFormatStrategy implements JmsKeyFormatStrategy {
+
+        public String encodeKey(String key) {
+            return "FOO" + key + "BAR";
+        }
+
+        public String decodeKey(String key) {
+            return ObjectHelper.between(key, "FOO", "BAR");
+        }
+    }
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithCustomKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithCustomKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java?rev=756479&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java (added)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java Fri Mar 20 14:20:27 2009
@@ -0,0 +1,105 @@
+/**
+ * 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.activemq.ActiveMQConnectionFactory;
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ResolveEndpointFailedException;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge;
+
+/**
+ * @version $Revision$
+ */
+public class JmsRouteWithDefaultKeyFormatStrategyTest extends ContextTestSupport {
+
+    protected String getUri() {
+        return "activemq:queue:foo?jmsKeyFormatStrategy=default";
+    }
+
+    public void testIllegalOption() throws Exception {
+        try {
+            context.getEndpoint("activemq:queue:bar?jmsHeaderStrategy=xxx");
+            fail("Should have thrown a ResolveEndpointFailedException");
+        } catch (ResolveEndpointFailedException e) {
+            // expected
+        }
+    }
+
+    public void testNoHeader() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("Hello World");
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testWithPlainHeader() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("Hello World");
+        mock.expectedHeaderReceived("foo", "cheese");
+
+        template.sendBodyAndHeader("direct:start", "Hello World", "foo", "cheese");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testWithMixedHeader() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("Hello World");
+        mock.expectedHeaderReceived("foo", "cheese");
+        mock.expectedHeaderReceived("Content-Type", "text/plain");
+        mock.expectedHeaderReceived("org.apache.camel.MyKey", "foo");
+
+        Map headers = new HashMap();
+        headers.put("foo", "cheese");
+        headers.put("Content-Type", "text/plain");
+        headers.put("org.apache.camel.MyKey", "foo");
+
+        template.sendBodyAndHeaders("direct:start", "Hello World", headers);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+
+        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
+        camelContext.addComponent("activemq", jmsComponentClientAcknowledge(connectionFactory));
+
+        return camelContext;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to(getUri());
+
+                from(getUri()).to("mock:result");
+            }
+        };
+    }
+}

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithPassThroughKeyFormatStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithPassThroughKeyFormatStrategyTest.java?rev=756479&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithPassThroughKeyFormatStrategyTest.java (added)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithPassThroughKeyFormatStrategyTest.java Fri Mar 20 14:20:27 2009
@@ -0,0 +1,30 @@
+/**
+ * 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;
+
+/**
+ * With the passthrough option
+ *
+ * @version $Revision$
+ */
+public class JmsRouteWithPassThroughKeyFormatStrategyTest extends JmsRouteWithDefaultKeyFormatStrategyTest {
+
+    @Override
+    protected String getUri() {
+        return "activemq:queue:foo?jmsKeyFormatStrategy=passthrough";
+    }
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithPassThroughKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithPassThroughKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategyTest.java?rev=756479&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategyTest.java (added)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategyTest.java Fri Mar 20 14:20:27 2009
@@ -0,0 +1,45 @@
+/**
+ * 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 junit.framework.TestCase;
+
+/**
+ * @version $Revision$
+ */
+public class PassThroughJmsKeyFormatStrategyTest extends TestCase {
+
+    private JmsKeyFormatStrategy strategy = new PassThroughJmsKeyFormatStrategy();
+
+    public void testEncodeValidKeys() {
+        assertEquals("foo", strategy.encodeKey("foo"));
+        assertEquals("foo123bar", strategy.encodeKey("foo123bar"));
+        assertEquals("CamelFileName", strategy.encodeKey("CamelFileName"));
+        assertEquals("org.apache.camel.MyBean", strategy.encodeKey("org.apache.camel.MyBean"));
+        assertEquals("Content-Type", strategy.encodeKey("Content-Type"));
+        assertEquals("My-Header.You", strategy.encodeKey("My-Header.You"));
+    }
+
+    public void testDeccodeValidKeys() {
+        assertEquals("foo", strategy.decodeKey("foo"));
+        assertEquals("foo123bar", strategy.decodeKey("foo123bar"));
+        assertEquals("CamelFileName", strategy.decodeKey("CamelFileName"));
+        assertEquals("Content-Type", strategy.decodeKey("Content-Type"));
+        assertEquals("My-Header.You", strategy.decodeKey("My-Header.You"));
+    }
+
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/PassThroughJmsKeyFormatStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date