[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