[jboss-svn-commits] JBL Code SVN: r19610 - in labs/jbossesb/trunk/product/rosetta: src/org/jboss/internal/soa/esb/message/format/xml and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 17 17:05:21 EDT 2008


Author: mark.little at jboss.com
Date: 2008-04-17 17:05:21 -0400 (Thu, 17 Apr 2008)
New Revision: 19610

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/MessageImpl.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/MessageImpl.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/PortReference.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/Message.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/format/tests/ExampleMessageImpl.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/MessageUnitTest.java
Log:
http://jira.jboss.com/jira/browse/JBESB-1376

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/MessageImpl.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/MessageImpl.java	2008-04-17 20:59:57 UTC (rev 19609)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/MessageImpl.java	2008-04-17 21:05:21 UTC (rev 19610)
@@ -20,10 +20,14 @@
  */
 package org.jboss.internal.soa.esb.message.format.serialized;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
 import java.net.URI;
 
 import org.jboss.soa.esb.message.Attachment;
@@ -133,6 +137,33 @@
 	return _theProperties;
     }
 
+    /**
+     * Return a duplicate of this instance.
+     * 
+     * Just serialize and then deserialize. Not the most efficient but
+     * a reasonable default.
+     */
+    
+    public Message copy () throws IOException
+    {
+        ByteArrayOutputStream bostream = new ByteArrayOutputStream();
+        ObjectOutputStream output = new ObjectOutputStream(bostream);
+        
+        output.writeObject(this);
+        
+        ByteArrayInputStream bistream = new ByteArrayInputStream(bostream.toByteArray());
+        ObjectInputStream input = new ObjectInputStream(bistream);
+        
+        try
+        {
+            return (MessageImpl) input.readObject();
+        }
+        catch (Exception ex)
+        {
+            throw new IOException(ex.toString());
+        }
+    }
+    
     public String toString ()
     {
 	return "message: [ JAVA_SERIALIZED ]\n" + _theHeader.toString()

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/MessageImpl.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/MessageImpl.java	2008-04-17 20:59:57 UTC (rev 19609)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/MessageImpl.java	2008-04-17 21:05:21 UTC (rev 19610)
@@ -20,6 +20,8 @@
  */
 package org.jboss.internal.soa.esb.message.format.xml;
 
+import java.io.IOException;
+import java.io.Serializable;
 import java.net.URI;
 
 import javax.xml.namespace.QName;
@@ -39,6 +41,7 @@
 import org.jboss.soa.esb.message.body.content.Payload;
 import org.jboss.soa.esb.message.format.MessageFactory;
 import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.soa.esb.util.Util;
 
 /**
  * This is the basic internal core message abstraction. A message consists of
@@ -163,6 +166,25 @@
 		return _theProperties;
 	}
 
+	/**
+	 * Return a duplicate of this instance. Just serialize and then
+	 * deserialize.
+	 */
+
+    public Message copy () throws IOException
+    {
+        try
+        {
+            Serializable state = Util.serialize(this);
+            
+            return (MessageImpl) Util.deserialize(state);
+        }
+        catch (Exception ex)
+        {
+            throw new IOException(ex.toString());
+        }
+    }
+
 	public String toString()
 	{
 		return "message: [ JBOSS_XML ]\n" + _theHeader.toString() + "\n"

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/PortReference.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/PortReference.java	2008-04-17 20:59:57 UTC (rev 19609)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/PortReference.java	2008-04-17 21:05:21 UTC (rev 19610)
@@ -177,7 +177,7 @@
 		try
 		{
 			/*
-			 * In general, try ry to avoid clone (http://www.artima.com/intv/blochP.html)
+			 * In general, try to avoid clone (http://www.artima.com/intv/blochP.html)
 			 * But should be ok here because the invariants are known and field-wise
 			 * copying should therefore be safe.
 			 */

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/Message.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/Message.java	2008-04-17 20:59:57 UTC (rev 19609)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/Message.java	2008-04-17 21:05:21 UTC (rev 19610)
@@ -21,7 +21,7 @@
  * @author mark.little at jboss.com
  */
 
-import java.io.Serializable;
+import java.io.IOException;
 import java.net.URI;
 
 /**
@@ -90,4 +90,10 @@
 	
 	public Properties getProperties ();
 
+        /**
+         * Return a duplicate of this instance. Just serialize and then
+         * deserialize.
+         */
+
+    public Message copy () throws IOException;
 }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/format/tests/ExampleMessageImpl.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/format/tests/ExampleMessageImpl.java	2008-04-17 20:59:57 UTC (rev 19609)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/format/tests/ExampleMessageImpl.java	2008-04-17 21:05:21 UTC (rev 19610)
@@ -1,5 +1,6 @@
 package org.jboss.soa.esb.message.format.tests;
 
+import java.io.IOException;
 import java.net.URI;
 
 import org.apache.log4j.Logger;
@@ -103,6 +104,16 @@
 		return null;
 	}
 	
+        /**
+         * Return a duplicate of this instance. Just serialize and then
+         * deserialize.
+         */
+
+    public Message copy () throws IOException
+    {
+        return this;
+    }
+    
 	/**
 	 * @return the type of this message.
 	 */

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/MessageUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/MessageUnitTest.java	2008-04-17 20:59:57 UTC (rev 19609)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/MessageUnitTest.java	2008-04-17 21:05:21 UTC (rev 19610)
@@ -102,7 +102,7 @@
 	
 	public void testXMLMessageToString () throws Exception
 	{
-		Message msg = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
+		Message msg = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
 		
 		msg.getHeader().getCall().setAction(new URI("urn:foo"));
 		msg.getHeader().getCall().setFrom(new HTTPEpr("http://foo.bar"));
@@ -122,5 +122,87 @@
 		
 		System.out.println("Message is: "+msg.toString());
 	}
+        
+        public void testSerializedMessageCopy () throws Exception
+        {
+            Message msg = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
+                
+                msg.getHeader().getCall().setAction(new URI("urn:foo"));
+                msg.getHeader().getCall().setFrom(new HTTPEpr("http://foo.bar"));
+                
+                msg.getBody().add("foobar");
+                msg.getBody().add("qwerty", "uiop");
+                msg.getBody().add(BytesBody.BYTES_LOCATION, "hello world".getBytes());
+                
+                msg.getFault().setCode(new URI("urn:because"));
+                msg.getFault().setReason("something bad happened");
+                
+                msg.getAttachment().addItem("should be unnamed");
+                msg.getAttachment().put("name", "property");
+                
+                msg.getProperties().setProperty("name", "value");
+                msg.getProperties().setProperty("another name", "another value");
+                
+                Message theCopy = msg.copy();
+                
+                if (theCopy == msg)
+                    fail();
+                
+                if (!theCopy.getHeader().getCall().getAction().equals(msg.getHeader().getCall().getAction()))
+                    fail();
+                
+                if (!theCopy.getBody().get().equals(msg.getBody().get()))
+                    fail();
+                
+                if (!theCopy.getFault().getCode().equals(msg.getFault().getCode()))
+                    fail();
+                
+                if (!theCopy.getAttachment().get("name").equals(msg.getAttachment().get("name")))
+                    fail();
+                
+                if (!theCopy.getProperties().getProperty("name").equals(msg.getProperties().getProperty("name")))
+                    fail();
+        }
+        
+        public void testXMLMessageCopy () throws Exception
+        {
+            Message msg = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
+                
+                msg.getHeader().getCall().setAction(new URI("urn:foo"));
+                msg.getHeader().getCall().setFrom(new HTTPEpr("http://foo.bar"));
+                
+                msg.getBody().add("foobar");
+                msg.getBody().add("qwerty", "uiop");
+                msg.getBody().add(BytesBody.BYTES_LOCATION, "hello world".getBytes());
+                
+                msg.getFault().setCode(new URI("urn:because"));
+                msg.getFault().setReason("something bad happened");
+                
+                msg.getAttachment().addItem("should be unnamed");
+                msg.getAttachment().put("name", "property");
+                
+                msg.getProperties().setProperty("name", "value");
+                msg.getProperties().setProperty("another name", "another value");
+                
+                Message theCopy = msg.copy();
+                
+                if (theCopy == msg)
+                    fail();
+                
+                if (!theCopy.getHeader().getCall().getAction().equals(msg.getHeader().getCall().getAction()))
+                    fail();
+                
+                if (!theCopy.getBody().get().equals(msg.getBody().get()))
+                    fail();
+                
+                if (!theCopy.getFault().getCode().equals(msg.getFault().getCode()))
+                    fail();
+                
+                if (!theCopy.getAttachment().get("name").equals(msg.getAttachment().get("name")))
+                    fail();
+                
+                if (!theCopy.getProperties().getProperty("name").equals(msg.getProperties().getProperty("name")))
+                    fail();
+        }
 	
 }




More information about the jboss-svn-commits mailing list