You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2009/07/28 21:25:08 UTC

svn commit: r798666 - in /cxf/branches/2.1.x-fixes: ./ rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/ rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/

Author: dkulp
Date: Tue Jul 28 19:25:08 2009
New Revision: 798666

URL: http://svn.apache.org/viewvc?rev=798666&view=rev
Log:
Merged revisions 798655 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/branches/2.2.x-fixes

................
  r798655 | dkulp | 2009-07-28 15:03:38 -0400 (Tue, 28 Jul 2009) | 9 lines
  
  Merged revisions 798654 via svnmerge from 
  https://svn.apache.org/repos/asf/cxf/trunk
  
  ........
    r798654 | dkulp | 2009-07-28 15:01:30 -0400 (Tue, 28 Jul 2009) | 1 line
    
    [CXF-2366] Patch from Marat Bedretdinov applied
  ........
................

Modified:
    cxf/branches/2.1.x-fixes/   (props changed)
    cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
    cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConstants.java
    cxf/branches/2.1.x-fixes/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java

Propchange: cxf/branches/2.1.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jul 28 19:25:08 2009
@@ -1,2 +1,2 @@
-/cxf/branches/2.2.x-fixes:743446,753380,753397,753421,754585,755365,757499,757859,757899,757935,757951,758195,758303,758308,758378,758690,758910,759890,759961,759963-759964,759966,760029,760073,760150,760171,760178,760198,760212,760456,760468,760582,760938,761094,761113,761120,761317,761759,761789,762393,762518,762567,763200,763272,763495,763854,763931,763942,763953,764033-764034,764581,764599-764606,764887,765357,766013,766058,766100-766101,766763,766770,766860,766962-766963,767159,767191,767927,771416,772143,772402,772658,772714,773009-773010,773027,773049,773146,773581,773691,773693,774446-774496,774558,774760,774851,774979,775423,776024-776025,776218,776429,776459,777189,777224,777243,777481,777505,777572,777580,780033,780184,780213,780421,780664,780800,780902,780911,781497,781841,782733,782735-782736,783099,783407,784064,784197,785293,785296,785298-785299,785301,785656,786158,786587,786589,786591-786592,786640,787272,787276,787282-787283,787285,787295,787307,787324,7873
 67,788824-788825,788827-788828,788830,789423,789429,789707,789709-789710,789712,789721,789905,789908,789910,789912,790295,790646-790647,790651,790654-790655,790659,791948,791950,791952,791955,792276,792288,792291,792992,792995,792998,794402,794404,794735,794797,794799,794803,795161-795162,796300-796301,796598,797449,797452-797453,797460,797463-797464,797521-797522,797584-797585,797645,797652,797701,797884,797886,798348-798350,798568,798574-798575,798577-798578,798586
-/cxf/trunk:782181,782728-782730,783097,783396,784059,784181,784895,785279-785282,785468,786142,786271,786395,786582-786583,786638,786647,787269,787277-787279,787290,787305,787323,787366,788060,788187,788703,788774,788820,789371,789420,789527-789529,789704-789705,789896,789898-789900,790294,790637-790644,791354,791538,791753,791947,792261-792263,792684,792975,792985,794297,794396,794728,794778-794780,794892,795160,796022-796023,796593,796780,797194,797231-797233,797442,797505,797517,797581-797582,797640,797651,797699,797882-797883,798344-798346,798533,798551,798561-798562,798570,798584
+/cxf/branches/2.2.x-fixes:743446,753380,753397,753421,754585,755365,757499,757859,757899,757935,757951,758195,758303,758308,758378,758690,758910,759890,759961,759963-759964,759966,760029,760073,760150,760171,760178,760198,760212,760456,760468,760582,760938,761094,761113,761120,761317,761759,761789,762393,762518,762567,763200,763272,763495,763854,763931,763942,763953,764033-764034,764581,764599-764606,764887,765357,766013,766058,766100-766101,766763,766770,766860,766962-766963,767159,767191,767927,771416,772143,772402,772658,772714,773009-773010,773027,773049,773146,773581,773691,773693,774446-774496,774558,774760,774851,774979,775423,776024-776025,776218,776429,776459,777189,777224,777243,777481,777505,777572,777580,780033,780184,780213,780421,780664,780800,780902,780911,781497,781841,782733,782735-782736,783099,783407,784064,784197,785293,785296,785298-785299,785301,785656,786158,786587,786589,786591-786592,786640,787272,787276,787282-787283,787285,787295,787307,787324,7873
 67,788824-788825,788827-788828,788830,789423,789429,789707,789709-789710,789712,789721,789905,789908,789910,789912,790295,790646-790647,790651,790654-790655,790659,791948,791950,791952,791955,792276,792288,792291,792992,792995,792998,794402,794404,794735,794797,794799,794803,795161-795162,796300-796301,796598,797449,797452-797453,797460,797463-797464,797521-797522,797584-797585,797645,797652,797701,797884,797886,798348-798350,798568,798574-798575,798577-798578,798586,798655
+/cxf/trunk:782181,782728-782730,783097,783396,784059,784181,784895,785279-785282,785468,786142,786271,786395,786582-786583,786638,786647,787269,787277-787279,787290,787305,787323,787366,788060,788187,788703,788774,788820,789371,789420,789527-789529,789704-789705,789896,789898-789900,790294,790637-790644,791354,791538,791753,791947,792261-792263,792684,792975,792985,794297,794396,794728,794778-794780,794892,795160,796022-796023,796593,796780,797194,797231-797233,797442,797505,797517,797581-797582,797640,797651,797699,797882-797883,798344-798346,798533,798551,798561-798562,798570,798584,798654

Propchange: cxf/branches/2.1.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java?rev=798666&r1=798665&r2=798666&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java (original)
+++ cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java Tue Jul 28 19:25:08 2009
@@ -164,13 +164,15 @@
                 String messageType = jmsConfig.getMessageType();
                 final javax.jms.Message jmsMessage;
                 Destination replyToDestination = replyTo;
-                if (exchange.isOneWay() && !jmsConfig.isEnforceSpec()) {
-                    final String contextReplyToName = 
-                        (headers != null) ? headers.getJMSReplyTo() : null;
-                    if (contextReplyToName != null) {
+                if (exchange.isOneWay() && !jmsConfig.isEnforceSpec() && isSetReplyTo(outMessage)) {
+                    String replyToName = (headers != null) ? headers.getJMSReplyTo() : null; 
+                    if (replyToName == null && jmsConfig.getReplyDestination() != null) {
+                        replyToName = jmsConfig.getReplyDestination();
+                    }
+                    if (replyToName != null) {
                         replyToDestination = 
                             JMSFactory.resolveOrCreateDestination(jmsTemplate, 
-                                                                  contextReplyToName, 
+                                                                  replyToName, 
                                                                   jmsConfig.isPubSubDomain());
                     }
                 }
@@ -321,6 +323,11 @@
         this.jmsConfig = jmsConfig;
     }
 
+    protected static boolean isSetReplyTo(Message message) {         
+        Boolean ret = (Boolean)message.get(JMSConstants.JMS_SET_REPLY_TO);
+        return ret == null || (ret != null && ret.booleanValue());
+    }
+
     @Override
     protected void finalize() throws Throwable {
         if (listener != null) {

Modified: cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConstants.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConstants.java?rev=798666&r1=798665&r2=798666&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConstants.java (original)
+++ cxf/branches/2.1.x-fixes/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConstants.java Tue Jul 28 19:25:08 2009
@@ -55,6 +55,7 @@
     public static final String JMS_SERVER_CONFIG_ID = "jms-server";
     
     public static final String JMS_REBASED_REPLY_TO = "org.apache.cxf.jms.server.replyto";
+    public static final String JMS_SET_REPLY_TO = "org.apache.cxf.jms.client.set.replyto";
     
     
     private JMSConstants() {

Modified: cxf/branches/2.1.x-fixes/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java?rev=798666&r1=798665&r2=798666&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java (original)
+++ cxf/branches/2.1.x-fixes/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java Tue Jul 28 19:25:08 2009
@@ -24,6 +24,9 @@
 import java.io.InputStream;
 
 import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.Queue;
+import javax.jms.Topic;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.cxf.BusFactory;
@@ -44,6 +47,10 @@
     private static final int MAX_RECEIVE_TIME = 5;
     private Message destMessage;
 
+    public JMSDestinationTest() {
+        
+    }
+    
     @BeforeClass
     public static void createAndStartBroker() throws Exception {
         startBroker(new JMSBrokerSetup("tcp://localhost:61500"));
@@ -173,14 +180,12 @@
         bus = bf.createBus("jms_test_config.xml");
         BusFactory.setDefaultBus(bus);
         destMessage = null;
-        inMessage = null;
         setupServiceInfo("http://cxf.apache.org/hello_world_jms", "/wsdl/jms_test.wsdl",
                          "HelloWorldPubSubService", "HelloWorldPubSubPort");
         JMSConduit conduit = setupJMSConduit(true, false);
         Message outMessage = new MessageImpl();
         setupMessageHeader(outMessage);
         JMSDestination destination = setupJMSDestination(true);
-        destination.activate();
         sendoutMessage(conduit, outMessage, true);
         // wait for the message to be get from the destination
         waitForReceiveDestMessage();
@@ -194,15 +199,12 @@
 
     @Test
     public void testOneWayDestination() throws Exception {
-        destMessage = null;
-        inMessage = null;
         setupServiceInfo("http://cxf.apache.org/hello_world_jms", "/wsdl/jms_test.wsdl",
                          "HWStaticReplyQBinMsgService", "HWStaticReplyQBinMsgPort");
         JMSConduit conduit = setupJMSConduit(true, false);
         Message outMessage = new MessageImpl();
         setupMessageHeader(outMessage);
         JMSDestination destination = setupJMSDestination(true);
-        destination.activate();
         sendoutMessage(conduit, outMessage, true);
         // wait for the message to be get from the destination
         waitForReceiveDestMessage();
@@ -214,22 +216,128 @@
         destination.shutdown();
     }
 
-    private void setupMessageHeader(Message outMessage, String correlationId) {
+    @Test
+    public void testOneWayReplyToSetUnset() throws Exception {
+        /* 1. Test that replyTo destination set in WSDL is NOT used 
+         * in spec compliant mode */
+        
+        destMessage = null;
+        setupServiceInfo("http://cxf.apache.org/hello_world_jms", "/wsdl/jms_test.wsdl",
+                         "HWStaticReplyQBinMsgService", "HWStaticReplyQBinMsgPort");
+        JMSConduit conduit = setupJMSConduit(true, false);
+        Message outMessage = new MessageImpl();
+        setupMessageHeader(outMessage);
+        JMSDestination destination = setupJMSDestination(true);
+        sendoutMessage(conduit, outMessage, true);
+        // wait for the message to be get from the destination
+        waitForReceiveDestMessage();
+        // just verify the Destination inMessage
+        assertTrue("The destiantion should have got the message ", destMessage != null);
+        verifyReplyToNotSet(destMessage);
+        destMessage = null;
+        
+        /* 2. Test that replyTo destination set in WSDL IS used 
+         * in spec non-compliant mode */
+        
+        conduit.getJmsConfig().setEnforceSpec(false);
+        sendoutMessage(conduit, outMessage, true);
+        waitForReceiveDestMessage();
+        assertTrue("The destiantion should have got the message ", destMessage != null);
+        String exName = conduit.getJmsConfig().getReplyDestination();
+        exName = (exName.indexOf('/') != -1 && exName.indexOf('/') < exName.length()) 
+            ? exName.substring(exName.indexOf('/') + 1) : exName;
+        verifyReplyToSet(destMessage, Queue.class, exName);
+        destMessage = null;
+        
+        /* 3. Test that replyTo destination provided via invocation context 
+         * overrides the value set in WSDL and IS used in spec non-compliant mode */
+        
+        String contextReplyTo = conduit.getJmsConfig().getReplyDestination() + ".context";
+        exName += ".context";
+        setupMessageHeader(outMessage, "cidValue", contextReplyTo);
+        sendoutMessage(conduit, outMessage, true);
+        waitForReceiveDestMessage();
+        assertTrue("The destiantion should have got the message ", destMessage != null);
+        verifyReplyToSet(destMessage, Queue.class, exName);
+        destMessage = null;
+        
+        /* 4. Test that replyTo destination provided via invocation context 
+         * and the value set in WSDL are NOT used in spec non-compliant mode 
+         * when JMSConstants.JMS_SET_REPLY_TO == false */
+
+        setupMessageHeader(outMessage);
+        outMessage.put(JMSConstants.JMS_SET_REPLY_TO, Boolean.FALSE);
+        sendoutMessage(conduit, outMessage, true);
+        waitForReceiveDestMessage();
+        assertTrue("The destiantion should have got the message ", destMessage != null);
+        verifyReplyToNotSet(destMessage);
+        destMessage = null;
+        
+        /* 5. Test that replyTo destination set in WSDL IS used in spec non-compliant 
+         * mode when JMSConstants.JMS_SET_REPLY_TO == true */
+
+        setupMessageHeader(outMessage);
+        outMessage.put(JMSConstants.JMS_SET_REPLY_TO, Boolean.TRUE);
+        sendoutMessage(conduit, outMessage, true);
+        waitForReceiveDestMessage();
+        assertTrue("The destiantion should have got the message ", destMessage != null);
+        exName = conduit.getJmsConfig().getReplyDestination();
+        exName = (exName.indexOf('/') != -1 && exName.indexOf('/') < exName.length()) 
+            ? exName.substring(exName.indexOf('/') + 1) : exName;
+        verifyReplyToSet(destMessage, Queue.class, exName);
+        destMessage = null;
+        
+        conduit.close();
+        destination.shutdown();
+    }
+
+    
+    protected void verifyReplyToNotSet(Message cxfMsg) {
+        javax.jms.Message jmsMsg = 
+            javax.jms.Message.class.cast(cxfMsg.get(JMSConstants.JMS_REQUEST_MESSAGE));
+        assertNotNull("JMS Messsage must be null", jmsMsg);
+    }
+    
+    protected void verifyReplyToSet(Message cxfMsg, 
+                                    Class<? extends Destination> type, 
+                                    String name) throws Exception {
+        javax.jms.Message jmsMsg = 
+            javax.jms.Message.class.cast(cxfMsg.get(JMSConstants.JMS_REQUEST_MESSAGE));
+        assertNotNull("JMS Messsage must not be null", jmsMsg);
+        assertNotNull("JMS Messsage's replyTo must not be null", jmsMsg.getJMSReplyTo());
+        assertTrue("JMS Messsage's replyTo type must be of type " + type.getName(), 
+                   type.isAssignableFrom(jmsMsg.getJMSReplyTo().getClass()));
+        String receivedName = null; 
+        if (type == Queue.class) {
+            receivedName = ((Queue)jmsMsg.getJMSReplyTo()).getQueueName();
+        } else if (type == Topic.class) {
+            receivedName = ((Topic)jmsMsg.getJMSReplyTo()).getTopicName();
+        }
+        assertTrue("JMS Messsage's replyTo must be named " + name + " but was " + receivedName,
+                   name == receivedName || receivedName.equals(name));
+        
+    }
+    private void setupMessageHeader(Message outMessage, String correlationId, String replyTo) {
         JMSMessageHeadersType header = new JMSMessageHeadersType();
         header.setJMSCorrelationID(correlationId);
         header.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
         header.setJMSPriority(1);
         header.setTimeToLive(1000);
+        header.setJMSReplyTo(replyTo != null ? replyTo : null);
         outMessage.put(JMSConstants.JMS_CLIENT_REQUEST_HEADERS, header);
         outMessage.put(Message.ENCODING, "US-ASCII");
     }
-    
+
     private void setupMessageHeader(Message outMessage) {
-        setupMessageHeader(outMessage, "Destination test");
+        setupMessageHeader(outMessage, "Destination test", null);
+    }
+
+    private void setupMessageHeader(Message outMessage, String correlationId) {
+        setupMessageHeader(outMessage, correlationId, null);
     }
 
-    private void verifyReceivedMessage(Message inMessage) {
-        ByteArrayInputStream bis = (ByteArrayInputStream)inMessage.getContent(InputStream.class);
+    private void verifyReceivedMessage(Message message) {
+        ByteArrayInputStream bis = (ByteArrayInputStream)message.getContent(InputStream.class);
         byte bytes[] = new byte[bis.available()];
         try {
             bis.read(bytes);
@@ -241,26 +349,26 @@
         assertEquals("The response content should be equal", AbstractJMSTester.MESSAGE_CONTENT, response);
     }
 
-    private void verifyRequestResponseHeaders(Message inMessage, Message outMessage) {
-        JMSMessageHeadersType outHeader = (JMSMessageHeadersType)outMessage
+    private void verifyRequestResponseHeaders(Message msgIn, Message msgOut) {
+        JMSMessageHeadersType outHeader = (JMSMessageHeadersType)msgOut
             .get(JMSConstants.JMS_CLIENT_REQUEST_HEADERS);
-        String inEncoding = (String) inMessage.get(Message.ENCODING);
-        String outEncoding = (String) outMessage.get(Message.ENCODING);
+        String inEncoding = (String) msgIn.get(Message.ENCODING);
+        String outEncoding = (String) msgOut.get(Message.ENCODING);
         
         assertEquals("The message encoding should be equal", inEncoding, outEncoding);
 
-        JMSMessageHeadersType inHeader = (JMSMessageHeadersType)inMessage
+        JMSMessageHeadersType inHeader = (JMSMessageHeadersType)msgIn
             .get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS);
 
         verifyJmsHeaderEquality(outHeader, inHeader);
 
     }
 
-    private void verifyHeaders(Message inMessage, Message outMessage) {
-        JMSMessageHeadersType outHeader = (JMSMessageHeadersType)outMessage
+    private void verifyHeaders(Message msgIn, Message msgOut) {
+        JMSMessageHeadersType outHeader = (JMSMessageHeadersType)msgOut
             .get(JMSConstants.JMS_CLIENT_REQUEST_HEADERS);
 
-        JMSMessageHeadersType inHeader = (JMSMessageHeadersType)inMessage
+        JMSMessageHeadersType inHeader = (JMSMessageHeadersType)msgIn
             .get(JMSConstants.JMS_SERVER_REQUEST_HEADERS);
 
         verifyJmsHeaderEquality(outHeader, inHeader);
@@ -286,14 +394,13 @@
     @Test
     public void testRoundTripDestination() throws Exception {
 
-        inMessage = null;
         setupServiceInfo("http://cxf.apache.org/hello_world_jms", "/wsdl/jms_test.wsdl",
                          "HelloWorldService", "HelloWorldPort");
         // set up the conduit send to be true
         JMSConduit conduit = setupJMSConduit(true, false);
         final Message outMessage = new MessageImpl();
         setupMessageHeader(outMessage, null);
-        final JMSDestination destination = setupJMSDestination(true);
+        final JMSDestination destination = setupJMSDestination(false);
 
         // set up MessageObserver for handling the conduit message
         MessageObserver observer = new MessageObserver() {
@@ -342,7 +449,6 @@
 
         final String customPropertyName = "THIS_PROPERTY_WILL_NOT_BE_AUTO_COPIED";
 
-        inMessage = null;
         setupServiceInfo("http://cxf.apache.org/hello_world_jms", "/wsdl/jms_test.wsdl",
                          "HelloWorldService", "HelloWorldPort");
         // set up the conduit send to be true
@@ -358,7 +464,7 @@
             .get(JMSConstants.JMS_CLIENT_REQUEST_HEADERS);
         headers.getProperty().add(excludeProp);
 
-        final JMSDestination destination = setupJMSDestination(true);
+        final JMSDestination destination = setupJMSDestination(false);
 
         // set up MessageObserver for handling the conduit message
         MessageObserver observer = new MessageObserver() {
@@ -408,7 +514,6 @@
 
     @Test
     public void testIsMultiplexCapable() throws Exception {
-        inMessage = null;
         setupServiceInfo("http://cxf.apache.org/hello_world_jms", "/wsdl/jms_test.wsdl",
                          "HelloWorldService", "HelloWorldPort");
         final JMSDestination destination = setupJMSDestination(true);
@@ -418,7 +523,6 @@
     
     @Test
     public void testSecurityContext() throws Exception {
-        inMessage = null;
         setupServiceInfo("http://cxf.apache.org/hello_world_jms", "/wsdl/jms_test.wsdl",
                          "HelloWorldService", "HelloWorldPort");
         final JMSDestination destination = setupJMSDestination(true);