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 11:17:08 UTC

svn commit: r521186 - in /activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms: DefaultJmsExchange.java DefaultJmsMessage.java JmsEndpoint.java JmsExchange.java JmsMessage.java

Author: jstrachan
Date: Thu Mar 22 03:16:55 2007
New Revision: 521186

URL: http://svn.apache.org/viewvc?view=rev&rev=521186
Log:
tidied up the JMS component to avoid unnecessary interfaces

Removed:
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsExchange.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsMessage.java
Modified:
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java

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=521186&r1=521185&r2=521186
==============================================================================
--- 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 03:16:55 2007
@@ -31,7 +31,7 @@
 import javax.jms.Session;
 
 /**
- * @version $Revision$
+ * @version $Revision:520964 $
  */
 public class JmsEndpoint extends DefaultEndpoint<JmsExchange> implements MessageListener {
     private static final Log log = LogFactory.getLog(JmsEndpoint.class);
@@ -80,12 +80,12 @@
     }
 
     public JmsExchange createExchange() {
-        return new DefaultJmsExchange(getContext());
+        return new JmsExchange(getContext());
     }
 
 
     public JmsExchange createExchange(Message message) {
-        return new DefaultJmsExchange(getContext(), message);
+        return new JmsExchange(getContext(), message);
     }
 
 

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java?view=diff&rev=521186&r1=521185&r2=521186
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java Thu Mar 22 03:16:55 2007
@@ -16,20 +16,67 @@
  */
 package org.apache.camel.component.jms;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultExchange;
 
-import javax.jms.Session;
-import javax.jms.Message;
 import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Session;
 
 /**
- * @version $Revision$
+ * Represents an {@ilnk Exchange} for working with JMS
+ * 
+ * @version $Revision:520964 $
  */
-public interface JmsExchange extends Exchange {
+public class JmsExchange extends DefaultExchange {
+
+    public JmsExchange(CamelContext container) {
+        super(container);
+    }
+
+    public JmsExchange(CamelContext container, Message message) {
+        super(container);
+        setIn(new JmsMessage(message));
+    }
+
+    @Override
+    public Exchange newInstance() {
+        return new JmsExchange(getContext());
+    }
+
+    public Message createMessage(Session session) throws JMSException {
+        Message request = getInMessage();
+        if (request == null) {
+            request = session.createMessage();
+
+            /** TODO
+            if (lazyHeaders != null) {
+                // lets add any lazy headers
+                for (Map.Entry<String, Object> entry : lazyHeaders.entrySet()) {
+                    request.setObjectProperty(entry.getKey(), entry.getValue());
+                }
+            }
+             */
+        }
+        return request;
+    }
+
+    public Message getInMessage() {
+        JmsMessage jmsMessage = (JmsMessage) getIn();
+        if (jmsMessage != null) {
+            return jmsMessage.getJmsMessage();
+        }
+        return null;
+    }
+
+    @Override
+    protected org.apache.camel.Message createInMessage() {
+        return new JmsMessage();
+    }
 
-    /**
-     * Creates the JMS message for this exchange so that it can be sent to
-     * a JMS endpoint.
-     */
-    Message createMessage(Session session) throws JMSException;
+    @Override
+    protected org.apache.camel.Message createOutMessage() {
+        return new JmsMessage();
+    }
 }

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java?view=diff&rev=521186&r1=521185&r2=521186
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java Thu Mar 22 03:16:55 2007
@@ -17,17 +17,103 @@
  */
 package org.apache.camel.component.jms;
 
-import org.apache.camel.Message;
+import org.apache.camel.InvalidHeaderTypeException;
+import org.apache.camel.impl.MessageSupport;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
- * @version $Revision$
+ * Represents a {@link org.apache.camel.Message} for working with JMS
+ * 
+ * @version $Revision:520964 $
  */
-public interface JmsMessage extends Message {
+public class JmsMessage extends MessageSupport {
+    private Message jmsMessage;
+    private Map<String, Object> lazyHeaders;
+
+    public JmsMessage() {
+    }
+
+    public JmsMessage(Message jmsMessage) {
+        this.jmsMessage = jmsMessage;
+    }
+
+    public Message getJmsMessage() {
+        return jmsMessage;
+    }
+
+    public void setJmsMessage(Message jmsMessage) {
+        this.jmsMessage = jmsMessage;
+    }
+
+    public Object getHeader(String name) {
+        if (jmsMessage != null) {
+            try {
+                Object value = jmsMessage.getObjectProperty(name);
+                try {
+                    return value;
+                }
+                catch (ClassCastException e) {
+                    throw new InvalidHeaderTypeException(e.getMessage(), value);
+                }
+            }
+            catch (JMSException e) {
+                throw new MessagePropertyAcessException(name, e);
+            }
+        }
+        return null;
+    }
+
+    public void setHeader(String name, Object value) {
+        if (jmsMessage != null) {
+            try {
+                jmsMessage.setObjectProperty(name, value);
+            }
+            catch (JMSException e) {
+                throw new MessagePropertyAcessException(name, e);
+            }
+        }
+        else {
+            if (lazyHeaders == null) {
+                lazyHeaders = new HashMap<String, Object>();
+            }
+            lazyHeaders.put(name, value);
+        }
+    }
 
-    /**
-     * Accesses the underlying JMS message
-     */
-    public javax.jms.Message getJmsMessage();
+    public Map<String, Object> getHeaders() {
+        if (jmsMessage != null) {
+            Map<String, Object> answer = new HashMap<String, Object>();
+            Enumeration names;
+            try {
+                names = jmsMessage.getPropertyNames();
+            }
+            catch (JMSException e) {
+                throw new MessagePropertyNamesAcessException(e);
+            }
+            while (names.hasMoreElements()) {
+                String name = names.nextElement().toString();
+                try {
+                    Object value = jmsMessage.getObjectProperty(name);
+                    answer.put(name, value);
+                }
+                catch (JMSException e) {
+                    throw new MessagePropertyAcessException(name, e);
+                }
+            }
+            return answer;
+        }
+        else {
+            return lazyHeaders;
+        }
+    }
 
-    void setJmsMessage(javax.jms.Message jmsMessage);
+    @Override
+    public JmsMessage newInstance() {
+        return new JmsMessage();
+    }
 }