[jboss-svn-commits] JBL Code SVN: r17042 - in labs/jbossesb/branches/JBESB_4_2_1_GA_CP: product/rosetta/src/org/jboss/soa/esb/addressing and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Dec 5 13:01:06 EST 2007


Author: kevin.conner at jboss.com
Date: 2007-12-05 13:01:06 -0500 (Wed, 05 Dec 2007)
New Revision: 17042

Added:
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/Service4Action.java
Modified:
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/CallHelper.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/EPRHelper.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/addressing/PortReference.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/LogicalEPR.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/LogicalEPRUnitTest.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/addressing/tests/CallUnitTest.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/LogicalEPRUnitTest.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/deployment.xml
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/jboss-esb.xml
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/jms-service.xml
Log:
Fixed extension processing/logical EPR bridge: JBESB-1395

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/CallHelper.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/CallHelper.java	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/CallHelper.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -23,11 +23,14 @@
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.jboss.internal.soa.esb.assertion.AssertArgument;
 import org.jboss.soa.esb.MarshalException;
 import org.jboss.soa.esb.UnmarshalException;
 import org.jboss.soa.esb.addressing.Call;
+import org.jboss.soa.esb.addressing.PortReference;
 import org.jboss.soa.esb.addressing.XMLUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -122,28 +125,30 @@
 		Call call = new Call();
 		NodeList nl = header.getChildNodes();
 
+		final List<Node> extensions = new ArrayList<Node>() ;
 		for (int i = 0; i < nl.getLength(); i++)
 		{
 			Node n = nl.item(i);
-
-			if ((n.getPrefix() != null) && (n.getLocalName() != null))
+			if (!(n instanceof Element))
 			{
-				if (n.getPrefix().equals(XMLUtil.WSA_PREFIX) && (n.getLocalName().equals(XMLUtil.TO_TAG)))
+			    continue ;
+			}
+			if (XMLUtil.WSA_NAMESPACE_URI.equals(n.getNamespaceURI()))
+			{
+			        final String name = n.getLocalName() ;
+				if (XMLUtil.TO_TAG.equals(name))
 				{
 					call.setTo(EPRHelper.fromXML((Element) header, true));
 				}
-				
-				if (n.getPrefix().equals(XMLUtil.WSA_PREFIX) && (n.getLocalName().equals(XMLUtil.FROM_TAG)))
+				else if (XMLUtil.FROM_TAG.equals(name))
 				{
 					call.setFrom(EPRHelper.fromXML((Element) n, false));
 				}
-	
-				if (n.getPrefix().equals(XMLUtil.WSA_PREFIX) && (n.getLocalName().equals(XMLUtil.REPLY_TO_TAG)))
+				else if (XMLUtil.REPLY_TO_TAG.equals(name))
 				{
 					call.setReplyTo(EPRHelper.fromXML((Element) n, false));
 				}
-	
-				if (n.getPrefix().equals(XMLUtil.WSA_PREFIX) && (n.getLocalName().equals(XMLUtil.RELATES_TO_TAG)))
+				else if (XMLUtil.RELATES_TO_TAG.equals(name))
 				{
     					try
     					{
@@ -160,13 +165,11 @@
     						+ "' has invalid content", ex);
     					}
 				}
-	
-				if (n.getPrefix().equals(XMLUtil.WSA_PREFIX) && (n.getLocalName().equals(XMLUtil.FAULT_TO_TAG)))
+				else if (XMLUtil.FAULT_TO_TAG.equals(name))
 				{
 					call.setFaultTo(EPRHelper.fromXML((Element) n, false));
 				}
-	
-				if (n.getPrefix().equals(XMLUtil.WSA_PREFIX) && (n.getLocalName().equals(XMLUtil.ACTION_TAG)))
+				else if (XMLUtil.ACTION_TAG.equals(name))
 				{
 					try
 					{
@@ -183,8 +186,7 @@
 						+ "' has invalid content", ex);
 					}
 				}
-	
-				if (n.getPrefix().equals(XMLUtil.WSA_PREFIX) && (n.getLocalName().equals(XMLUtil.MESSAGE_IDENTIFIER_TAG)))
+				else if (XMLUtil.MESSAGE_IDENTIFIER_TAG.equals(name))
 				{
 					try
 					{
@@ -202,9 +204,25 @@
 						+ "' has invalid content", ex);
 					}
 				}
+				else
+				{
+				    extensions.add(n) ;
+				}
 			}
+			else
+			{
+			    extensions.add(n) ;
+			}
 		}
 
+		if (extensions.size() > 0)
+		{
+		    final PortReference to = call.getTo().getAddr() ;
+		    for(Node node:extensions)
+		    {
+		        to.addExtension(node.getLocalName(), node.getPrefix(), node.getNamespaceURI(), node.getTextContent()) ;
+		    }
+		}
 		return call;
 	}
 

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/EPRHelper.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/EPRHelper.java	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/helpers/EPRHelper.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -27,7 +27,9 @@
 import org.jboss.soa.esb.MarshalException;
 import org.jboss.soa.esb.UnmarshalException;
 import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.addressing.PortReference;
 import org.jboss.soa.esb.addressing.XMLUtil;
+import org.jboss.soa.esb.addressing.PortReference.Extension;
 import org.jboss.soa.esb.addressing.eprs.*;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -41,6 +43,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.StringWriter;
+import java.util.List;
 
 public class EPRHelper
 {
@@ -342,7 +345,7 @@
 			else if (eprType.equals(FileEpr.type().toString()))
 				return new FileEpr(epr);
             else if (eprType.equals(LogicalEPR.type().toString()))
-                return new LogicalEPR(epr.getAddr());
+                return new LogicalEPR(epr);
 			else
 				return epr;
 		} else {
@@ -402,7 +405,7 @@
 			else if (eprType.equals(FileEpr.type().toString()))
 				return new FileEpr(epr, header);
             else if (eprType.equals(LogicalEPR.type().toString()))
-                return new LogicalEPR(epr.getAddr());
+                return new LogicalEPR(epr, header);
 			else
 				return epr;
 		} else {
@@ -410,4 +413,29 @@
 		}
 	}
 
+    /**
+     * Create a copy of the EPR, including the specified extensions.
+     * @param epr The current EPR.
+     * @param extensions The extensions to add.
+     * @return The EPR copy.
+     */
+    public static EPR copyEPR(final EPR epr, final List<Extension> extensions)
+    {
+        final EPR copyEPR = new EPR(epr.getAddr().copy()) ;
+        final PortReference addr = copyEPR.getAddr() ;
+        if (extensions != null)
+        {
+            for(Extension extension: extensions)
+            {
+                if (!(EPR_TYPE.equals(extension.getTag()) &&
+                    XMLUtil.JBOSSESB_NAMESPACE_URI.equals(extension.getURI()) &&
+                    XMLUtil.JBOSSESB_PREFIX.equals(extension.getPrefix())))
+                {
+                    addr.addExtension(extension) ;
+                }
+            }
+        }
+        return copyEPR ;
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/addressing/PortReference.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/addressing/PortReference.java	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/addressing/PortReference.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -107,6 +107,11 @@
 		_extensions.add(new Extension(tag, prefix, uri, value, parent));
 	}
 
+        public void addExtensions(final List<Extension> extensions)
+        {
+            _extensions.addAll(extensions);
+        }
+
 	// placeholders only
 
 	public void addPortType(String qName)
@@ -142,6 +147,11 @@
 		return _extensions.iterator();
 	}
 
+        public List<Extension> getAllExtensions()
+        {
+                return _extensions;
+        }
+
 	public void clearExtensions()
 	{
 		_extensions.clear();
@@ -162,8 +172,9 @@
 			 * But should be ok here because the invariants are known and field-wise
 			 * copying should therefore be safe.
 			 */
-			
-			return (PortReference) clone();
+			final PortReference clone = (PortReference)clone() ;
+			clone._extensions = new LinkedList<Extension>(_extensions) ;
+			return clone;
 		}
 		catch (Exception ex)
 		{

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/LogicalEPR.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/LogicalEPR.java	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/LogicalEPR.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -25,6 +25,7 @@
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.PortReference;
 import org.jboss.soa.esb.client.ServiceInvoker;
+import org.w3c.dom.Element;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -47,14 +48,22 @@
     }
 
     public LogicalEPR(PortReference addr) {
-        this(URI.create(((PortReference)AssertArgument.isNotNull(addr, "addr")).getAddress()));
+    	this(new EPR(addr)) ;
     }
 
     public LogicalEPR(URI uri) {
-        super((URI)AssertArgument.isNotNull(uri, "uri"));
-        assertValidLogicalURI(uri);
+    	this(new EPR(uri)) ;
     }
 
+    public LogicalEPR(final EPR epr) {
+        super(epr);
+        assertValidLogicalURI(URI.create(((PortReference)AssertArgument.isNotNull(epr.getAddr(), "addr")).getAddress()));
+    }
+
+    public LogicalEPR(final EPR epr, final Element header) {
+        this(epr);
+    }
+
     public LogicalEPR(String serviceCategory, String serviceName) {
         super(toLogicalURI(serviceCategory, serviceName));
     }
@@ -86,7 +95,7 @@
 
     public ServiceInvoker getServiceInvoker() throws MessageDeliverException {
         if(serviceInvoker == null) {
-            serviceInvoker = new ServiceInvoker(toService());
+            serviceInvoker = new ServiceInvoker(toService(), getAddr().getAllExtensions());
         }
         return serviceInvoker;
     }

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -30,6 +30,7 @@
 import org.jboss.soa.esb.Service;
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.MalformedEPRException;
+import org.jboss.soa.esb.addressing.PortReference;
 import org.jboss.soa.esb.addressing.util.DefaultReplyTo;
 import org.jboss.soa.esb.common.Configuration;
 import org.jboss.soa.esb.couriers.Courier;
@@ -72,11 +73,15 @@
     /**
      * The target service.
      */
-    private Service service;
+    private final Service service;
     /**
+     * The list of any extensions to be added to the target address.
+     */
+    private final List<PortReference.Extension> extensions ;
+    /**
      * Load balancer.
      */
-    private LoadBalancePolicy loadBalancer;
+    private final LoadBalancePolicy loadBalancer;
     /**
      * Cluster info.
      */
@@ -104,8 +109,20 @@
      * @throws MessageDeliverException Failed to deliver message to endpoint.
      */
     public ServiceInvoker(Service service) throws MessageDeliverException {
+        this(service, null) ;
+    }
+    
+    /**
+     * Public constructor.
+     *
+     * @param service The Service to which this instance will deliver messages.
+     * @param extensions The extensions to be added to the target service.
+     * @throws MessageDeliverException Failed to deliver message to endpoint.
+     */
+    public ServiceInvoker(final Service service, final List<PortReference.Extension> extensions) throws MessageDeliverException {
         AssertArgument.isNotNull(service, "service");
         this.service = service;
+        this.extensions = extensions ;
         String lbClass = Configuration.getLoadBalancerPolicy();
         registryCacheLife = Long.valueOf(Configuration.getRegistryCacheLife());
         try {
@@ -399,19 +416,28 @@
         private Message attemptDelivery(Message message, EPR epr) throws FaultMessageException, MalformedEPRException {
             TwoWayCourier courier = null;
 
+            final EPR targetEPR ;
+            if ((extensions != null) && (extensions.size() > 0))
+            {
+                targetEPR = EPRHelper.copyEPR(epr, extensions) ;
+            }
+            else
+            {
+                targetEPR = epr ;
+            }
             // Get a courier for the EPR...
             try {
-                courier = getCourier(epr);
+                courier = getCourier(targetEPR);
             } catch (CourierException e) {
-                logger.debug("Courier lookup failed for EPR [" + epr + "] for Service [" + service + "] and Message ["+message.getHeader()+"].", e);
+                logger.debug("Courier lookup failed for EPR [" + targetEPR + "] for Service [" + service + "] and Message ["+message.getHeader()+"].", e);
             } catch (MalformedEPRException e) {
             	// probably an ESB-unaware EPR in the registry!!
             	
-                logger.info("Badly formed EPR [" + epr + "] for Service [" + service + "] and Message ["+message.getHeader()+"]." + e.getMessage());
+                logger.info("Badly formed EPR [" + targetEPR + "] for Service [" + service + "] and Message ["+message.getHeader()+"]." + e.getMessage());
                 
                 throw e;
             } catch (Throwable t) {
-                logger.warn("Unexpected exception during Courier lookup for EPR [" + epr + "] for Service [" + service + "] and Message ["+message.getHeader()+"].", t);
+                logger.warn("Unexpected exception during Courier lookup for EPR [" + targetEPR + "] for Service [" + service + "] and Message ["+message.getHeader()+"].", t);
             }
 
             // Try delivering the message using the courier we just looked up....
@@ -424,14 +450,14 @@
                 try {
                     EPR replyToEPR = message.getHeader().getCall().getReplyTo();
 
-                    message.getHeader().getCall().setTo(epr);
+                    message.getHeader().getCall().setTo(targetEPR);
 
                     if (synchronous) {
                         if (replyToEPR == null)
-                            replyToEPR = getReplyToAddress(epr);
+                            replyToEPR = getReplyToAddress(targetEPR);
 
                         if (replyToEPR == null) {
-                            logger.debug("Not using epr [" + epr + "] for Service [" + service + "] and Message ["+message.getHeader()+"]. No reply-to address available for synchronous response.");
+                            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);
@@ -451,14 +477,14 @@
                 } catch (FaultMessageException e) {
                     throw e;
                 } catch (CourierException e) {
-                    logger.debug("Badly formed EPR [" + epr + "] for Service [" + service + "] and Message ["+message.getHeader()+"]. " + e.getMessage());
+                    logger.debug("Badly formed EPR [" + targetEPR + "] for Service [" + service + "] and Message ["+message.getHeader()+"]. " + e.getMessage());
                 } catch (MalformedEPRException e) {
                     // Hmmmm???... Can this really happen?  The Courier has already been created.  Haven't we already validated the EPR during the Courier lookup (above)??
-                    logger.warn("Unexpected error.  Badly formed EPR [" + epr + "] for Service [" + service + "]. But the EPR has already been validated!!");
+                    logger.warn("Unexpected error.  Badly formed EPR [" + targetEPR + "] for Service [" + service + "]. But the EPR has already been validated!!");
                     
                     throw e;
                 } catch (Throwable t) {
-                    logger.warn("Unexpected exception during attempted message delivery over Courier for EPR [" + epr + "] for Service [" + service + "] and Message ["+message.getHeader()+"].", t);
+                    logger.warn("Unexpected exception during attempted message delivery over Courier for EPR [" + targetEPR + "] for Service [" + service + "] and Message ["+message.getHeader()+"].", t);
                 } finally {
                     // TODO: So does this mean that Couriers are stateful?  If so, do we need to synchronize on using them??
                     CourierUtil.cleanCourier(courier);

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/LogicalEPRUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/LogicalEPRUnitTest.java	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/LogicalEPRUnitTest.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -67,7 +67,17 @@
         assertEquals("logical:My%20/%20Category#My%20/%20Name", epr.getAddr().getAddress());
         assertEquals("My / Category", epr.toService().getCategory());
         assertEquals("My / Name", epr.toService().getName());
+        
+        epr = new LogicalEPR(new EPR(URI.create("logical:My%20/%20Category#My%20/%20Name")));
+        assertEquals("logical:My%20/%20Category#My%20/%20Name", epr.getAddr().getAddress());
+        assertEquals("My / Category", epr.toService().getCategory());
+        assertEquals("My / Name", epr.toService().getName());
 
+        epr = new LogicalEPR(new EPR(new PortReference("logical:My%20/%20Category#My%20/%20Name")));
+        assertEquals("logical:My%20/%20Category#My%20/%20Name", epr.getAddr().getAddress());
+        assertEquals("My / Category", epr.toService().getCategory());
+        assertEquals("My / Name", epr.toService().getName());
+
         epr = new LogicalEPR();
         epr.setAddr(new PortReference("logical:My%20/%20Category#My%20/%20Name"));
         assertEquals("logical:My%20/%20Category#My%20/%20Name", epr.getAddr().getAddress());
@@ -97,6 +107,20 @@
         }
 
         try {
+            new LogicalEPR(new EPR(URI.create("xxxx:a#b")));
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            assertEquals("'xxxx:a#b' is not a valid URI for a Logical EPR - URI scheme must be 'logical'.", e.getMessage());
+        }
+
+        try {
+            new LogicalEPR(new EPR(new PortReference("logical://a#b")));
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            assertEquals("'logical://a#b' is not a valid URI for a Logical EPR - URI must be opaque.", e.getMessage());
+        }
+
+        try {
             LogicalEPR epr = new LogicalEPR();
             epr.setAddr(new PortReference("logical:a"));
             fail("Expected IllegalArgumentException");
@@ -114,29 +138,23 @@
     }
 
     public void test_Serialize_Deserialize()
+        throws Exception
     {
         Message msg = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
 
-        try
-        {
-            EPR epr = new LogicalEPR(new PortReference("logical:a#b"));
+        EPR epr = new LogicalEPR(new PortReference("logical:a#b"));
 
-            msg.getHeader().getCall().setTo(epr);
+        msg.getHeader().getCall().setTo(epr);
 
-            final String xmlRepresentation = XMLMessageUnitTest.msgToXML((MessageImpl)msg) ;
+        final String xmlRepresentation = XMLMessageUnitTest.msgToXML((MessageImpl)msg) ;
 
-            final MessageImpl nImpl = XMLMessageUnitTest.msgFromXML(xmlRepresentation) ;
+        final MessageImpl nImpl = XMLMessageUnitTest.msgFromXML(xmlRepresentation) ;
 
-            EPR theEpr = nImpl.getHeader().getCall().getTo();
+        EPR theEpr = nImpl.getHeader().getCall().getTo();
 
-            assertTrue("Expected a Logical EPR", theEpr instanceof LogicalEPR);
+        assertTrue("Expected a Logical EPR", theEpr instanceof LogicalEPR);
 
-            assertEquals("logical:a#b", theEpr.getAddr().getAddress());
-        }
-        catch (Exception ex)
-        {
-            fail(ex.toString());
-        }
+        assertEquals("logical:a#b", theEpr.getAddr().getAddress());
     }
 
     private MockCourier courier1;

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/addressing/tests/CallUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/addressing/tests/CallUnitTest.java	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/addressing/tests/CallUnitTest.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -23,11 +23,18 @@
 package org.jboss.soa.esb.addressing.tests;
 
 import java.net.URI;
+import java.net.URISyntaxException;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
 import junit.framework.TestCase;
 
+import org.jboss.internal.soa.esb.addressing.helpers.CallHelper;
 import org.jboss.soa.esb.addressing.Call;
 import org.jboss.soa.esb.addressing.EPR;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 /**
  * Unit tests for the Class class.
@@ -192,4 +199,46 @@
 		}
 	}
 	
+	public void testSerialisation()
+	    throws Exception
+	{
+	    final Call call = new Call() ;
+	    call.setAction(new URI("urn:action")) ;
+            call.setFaultTo(getEPR("urn:faultTo", "faultToTag", "faultToValue")) ;
+	    call.setFrom(getEPR("urn:from", "fromTag", "fromValue")) ;
+            call.setMessageID(new URI("urn:messageID")) ;
+	    call.setRelatesTo(new URI("urn:relatesTo")) ;
+	    call.setReplyTo(getEPR("urn:replyTo", "replyToTag", "replyToValue")) ;
+            call.setTo(getEPR("urn:to", "toTag", "toValue")) ;
+            
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            
+            factory.setNamespaceAware(true);
+
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document doc = builder.newDocument();
+            Element header = doc.createElement("HEADER"); 
+            
+            doc.appendChild(header);
+            
+            CallHelper.toXML(call, doc, header);
+            
+            final Call result = CallHelper.fromXML(header) ;
+            
+            assertEquals("Action URI", call.getAction(), result.getAction()) ;
+            assertEquals("FaultTo EPR", call.getFaultTo(), result.getFaultTo()) ;
+            assertEquals("From EPR", call.getFrom(), result.getFrom()) ;
+            assertEquals("MessageID URI", call.getMessageID(), result.getMessageID()) ;
+            assertEquals("RelatesTo URI", call.getRelatesTo(), result.getRelatesTo()) ;
+            assertEquals("ReplyTo URI", call.getReplyTo(), result.getReplyTo()) ;
+            assertEquals("To URI", call.getTo(), result.getTo()) ;
+	}
+	
+	private EPR getEPR(final String uri, final String tag, final String value)
+	    throws URISyntaxException
+	{
+            final EPR epr = new EPR(new URI(uri)) ;
+            epr.getAddr().addExtension(tag, value) ;
+            return epr ;
+	}
 }

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/LogicalEPRUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/LogicalEPRUnitTest.java	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/LogicalEPRUnitTest.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -21,6 +21,9 @@
 
 import junit.framework.Test;
 import org.jboss.soa.esb.TestUtils;
+import org.jboss.soa.esb.addressing.eprs.LogicalEPR;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageFactory;
 import org.jboss.soa.esb.testutils.FileUtil;
 import org.jboss.soa.esb.testutils.JMSUtil;
 import org.jboss.soa.esb.util.DeploymentArchive;
@@ -63,6 +66,25 @@
         assertEquals("org.jboss.soa.esb.actions.ActionProcessingException: Service2Action fault", actualOutput);
     }
 
+    public void test_logical_extension() throws Exception {
+        final LogicalEPR logicalEPR = new LogicalEPR("MyServiceCategory", "MyService4") ;
+        final String tag = "TestTag" ;
+        final String prefix = "TestPrefix" ;
+        final String value = "TestValue" ;
+        
+        logicalEPR.getAddr().addExtension(tag, prefix, Service4Action.TEST_URI, value) ;
+        
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        message.getBody().add("Incoming Test Payload") ;
+        logicalEPR.getServiceInvoker().deliverAsync(message) ;
+        
+        assertTrue("Test output file '" + TEST_OUTPUT_FILE + "' not dropped.", TestUtils.waitForFile(TEST_OUTPUT_FILE.getAbsolutePath()));
+
+        final String actualOutput = FileUtil.readStream(new FileInputStream(TEST_OUTPUT_FILE));
+        final String expectedOutput = "Prefix " + prefix + " Tag " + tag + " value " + value ;
+        assertEquals(expectedOutput, actualOutput);
+    }
+
     public static Test suite() throws Exception {
         DeploymentArchive deployment = new DeploymentArchive("LogicalEPRUnitTest.esb");
 
@@ -73,6 +95,7 @@
         deployment.addEntry(Service2Action.class);
         deployment.addEntry(Service3Action1.class);
         deployment.addEntry(Service3Action2.class);
+        deployment.addEntry(Service4Action.class);
 
         deployment.create();
 

Added: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/Service4Action.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/Service4Action.java	                        (rev 0)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/Service4Action.java	2007-12-05 18:01:06 UTC (rev 17042)
@@ -0,0 +1,70 @@
+/*
+ * 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.epr;
+
+import java.util.Iterator;
+
+import org.jboss.soa.esb.actions.AbstractActionPipelineProcessor;
+import org.jboss.soa.esb.actions.ActionProcessingException;
+import org.jboss.soa.esb.addressing.Call;
+import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.addressing.PortReference.Extension;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
+import org.jboss.soa.esb.message.Message;
+
+/**
+ * @author <a href="mailto:Kevin.Conner at jboss.com">Kevin Conner</a>
+ */
+public class Service4Action extends AbstractActionPipelineProcessor
+{
+    public static final String TEST_URI = "http://labs.jboss.org/jbossesb/testing/test-uri" ;
+    
+    public Service4Action(final ConfigTree config)
+        throws MessageDeliverException
+    {
+    }
+
+    public Message process(final Message message)
+        throws ActionProcessingException
+    {
+        final Call call = message.getHeader().getCall() ;
+        final EPR toEPR = call.getTo() ;
+        final Iterator<Extension> extensions = toEPR.getAddr().getExtensions() ;
+        if (extensions.hasNext())
+        {
+            final StringBuilder sb = new StringBuilder() ;
+            do
+            {
+                final Extension extension = extensions.next() ;
+                if (TEST_URI.equals(extension.getURI()))
+                {
+                    sb.append("Prefix " + extension.getPrefix()) ;
+                    sb.append(" Tag " + extension.getTag()) ;
+                    sb.append(" value " + extension.getValue()) ;
+                }
+            }
+            while(extensions.hasNext()) ;
+            message.getBody().add(sb.toString()) ;
+        }
+
+        return message;
+    }
+}
\ No newline at end of file


Property changes on: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/Service4Action.java
___________________________________________________________________
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/deployment.xml
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/deployment.xml	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/deployment.xml	2007-12-05 18:01:06 UTC (rev 17042)
@@ -3,4 +3,5 @@
     <depends>jboss.esb.qa.junit.destination:service=Queue,name=LogicalEPRUnitTest_service1</depends>
     <depends>jboss.esb.qa.junit.destination:service=Queue,name=LogicalEPRUnitTest_service2</depends>
     <depends>jboss.esb.qa.junit.destination:service=Queue,name=LogicalEPRUnitTest_service3</depends>
+    <depends>jboss.esb.qa.junit.destination:service=Queue,name=LogicalEPRUnitTest_service4</depends>
 </jbossesb-deployment>

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/jboss-esb.xml
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/jboss-esb.xml	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/jboss-esb.xml	2007-12-05 18:01:06 UTC (rev 17042)
@@ -20,6 +20,9 @@
             <jms-bus busid="service3">
                 <jms-message-filter dest-type="QUEUE" dest-name="queue/LogicalEPRUnitTest_service3"/>
             </jms-bus>
+            <jms-bus busid="service4">
+                <jms-message-filter dest-type="QUEUE" dest-name="queue/LogicalEPRUnitTest_service4"/>
+            </jms-bus>
         </jms-provider>
     </providers>
 
@@ -71,6 +74,18 @@
             </actions>
         </service>
 
+        <service category="MyServiceCategory" name="MyService4" description="Service 4">
+            <listeners>
+                <jms-listener name="JMS-ESBListener" busidref="service4"/>
+            </listeners>
+            <actions>
+                <action name="Service4Action" class="org.jboss.soa.esb.epr.Service4Action" />
+                <action name="testStore" class="org.jboss.soa.esb.actions.StoreMessageToFile">
+                    <property name="filename" value="LogicalEPRUnitTest.log" />
+                    <property name="raw" value="true"/>
+                </action>
+            </actions>
+        </service>
     </services>
 
 </jbossesb>

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/jms-service.xml
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/jms-service.xml	2007-12-05 17:59:47 UTC (rev 17041)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/qa/junit/src/org/jboss/soa/esb/epr/jms-service.xml	2007-12-05 18:01:06 UTC (rev 17042)
@@ -29,4 +29,11 @@
         <depends>jboss.messaging:service=PostOffice</depends>
     </mbean>
 
+    <mbean code="org.jboss.jms.server.destination.QueueService"
+           name="jboss.esb.qa.junit.destination:service=Queue,name=LogicalEPRUnitTest_service4"
+           xmbean-dd="xmdesc/Queue-xmbean.xml">
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+
 </server>
\ No newline at end of file




More information about the jboss-svn-commits mailing list