You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/03/22 13:40:48 UTC

svn commit: r521240 - in /activemq/camel/trunk/camel-jms/src: main/java/org/apache/camel/component/jms/JmsBinding.java main/java/org/apache/camel/component/jms/JmsEndpoint.java test/java/org/apache/camel/component/jms/JmsRouteTest.java

Author: jstrachan
Date: Thu Mar 22 05:40:46 2007
New Revision: 521240

URL: http://svn.apache.org/viewvc?view=rev&rev=521240
Log:
handle headers nicely in the binding and tidied up the test cases to test for them

Modified:
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
    activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java?view=diff&rev=521240&r1=521239&r2=521240
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java Thu Mar 22 05:40:46 2007
@@ -29,6 +29,7 @@
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * A Strategy used to convert between a Camel {@JmsExchange} and {@JmsMessage} to and from a
@@ -38,26 +39,6 @@
  */
 public class JmsBinding {
     /**
-     * Creates a JMS message from the Camel exchange and message
-     *
-     * @param session the JMS session used to create the message
-     * @return a newly created JMS Message instance containing the
-     * @throws JMSException if the message could not be created
-     */
-    public Message createJmsMessage(JmsExchange exchange, JmsMessage message, Session session) throws JMSException {
-        Object value = message.getBody();
-        if (value instanceof String) {
-            return session.createTextMessage((String) value);
-        }
-        else if (value instanceof Serializable) {
-            return session.createObjectMessage((Serializable) value);
-        }
-        else {
-            return session.createMessage();
-        }
-    }
-
-    /**
      * Extracts the body from the JMS message
      *
      * @param exchange
@@ -90,6 +71,46 @@
     }
 
     /**
+     * Creates a JMS message from the Camel exchange and message
+     *
+     * @param session the JMS session used to create the message
+     * @return a newly created JMS Message instance containing the
+     * @throws JMSException if the message could not be created
+     */
+    public Message makeJmsMessage(JmsMessage message, Session session) throws JMSException {
+        Message answer = createJmsMessage(message, session);
+        appendJmsProperties(answer, message, session);
+        return answer;
+    }
+
+    /**
+     * Appends the JMS headers from the Camel {@link JmsMessage}
+     */
+    protected void appendJmsProperties(Message jmsMessage, JmsMessage camelMessage, Session session) throws JMSException {
+        Set<Map.Entry<String, Object>> entries = camelMessage.getHeaders().entrySet();
+        for (Map.Entry<String, Object> entry : entries) {
+            String headerName = entry.getKey();
+            Object headerValue = entry.getValue();
+            if (shouldOutputHeader(camelMessage, headerName, headerValue)) {
+                jmsMessage.setObjectProperty(headerName, headerValue);
+            }
+        }
+    }
+
+    protected Message createJmsMessage(JmsMessage message, Session session) throws JMSException {
+        Object value = message.getBody();
+        if (value instanceof String) {
+            return session.createTextMessage((String) value);
+        }
+        else if (value instanceof Serializable) {
+            return session.createObjectMessage((Serializable) value);
+        }
+        else {
+            return session.createMessage();
+        }
+    }
+
+    /**
      * Extracts a {@link Map} from a {@link MapMessage}
      */
     public Map<String, Object> createMapFromMapMessage(MapMessage message) throws JMSException {
@@ -101,5 +122,12 @@
             answer.put(name, value);
         }
         return answer;
+    }
+
+    /**
+     * Strategy to allow filtering of headers which are put on the JMS message
+     */
+    protected boolean shouldOutputHeader(JmsMessage camelMessage, String headerName, Object headerValue) {
+        return true;
     }
 }

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java?view=diff&rev=521240&r1=521239&r2=521240
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java Thu Mar 22 05:40:46 2007
@@ -65,7 +65,7 @@
     public void onExchange(final JmsExchange exchange) {
         template.send(destination, new MessageCreator() {
             public Message createMessage(Session session) throws JMSException {
-                Message message = getBinding().createJmsMessage(exchange, exchange.getIn(), session);
+                Message message = getBinding().makeJmsMessage(exchange.getIn(), session);
                 if (log.isDebugEnabled()) {
                     log.debug(JmsEndpoint.this + " sending JMS message: " + message);
                 }

Modified: activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java?view=diff&rev=521240&r1=521239&r2=521240
==============================================================================
--- activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java (original)
+++ activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java Thu Mar 22 05:40:46 2007
@@ -30,8 +30,8 @@
 
 import javax.jms.ConnectionFactory;
 import javax.jms.Message;
-import javax.jms.ObjectMessage;
 import javax.jms.TextMessage;
+import javax.jms.ObjectMessage;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -47,55 +47,46 @@
 
     public void testJmsRouteWithTextMessage() throws Exception {
         String expectedBody = "Hello there!";
+        sendExchange(expectedBody);
 
-        // now lets fire in a message
-        JmsExchange exchange = endpoint.createExchange();
-        JmsMessage in = exchange.getIn();
-        in.setBody(expectedBody);
-        in.setHeader("cheese", 123);
-        endpoint.onExchange(exchange);
-
-        // lets wait on the message being received
-        boolean received = latch.await(5, TimeUnit.SECONDS);
-        assertTrue("Did not recieve the message!", received);
-
-        assertNotNull(receivedExchange);
-
-        Object body = receivedExchange.getIn().getBody();
-        log.debug("Received body: " + body);
+        Object body = assertReceivedValidExchange(TextMessage.class);
         assertEquals("body", expectedBody, body);
-
-        Message jmsMessage = receivedExchange.getIn().getJmsMessage();
-        assertTrue("Received a JMS TextMessage: " + jmsMessage, jmsMessage instanceof TextMessage);
-
-        log.debug("Received JMS message: " + jmsMessage);
     }
 
     public void testJmsRouteWithObjectMessage() throws Exception {
         PurchaseOrder expectedBody = new PurchaseOrder("Beer", 10);
 
+        sendExchange(expectedBody);
+
+        Object body = assertReceivedValidExchange(ObjectMessage.class);
+        assertEquals("body", expectedBody, body);
+    }
+
+    protected void sendExchange(Object expectedBody) {
         // now lets fire in a message
         JmsExchange exchange = endpoint.createExchange();
         JmsMessage in = exchange.getIn();
         in.setBody(expectedBody);
         in.setHeader("cheese", 123);
         endpoint.onExchange(exchange);
+    }
 
+    protected Object assertReceivedValidExchange(Class type) throws Exception {
         // lets wait on the message being received
         boolean received = latch.await(5, TimeUnit.SECONDS);
         assertTrue("Did not recieve the message!", received);
 
         assertNotNull(receivedExchange);
+        JmsMessage receivedMessage = receivedExchange.getIn();
 
-        Object body = receivedExchange.getIn().getBody();
+        assertEquals("cheese header", 123, receivedMessage.getHeader("cheese"));
+        Object body = receivedMessage.getBody();
         log.debug("Received body: " + body);
-
-        assertEquals("body", expectedBody, body);
-
-        Message jmsMessage = receivedExchange.getIn().getJmsMessage();
-        assertTrue("Received a JMS TextMessage: " + jmsMessage, jmsMessage instanceof ObjectMessage);
+        Message jmsMessage = receivedMessage.getJmsMessage();
+        assertTrue("Expected an instance of " + type.getName() + " but was " + jmsMessage, type.isInstance(jmsMessage));
 
         log.debug("Received JMS message: " + jmsMessage);
+        return body;
     }
 
     @Override