Author: ningjiang Date: Fri Aug 31 08:25:09 2012 New Revision: 1379354 URL: http://svn.apache.org/viewvc?rev=1379354&view=rev Log: CAMEL-5464 fix the issue that camel-jms consumer doesn't send back a reply in all cases
Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java?rev=1379354&r1=1379353&r2=1379354&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java Fri Aug 31 08:25:09 2012 @@ -193,8 +193,13 @@ public class EndpointMessageListener imp } } else { // process OK so get the reply body if we are InOut and has a body - if (sendReply && exchange.getPattern().isOutCapable() && exchange.hasOut()) { - body = exchange.getOut(); + // If the ppl don't want to send the message back, he should use the InOnly + if (sendReply && exchange.getPattern().isOutCapable()) { + if (exchange.hasOut()) { + body = exchange.getOut(); + } else { + body = exchange.getIn(); + } cause = null; } } Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java?rev=1379354&view=auto ============================================================================== --- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java (added) +++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java Fri Aug 31 08:25:09 2012 @@ -0,0 +1,61 @@ +/** + * 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.CamelContext; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +import javax.jms.ConnectionFactory; + +import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge; + +/** + * + */ +public class JmsInOutWithNoOutBodyTest extends CamelTestSupport { + + @Test + public void testWithNoOutBodySet() throws Exception { + String reply = template.requestBody("direct:start", "Foo", String.class); + assertEquals("Foo", reply); + } + + protected CamelContext createCamelContext() throws Exception { + CamelContext camelContext = super.createCamelContext(); + ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory(); + camelContext.addComponent("activemq", jmsComponentAutoAcknowledge(connectionFactory)); + return camelContext; + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from("direct:start") + .to("log:before") + .to("activemq:request") + .to("log:after") + .to("mock:result"); + + from("activemq:request") + .to("log:receivedRequest"); + } + }; + } + +} Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java?rev=1379354&r1=1379353&r2=1379354&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java (original) +++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java Fri Aug 31 08:25:09 2012 @@ -31,6 +31,7 @@ import javax.jms.ConnectionFactory; import org.apache.activemq.camel.component.ActiveMQComponent; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; +import org.apache.camel.ExchangePattern; import org.apache.camel.ExchangeTimedOutException; import org.apache.camel.Message; import org.apache.camel.Processor; @@ -74,11 +75,13 @@ public class JmsRouteRequestReplyTest ex public static class SingleNodeDeadEndRouteBuilder extends RouteBuilder { public void configure() throws Exception { - from(endpointUriA).process(new Processor() { - public void process(Exchange e) { - // do nothing - } - }); + from(endpointUriA) + // We are not expect the response here + .setExchangePattern(ExchangePattern.InOnly).process(new Processor() { + public void process(Exchange e) { + // do nothing + } + }); } }; Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java?rev=1379354&r1=1379353&r2=1379354&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java (original) +++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestLateReplyTest.java Fri Aug 31 08:25:09 2012 @@ -166,8 +166,8 @@ public class JmsSimpleRequestLateReplyTe protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { public void configure() throws Exception { - // set the MEP to InOptionalOut as we might not be able to send a reply - from(getQueueEndpointName()).setExchangePattern(ExchangePattern.InOptionalOut).process(new Processor() { + // set the MEP to InOnly as we might not be able to send a reply + from(getQueueEndpointName()).setExchangePattern(ExchangePattern.InOnly).process(new Processor() { public void process(Exchange exchange) throws Exception { Message in = exchange.getIn(); assertEquals("Hello World", in.getBody());