[jboss-svn-commits] JBL Code SVN: r24786 - in labs/jbossesb/trunk/product/rosetta: src/org/jboss/soa/esb/client and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jan 19 08:54:38 EST 2009


Author: kevin.conner at jboss.com
Date: 2009-01-19 08:54:37 -0500 (Mon, 19 Jan 2009)
New Revision: 24786

Added:
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/ServiceInvokerCallUnitTest.java
Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/Call.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
Log:
Fix reply-to after failure: JBESB-2188

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/Call.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/Call.java	2009-01-19 13:38:25 UTC (rev 24785)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/Call.java	2009-01-19 13:54:37 UTC (rev 24786)
@@ -94,9 +94,6 @@
 	
 	public void setTo (EPR epr)
 	{
-		if (epr == null)
-			throw new IllegalArgumentException();
-		
 		_to = epr;
 	}
 	

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2009-01-19 13:38:25 UTC (rev 24785)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2009-01-19 13:54:37 UTC (rev 24786)
@@ -32,6 +32,7 @@
 import org.jboss.internal.soa.esb.services.security.PrivateCryptoUtil;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.Service;
+import org.jboss.soa.esb.addressing.Call;
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.MalformedEPRException;
 import org.jboss.soa.esb.addressing.PortReference;
@@ -572,14 +573,14 @@
 
             if (courier != null) {
                 // make sure the message header does not change when we exit
+                final Call call = message.getHeader().getCall() ;
+                final EPR currentToEpr = call.getTo() ;
+                final EPR currentReplyToEpr = call.getReplyTo() ;
 
-                EPR currentEpr = message.getHeader().getCall().getTo();
-
                 try {
-                    EPR replyToEPR = message.getHeader().getCall().getReplyTo();
+                    call.setTo(targetEPR);
 
-                    message.getHeader().getCall().setTo(targetEPR);
-
+                    final EPR replyToEPR ;
                     if (synchronous) {
                         /*
                          * Currently all couriers that have transactional semantics work in a manner similar
@@ -596,14 +597,15 @@
                         if (isTransactional())
                             throw new IncompatibleTransactionScopeException("Request-response attempt within running transaction controlling request delivery! Using epr [" + targetEPR + "] for Service [" + service + "] and Message ["+message.getHeader()+"]");
                         
-                        if (replyToEPR == null)
-                            replyToEPR = getReplyToAddress(targetEPR);
+                        replyToEPR = (currentReplyToEpr == null ? getReplyToAddress(targetEPR) : currentReplyToEpr) ;
 
                         if (replyToEPR == null) {
                             logger.debug("Not using epr [" + targetEPR + "] for Service [" + service + "] and Message ["+message.getHeader()+"]. No reply-to address available for synchronous response.");
                             return null;
                         }
-                        message.getHeader().getCall().setReplyTo(replyToEPR);
+                        call.setReplyTo(replyToEPR);
+                    } else {
+                        replyToEPR = null ;
                     }
                     if (courier.deliver(message)) {
                         if (synchronous) {
@@ -662,8 +664,8 @@
 
                     // put back the old To since we will have changed it.
 
-                    if (currentEpr != null)
-                        message.getHeader().getCall().setTo(currentEpr);
+                    call.setTo(currentToEpr) ;
+                    call.setReplyTo(currentReplyToEpr) ;
                 }
             }
 

Copied: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/ServiceInvokerCallUnitTest.java (from rev 23838, labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/ServiceInvokerCallUnitTest.java)
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/ServiceInvokerCallUnitTest.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/ServiceInvokerCallUnitTest.java	2009-01-19 13:54:37 UTC (rev 24786)
@@ -0,0 +1,297 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.soa.esb.listeners.message;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import java.net.URI;
+
+import junit.framework.JUnit4TestAdapter;
+
+import org.jboss.internal.soa.esb.couriers.MockCourier;
+import org.jboss.internal.soa.esb.couriers.MockCourierFactory;
+import org.jboss.internal.soa.esb.services.registry.MockRegistry;
+import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.addressing.eprs.JMSEpr;
+import org.jboss.soa.esb.client.ServiceInvoker;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+/**
+ * Tests for Call modifications while invoking through ServiceInvoker.
+ *
+ * @author <a href="mailto:kevin.conner at jboss.com">Kevin Conner</a>
+ */
+public class ServiceInvokerCallUnitTest
+{
+    private EPR deliverEPR ;
+    private EPR failEPR ;
+    private EPR pickupEPR ;
+    private JMSEpr jmsDeliverEPR ;
+    private MockCourier deliverCourier ;
+    private MockCourier failCourier ;
+    private Message responseMessage ;
+
+    @Before
+    public void setUp()
+        throws Exception
+    {
+        MockCourierFactory.install() ;
+        MockRegistry.install() ;
+
+        deliverEPR = new EPR(new URI("test:deliver")) ;
+        failEPR = new EPR(new URI("test:fail")) ;
+        pickupEPR = new EPR(new URI("test:pickup")) ;
+        jmsDeliverEPR = new JMSEpr(JMSEpr.QUEUE_TYPE, "deliver", "ConnectionFactory") ;
+
+        deliverCourier = new MockCourier(true);
+        failCourier = new MockCourier(false);
+        responseMessage = MessageFactory.getInstance().getMessage() ;
+        deliverCourier.pickupMessage = responseMessage ;
+
+        MockRegistry.register("test", "deliver", deliverEPR, deliverCourier);
+        MockRegistry.register("test", "fail", failEPR, failCourier);
+        MockRegistry.register("test", "jmsdeliver", jmsDeliverEPR, deliverCourier);
+        
+        final EPR deadLetterEPR = new EPR(new URI("internal:DLQ")) ;
+        MockRegistry.register(ServiceInvoker.INTERNAL_SERVICE_CATEGORY, ServiceInvoker.DEAD_LETTER_SERVICE_NAME, deadLetterEPR, deliverCourier);
+    }
+    
+    @After
+    public void tearDown()
+        throws Exception
+    {
+        MockRegistry.uninstall() ;
+        MockCourierFactory.uninstall() ;
+    }
+    
+    @Test
+    public void testNullSyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "jmsdeliver") ;
+        final Message resp = si.deliverSync(message, 10) ;
+        
+        assertEquals("Response message", resp, responseMessage) ;
+        
+        assertNull("Call To EPR", message.getHeader().getCall().getTo()) ;
+        assertNull("Call ReplyTo EPR", message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testNonNullToSyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getHeader().getCall().setTo(deliverEPR) ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "jmsdeliver") ;
+        final Message resp = si.deliverSync(message, 10) ;
+        
+        assertEquals("Response message", resp, responseMessage) ;
+        
+        assertEquals("Call To EPR", deliverEPR, message.getHeader().getCall().getTo()) ;
+        assertNull("Call ReplyTo EPR", message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testNonNullSyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getHeader().getCall().setTo(deliverEPR) ;
+        message.getHeader().getCall().setReplyTo(pickupEPR) ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "jmsdeliver") ;
+        final Message resp = si.deliverSync(message, 10) ;
+        
+        assertEquals("Response message", resp, responseMessage) ;
+        
+        assertEquals("Call To EPR", deliverEPR, message.getHeader().getCall().getTo()) ;
+        assertEquals("Call ReplyTo EPR", pickupEPR, message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testNullAsyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "jmsdeliver") ;
+        si.deliverAsync(message) ;
+        
+        assertNull("Call To EPR", message.getHeader().getCall().getTo()) ;
+        assertNull("Call ReplyTo EPR", message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testNonNullToAsyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getHeader().getCall().setTo(deliverEPR) ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "jmsdeliver") ;
+        si.deliverAsync(message) ;
+        
+        assertEquals("Call To EPR", deliverEPR, message.getHeader().getCall().getTo()) ;
+        assertNull("Call ReplyTo EPR", message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testNonNullAsyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getHeader().getCall().setTo(deliverEPR) ;
+        message.getHeader().getCall().setReplyTo(pickupEPR) ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "jmsdeliver") ;
+        si.deliverAsync(message) ;
+        
+        assertEquals("Call To EPR", deliverEPR, message.getHeader().getCall().getTo()) ;
+        assertEquals("Call ReplyTo EPR", pickupEPR, message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testFailNullSyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "fail") ;
+        try
+        {
+            si.deliverSync(message, 10) ;
+            fail("Expected MessageDeliveryException") ;
+        }
+        catch (final MessageDeliverException mde) {} // expected
+        
+        assertNull("Call To EPR", message.getHeader().getCall().getTo()) ;
+        assertNull("Call ReplyTo EPR", message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testFailNonNullToSyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getHeader().getCall().setTo(deliverEPR) ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "fail") ;
+        try
+        {
+            si.deliverSync(message, 10) ;
+            fail("Expected MessageDeliveryException") ;
+        }
+        catch (final MessageDeliverException mde) {} // expected
+        
+        assertEquals("Call To EPR", deliverEPR, message.getHeader().getCall().getTo()) ;
+        assertNull("Call ReplyTo EPR", message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testFailNonNullSyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getHeader().getCall().setTo(deliverEPR) ;
+        message.getHeader().getCall().setReplyTo(pickupEPR) ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "fail") ;
+        try
+        {
+            si.deliverSync(message, 10) ;
+            fail("Expected MessageDeliveryException") ;
+        }
+        catch (final MessageDeliverException mde) {} // expected
+        
+        assertEquals("Call To EPR", deliverEPR, message.getHeader().getCall().getTo()) ;
+        assertEquals("Call ReplyTo EPR", pickupEPR, message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testFailNullAsyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "fail") ;
+        try
+        {
+            si.deliverAsync(message) ;
+            fail("Expected MessageDeliveryException") ;
+        }
+        catch (final MessageDeliverException mde) {} // expected
+        
+        assertNull("Call To EPR", message.getHeader().getCall().getTo()) ;
+        assertNull("Call ReplyTo EPR", message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testFailNonNullToAsyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getHeader().getCall().setTo(deliverEPR) ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "fail") ;
+        try
+        {
+            si.deliverAsync(message) ;
+            fail("Expected MessageDeliveryException") ;
+        }
+        catch (final MessageDeliverException mde) {} // expected
+        
+        assertEquals("Call To EPR", deliverEPR, message.getHeader().getCall().getTo()) ;
+        assertNull("Call ReplyTo EPR", message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    @Test
+    public void testFailNonNullAsyncEPRs()
+        throws Exception
+    {
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getHeader().getCall().setTo(deliverEPR) ;
+        message.getHeader().getCall().setReplyTo(pickupEPR) ;
+        
+        final ServiceInvoker si = new ServiceInvoker("test", "fail") ;
+        try
+        {
+            si.deliverAsync(message) ;
+            fail("Expected MessageDeliveryException") ;
+        }
+        catch (final MessageDeliverException mde) {} // expected
+        
+        assertEquals("Call To EPR", deliverEPR, message.getHeader().getCall().getTo()) ;
+        assertEquals("Call ReplyTo EPR", pickupEPR, message.getHeader().getCall().getReplyTo()) ;
+    }
+    
+    public static junit.framework.Test suite()
+    {
+        return new JUnit4TestAdapter(ServiceInvokerCallUnitTest.class) ;
+    }
+}




More information about the jboss-svn-commits mailing list