Author: jstrachan
Date: Fri May  2 09:54:04 2008
New Revision: 652815

URL: http://svn.apache.org/viewvc?rev=652815&view=rev
Log:
added patch which causes SetHeaderTest to fail in activemq-core

Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
    
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
    
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java?rev=652815&r1=652814&r2=652815&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
 Fri May  2 09:54:04 2008
@@ -174,4 +174,11 @@
     public void setAttachments(Map<String, DataHandler> attachments) {
         this.attachments = attachments;
     }
+
+    /**
+     * Returns true if the headers have been mutated in some way
+     */
+    protected boolean hasPopulatedHeaders() {
+        return headers != null;
+    }
 }

Modified: 
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java?rev=652815&r1=652814&r2=652815&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
 (original)
+++ 
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
 Fri May  2 09:54:04 2008
@@ -128,7 +128,9 @@
         boolean alwaysCopy = (endpoint != null) ? 
endpoint.getConfiguration().isAlwaysCopyMessage() : false;
         if (!alwaysCopy && camelMessage instanceof JmsMessage) {
             JmsMessage jmsMessage = (JmsMessage)camelMessage;
-            answer = jmsMessage.getJmsMessage();
+            if (! jmsMessage.shouldCreateNewMessage()) {
+                answer = jmsMessage.getJmsMessage();
+            }
         }
         if (answer == null) {
             answer = createJmsMessage(camelMessage.getBody(), session, 
exchange.getContext());
@@ -154,29 +156,33 @@
             String headerName = entry.getKey();
             Object headerValue = entry.getValue();
 
-            if (headerName.startsWith("JMS") && 
!headerName.startsWith("JMSX")) {
-                if (headerName.equals("JMSCorrelationID")) {
-                    
jmsMessage.setJMSCorrelationID(ExchangeHelper.convertToType(exchange, 
String.class,
-                                                                               
 headerValue));
-                } else if (headerName.equals("JMSCorrelationID")) {
-                    
jmsMessage.setJMSCorrelationID(ExchangeHelper.convertToType(exchange, 
String.class,
-                                                                               
 headerValue));
-                } else if (headerName.equals("JMSReplyTo")) {
-                    
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
-                    // JMSMessageID, JMSTimestamp, JMSRedelivered
-                    LOG.debug("Ignoring JMS header: " + headerName + " with 
value: " + headerValue);
-                }
-            } else if (shouldOutputHeader(in, headerName, headerValue)) {
-                jmsMessage.setObjectProperty(headerName, headerValue);
+            appendJmsProperty(jmsMessage, exchange, in, headerName, 
headerValue);
+        }
+    }
+
+    public void appendJmsProperty(Message jmsMessage, Exchange exchange, 
org.apache.camel.Message in, 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));
+            } else if (headerName.equals("JMSCorrelationID")) {
+                
jmsMessage.setJMSCorrelationID(ExchangeHelper.convertToType(exchange, 
String.class,
+                                                                            
headerValue));
+            } else if (headerName.equals("JMSReplyTo")) {
+                
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
+                // JMSMessageID, JMSTimestamp, JMSRedelivered
+                LOG.debug("Ignoring JMS header: " + headerName + " with value: 
" + headerValue);
             }
+        } else if (shouldOutputHeader(in, headerName, headerValue)) {
+            jmsMessage.setObjectProperty(headerName, headerValue);
         }
     }
 

Modified: 
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java?rev=652815&r1=652814&r2=652815&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java
 (original)
+++ 
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java
 Fri May  2 09:54:04 2008
@@ -133,6 +133,13 @@
         return new JmsMessage();
     }
 
+    /**
+     * Returns true if a new JMS message instance should be created to send to 
the next component
+     */
+    public boolean shouldCreateNewMessage() {
+        return super.hasPopulatedHeaders();
+    }
+
     @Override
     protected Object createBody() {
         if (jmsMessage != null) {


Reply via email to