You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2011/02/14 11:32:47 UTC

svn commit: r1070430 - in /cxf/trunk/rt/transports/jms/src: main/java/org/apache/cxf/transport/jms/ main/java/org/apache/cxf/transport/jms/uri/ main/resources/schemas/wsdl/ test/java/org/apache/cxf/transport/jms/uri/

Author: ningjiang
Date: Mon Feb 14 10:32:46 2011
New Revision: 1070430

URL: http://svn.apache.org/viewvc?rev=1070430&view=rev
Log:
CXF-3334 cxf-jms should support the topicReplyToName option of the JMS URI

Modified:
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpointParser.java
    cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xsd
    cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java?rev=1070430&r1=1070429&r2=1070430&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java Mon Feb 14 10:32:46 2011
@@ -172,7 +172,7 @@ public class JMSConduit extends Abstract
             && replyTo != null) {
             if (exchange.isSynchronous() || exchange.isOneWay()) {
                 replyToDestination = JMSFactory.resolveOrCreateDestination(jmsTemplate, replyTo,
-                                                                           jmsConfig.isPubSubDomain());
+                                                                           jmsConfig.isReplyPubSubDomain());
             } else {
                 if (userCID == null || !jmsConfig.isUseConduitIdSelector()) { 
                     replyToDestination = getJMSListener().getDestination();

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java?rev=1070430&r1=1070429&r2=1070430&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java Mon Feb 14 10:32:46 2011
@@ -82,6 +82,7 @@ public class JMSConfiguration implements
     private String replyToDestination;
     private String messageType = JMSConstants.TEXT_MESSAGE_TYPE;
     private boolean pubSubDomain;
+    private boolean replyPubSubDomain;
     private Boolean useConduitIdSelector;
     private String conduitSelectorPrefix;
     private boolean autoResolveDestination;
@@ -299,6 +300,14 @@ public class JMSConfiguration implements
     public void setPubSubDomain(boolean pubSubDomain) {
         this.pubSubDomain = pubSubDomain;
     }
+    
+    public boolean isReplyPubSubDomain() {
+        return replyPubSubDomain;
+    }
+    
+    public void setReplyPubSubDomain(boolean replyPubSubDomain) {
+        this.replyPubSubDomain = replyPubSubDomain;
+    }
 
     public boolean isUseJms11() {
         return useJms11;

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java?rev=1070430&r1=1070429&r2=1070430&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java Mon Feb 14 10:32:46 2011
@@ -267,14 +267,14 @@ public class JMSOldConfigHolder {
                 jndiDestinationResolver.setJndiTemplate(jt);
                 jmsConfig.setDestinationResolver(jndiDestinationResolver);
                 jmsConfig.setTargetDestination(endpoint.getDestinationName());
-                jmsConfig.setReplyDestination(endpoint.getReplyToName());
+                setReplyDestination(jmsConfig, endpoint);
                 if (address != null) {
                     jmsConfig.setReplyToDestination(address.getJndiReplyToDestinationName());
                 }
             } else {
                 // Use the default dynamic destination resolver
                 jmsConfig.setTargetDestination(endpoint.getDestinationName());
-                jmsConfig.setReplyDestination(endpoint.getReplyToName());
+                setReplyDestination(jmsConfig, endpoint);
                 if (address != null) {
                     jmsConfig.setReplyToDestination(address.getJmsReplyToDestinationName());
                 }
@@ -288,6 +288,16 @@ public class JMSOldConfigHolder {
         jmsConfig.setTargetService(targetService);
         return jmsConfig;
     }
+    
+    private static void setReplyDestination(JMSConfiguration jmsConfig, JMSEndpoint endpoint) {
+        if (endpoint.getReplyToName() != null)  {
+            jmsConfig.setReplyDestination(endpoint.getReplyToName());
+            jmsConfig.setReplyPubSubDomain(false);
+        } else if (endpoint.getTopicReplyToName() != null) {
+            jmsConfig.setReplyDestination(endpoint.getTopicReplyToName());
+            jmsConfig.setReplyPubSubDomain(true);
+        }
+    }
 
     private static void mapAddressToEndpoint(AddressType address, JMSEndpoint endpoint) {
         boolean pubSubDomain = DestinationStyleType.TOPIC == address.getDestinationStyle();

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpointParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpointParser.java?rev=1070430&r1=1070429&r2=1070430&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpointParser.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpointParser.java Mon Feb 14 10:32:46 2011
@@ -79,6 +79,8 @@ public final class JMSEndpointParser {
         String priority = getAndRemoveParameter(parameters, JMSURIConstants.PRIORITY_PARAMETER_NAME);
         String replyToName = getAndRemoveParameter(parameters,
                                                    JMSURIConstants.REPLYTONAME_PARAMETER_NAME);
+        String topicReplyToName = getAndRemoveParameter(parameters,
+                                                   JMSURIConstants.TOPICREPLYTONAME_PARAMETER_NAME);
         String jndiConnectionFactoryName = getAndRemoveParameter(
                                                                  parameters,
                                                 JMSURIConstants.JNDICONNECTIONFACTORYNAME_PARAMETER_NAME);
@@ -96,9 +98,16 @@ public final class JMSEndpointParser {
         if (priority != null) {
             endpoint.setPriority(Integer.valueOf(priority));
         }
+        if (replyToName != null && topicReplyToName != null) {
+            throw new IllegalArgumentException(
+                "The replyToName and topicReplyToName should not be defined at the same time.");
+        }
         if (replyToName != null) {
             endpoint.setReplyToName(replyToName);
         }
+        if (topicReplyToName != null) {
+            endpoint.setTopicReplyToName(topicReplyToName);
+        }
         if (jndiConnectionFactoryName != null) {
             endpoint.setJndiConnectionFactoryName(jndiConnectionFactoryName);
         }

Modified: cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xsd
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xsd?rev=1070430&r1=1070429&r2=1070430&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xsd (original)
+++ cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xsd Mon Feb 14 10:32:46 2011
@@ -64,6 +64,7 @@
 		<xs:attribute name="timeToLive" type="xs:long" />
 		<xs:attribute name="priority" type="jms:priorityType" />
 		<xs:attribute name="replyToName" type="xs:string" />
+		<xs:attribute name="topicReplyToName" type="xs:string" />
 		<xs:attribute name="jndiConnectionFactoryName" type="xs:string" />
 		<xs:attribute name="jndiInitialContextFactory" type="xs:string" />
 		<xs:attribute name="jndiURL" type="xs:string" />

Modified: cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java?rev=1070430&r1=1070429&r2=1070430&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java (original)
+++ cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java Mon Feb 14 10:32:46 2011
@@ -39,7 +39,6 @@ public class JMSEndpointTest extends Ass
     public void testQueueParameters() throws Exception {
         JMSEndpoint endpoint = resolveEndpoint("jms:queue:Foo.Bar?foo=bar&foo2=bar2");
         assertTrue(endpoint instanceof JMSQueueEndpoint);
-        System.out.println("The Request URI is " + endpoint.getRequestURI());
         assertEquals(endpoint.getDestinationName(), "Foo.Bar");
         assertEquals(endpoint.getJmsVariant(), JMSURIConstants.QUEUE);
         assertEquals(endpoint.getParameters().size(), 2);
@@ -89,6 +88,26 @@ public class JMSEndpointTest extends Ass
     }
     
     @Test
+    public void testReplyToNameParameters() throws Exception {
+        JMSEndpoint endpoint = resolveEndpoint("jms:queue:Foo.Bar?replyToName=FOO.Tar");
+        assertTrue(endpoint instanceof JMSQueueEndpoint);
+        assertEquals("Foo.Bar", endpoint.getDestinationName());
+        assertNull(endpoint.getTopicReplyToName());
+        assertEquals("FOO.Tar", endpoint.getReplyToName());
+        try {
+            resolveEndpoint("jms:queue:Foo.Bar?replyToName=FOO.Tar&topicReplyToName=FOO.Zar");
+            fail("Expecting exception here");
+        } catch (IllegalArgumentException ex) {
+            // expect the exception
+        }
+        
+        endpoint = resolveEndpoint("jms:queue:Foo.Bar?topicReplyToName=FOO.Zar");
+        assertEquals("Foo.Bar", endpoint.getDestinationName());
+        assertNull(endpoint.getReplyToName());
+        assertEquals("FOO.Zar", endpoint.getTopicReplyToName());
+    }
+    
+    @Test
     public void testJNDIWithAdditionalParameters() throws Exception {
         JMSEndpoint endpoint = resolveEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
                                                + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
@@ -143,13 +162,7 @@ public class JMSEndpointTest extends Ass
         assertFalse(requestUri.contains("priority=3"));
     }
     
-    private JMSEndpoint resolveEndpoint(String uri) {
-        JMSEndpoint endpoint = null;
-        try {
-            endpoint = JMSEndpointParser.createEndpoint(uri);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return endpoint;
+    private JMSEndpoint resolveEndpoint(String uri) throws Exception {
+        return JMSEndpointParser.createEndpoint(uri);
     }
 }