Author: davsclaus
Date: Fri Mar 25 20:26:48 2011
New Revision: 1085549

URL: http://svn.apache.org/viewvc?rev=1085549&view=rev
Log:
CAMEL-3805: Fixed JmsMessage not re-installing underlying javax.jms.Message if 
body was set to null.

Added:
    
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageBodySetNullTest.java
Modified:
    
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java
    
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateMessageTest.java
    
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java

Modified: 
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java?rev=1085549&r1=1085548&r2=1085549&view=diff
==============================================================================
--- 
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java
 (original)
+++ 
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java
 Fri Mar 25 20:26:48 2011
@@ -107,6 +107,17 @@ public class JmsMessage extends DefaultM
         this.jmsMessage = jmsMessage;
     }
 
+    @Override
+    public void setBody(Object body) {
+        super.setBody(body);
+        if (body == null) {
+            // preserver headers even if we set body to null
+            ensureInitialHeaders();
+            // remove underlying jmsMessage since we mutated body to null
+            jmsMessage = null;
+        }
+    }
+
     public Object getHeader(String name) {
         Object answer = null;
 

Added: 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageBodySetNullTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageBodySetNullTest.java?rev=1085549&view=auto
==============================================================================
--- 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageBodySetNullTest.java
 (added)
+++ 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageBodySetNullTest.java
 Fri Mar 25 20:26:48 2011
@@ -0,0 +1,151 @@
+/**
+ * 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 javax.jms.ConnectionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+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;
+
+/**
+ * Unit test setting null body
+ */
+public class JmsMessageBodySetNullTest extends CamelTestSupport {
+
+    @Test
+    public void testSetNullBodyUsingProcessor() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("jms:queue:foo")
+                    .to("mock:foo")
+                    .process(new Processor() {
+                        @Override
+                        public void process(Exchange exchange) throws 
Exception {
+                            exchange.getIn().setBody(null);
+                        }
+                    })
+                    .to("mock:bar");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:bar").expectedMessageCount(1);
+        getMockEndpoint("mock:bar").message(0).body().isNull();
+
+        template.sendBody("jms:queue:foo", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testSetNullBodyUsingProcessorPreserveHeaders() throws 
Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("jms:queue:foo")
+                    .to("mock:foo")
+                    .process(new Processor() {
+                        @Override
+                        public void process(Exchange exchange) throws 
Exception {
+                            exchange.getIn().setBody(null);
+                        }
+                    })
+                    .to("mock:bar");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:foo").expectedHeaderReceived("code", 123);
+        getMockEndpoint("mock:bar").expectedMessageCount(1);
+        getMockEndpoint("mock:bar").message(0).body().isNull();
+        getMockEndpoint("mock:bar").expectedHeaderReceived("code", 123);
+
+        template.sendBodyAndHeader("jms:queue:foo", "Hello World", "code", 
123);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testSetNullBodyUsingSetBody() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("jms:queue:foo")
+                    .to("mock:foo")
+                    .setBody(constant(null))
+                    .to("mock:bar");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:bar").expectedMessageCount(1);
+        getMockEndpoint("mock:bar").message(0).body().isNull();
+
+        template.sendBody("jms:queue:foo", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testSetNullBodyUsingSetBodyPreserveHeaders() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("jms:queue:foo")
+                    .to("mock:foo")
+                    .setBody(constant(null))
+                    .to("mock:bar");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:foo").expectedHeaderReceived("code", 123);
+        getMockEndpoint("mock:bar").expectedMessageCount(1);
+        getMockEndpoint("mock:bar").message(0).body().isNull();
+        getMockEndpoint("mock:bar").expectedHeaderReceived("code", 123);
+
+        template.sendBodyAndHeader("jms:queue:foo", "Hello World", "code", 
123);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+
+        ConnectionFactory connectionFactory = 
CamelJmsTestHelper.createConnectionFactory();
+        camelContext.addComponent("jms", 
jmsComponentAutoAcknowledge(connectionFactory));
+
+        return camelContext;
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+}
+

Modified: 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateMessageTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateMessageTest.java?rev=1085549&r1=1085548&r2=1085549&view=diff
==============================================================================
--- 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateMessageTest.java
 (original)
+++ 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateMessageTest.java
 Fri Mar 25 20:26:48 2011
@@ -36,7 +36,7 @@ public class JmsMutateMessageTest extend
 
     private String uri = "activemq:queue:hello";
 
-    public void testMuateMessage() throws Exception {
+    public void testMutateMessage() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(1);
         mock.message(0).body().isEqualTo("Hello World");

Modified: 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java?rev=1085549&r1=1085548&r2=1085549&view=diff
==============================================================================
--- 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java
 (original)
+++ 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java
 Fri Mar 25 20:26:48 2011
@@ -36,7 +36,7 @@ public class JmsMutateRemoveHeaderMessag
 
     private String uri = "activemq:queue:hello";
 
-    public void testMuateMessage() throws Exception {
+    public void testMutateMessage() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(1);
         mock.message(0).body().isEqualTo("Hello World");


Reply via email to