You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by na...@apache.org on 2007/02/22 19:44:27 UTC
svn commit: r510618 - in /webservices/axis2/trunk/java/modules/kernel:
src/org/apache/axis2/addressing/EndpointReference.java
test/org/apache/axis2/addressing/EndpointReferenceTypeTest.java
Author: nagy
Date: Thu Feb 22 10:44:27 2007
New Revision: 510618
URL: http://svn.apache.org/viewvc?view=rev&rev=510618
Log:
Fixed EndpointReference's so that they serialize/deserialize properly.
Modified:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/EndpointReference.java
webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/EndpointReferenceTypeTest.java
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/EndpointReference.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/EndpointReference.java?view=diff&rev=510618&r1=510617&r2=510618
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/EndpointReference.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/EndpointReference.java Thu Feb 22 10:44:27 2007
@@ -23,11 +23,18 @@
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.util.StAXUtils;
import org.apache.axis2.AxisFault;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
@@ -552,5 +559,57 @@
// TODO: check the Map referenceParameters for equivalency
return true;
+ }
+
+
+ //REVIEW: The following code is rather heavyweight, because we have to build the OM tree -- it would probably be better to have two serialization/deserialization paths and therefore, for trivial EPRs, store a smaller amount of info
+
+ /**
+ * Write the EPR to the specified OutputStream. Because of potential
+ * OMElements/Attributes, we need to actually serialize the OM structures
+ * (at least in some cases.)
+ */
+ private void writeObject(java.io.ObjectOutputStream out)
+ throws IOException
+ {
+ OMElement om = EndpointReferenceHelper.toOM(OMAbstractFactory.getOMFactory(), this, new QName("urn:axis2","omepr","ser"), AddressingConstants.Final.WSA_NAMESPACE);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ try
+ {
+ om.serialize(baos);
+ }
+ catch (javax.xml.stream.XMLStreamException e)
+ {
+ throw (IOException)(new IOException("Unable to serialize the EPR")).initCause(e);
+ }
+ out.writeInt(baos.size());
+ out.write(baos.toByteArray());
+ }
+
+ /**
+ * Read the EPR to the specified InputStream.
+ */
+ private void readObject(java.io.ObjectInputStream in)
+ throws IOException, ClassNotFoundException
+ {
+ int numBytes = in.readInt();
+
+ byte[] serBytes = new byte[numBytes];
+
+ in.read(serBytes, 0, numBytes);
+ ByteArrayInputStream bais = new ByteArrayInputStream(serBytes);
+ try
+ {
+ XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(bais);
+ StAXOMBuilder builder = new StAXOMBuilder(xmlReader);
+ OMElement om = builder.getDocumentElement();
+
+ EndpointReferenceHelper.fromOM(this, om, AddressingConstants.Final.WSA_NAMESPACE);
+ }
+ catch (javax.xml.stream.XMLStreamException e)
+ {
+ throw (IOException)(new IOException("Unable to deserialize the EPR")).initCause(e);
+ }
}
}
Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/EndpointReferenceTypeTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/EndpointReferenceTypeTest.java?view=diff&rev=510618&r1=510617&r2=510618
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/EndpointReferenceTypeTest.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/EndpointReferenceTypeTest.java Thu Feb 22 10:44:27 2007
@@ -27,6 +27,10 @@
import javax.xml.namespace.QName;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Map;
@@ -98,5 +102,86 @@
// EndpointReference with 2005/08 None address
EndpointReference epr200508none = new EndpointReference(AddressingConstants.Final.WSA_NONE_URI);
assertTrue(epr200508none.hasNoneAddress());
+ }
+
+
+ public void testSerializationDeserialization()
+ throws Exception
+ {
+ String address = "http://ws.apache.org/axis2";
+ EndpointReference epr = new EndpointReference(address);
+
+ OMFactory omf = OMAbstractFactory.getOMFactory();
+ OMNamespace ns1 = omf.createOMNamespace("http://uri1","prefix1");
+ OMAttribute attr1 = omf.createOMAttribute("attr1",ns1,"attr1value");
+ OMNamespace ns2 = omf.createOMNamespace("http://uri2","prefix2");
+ OMAttribute attr2 = omf.createOMAttribute("attr2",ns2,"attr2value");
+ epr.addAttribute(attr1);
+ epr.addAttribute(attr2);
+ OMElement md1 = omf.createOMElement("md1", "http://mduri1", "md1prefix");
+ OMElement md2 = omf.createOMElement("md2", "http://mduri2", "md2prefix");
+ epr.addMetaData(md1);
+ epr.addMetaData(md2);
+ OMElement ext1 = omf.createOMElement("ext1", "http://exturi1", "ext1prefix");
+ OMElement ext2 = omf.createOMElement("ext2", "http://exturi2", "ext2prefix");
+ epr.addExtensibleElement(ext1);
+ epr.addExtensibleElement(ext2);
+ QName rp1Qname = new QName("http://rp1uri","refParm1","rp1prefix");
+ QName rp2Qname = new QName("http://rp2uri","refParm2","rp2prefix");
+ epr.addReferenceParameter(rp1Qname,"rp1");
+ epr.addReferenceParameter(rp2Qname,"rp2");
+
+ ArrayList addressAttributes = new ArrayList();
+ addressAttributes.add(attr1);
+ addressAttributes.add(attr2);
+ epr.setAddressAttributes(addressAttributes);
+
+ ArrayList metadataAttributes = new ArrayList();
+ metadataAttributes.add(attr1);
+ metadataAttributes.add(attr2);
+ epr.setMetadataAttributes(metadataAttributes);
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(epr);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ ObjectInputStream ois = new ObjectInputStream(bais);
+ EndpointReference deserializedEPR = (EndpointReference)ois.readObject();
+
+ assertEquals(epr.getAddress(),deserializedEPR.getAddress());
+ ArrayList addrAttrs = deserializedEPR.getAddressAttributes();
+ assertAttributesEqual(attr1,(OMAttribute)addrAttrs.get(0));
+ assertAttributesEqual(attr2,(OMAttribute)addrAttrs.get(1));
+
+ ArrayList attrs = deserializedEPR.getAttributes();
+ assertAttributesEqual(attr1,(OMAttribute)attrs.get(0));
+ assertAttributesEqual(attr2,(OMAttribute)attrs.get(1));
+
+ ArrayList metadata = deserializedEPR.getMetaData();
+ assertEquals(md1.toString(), metadata.get(0).toString());
+ assertEquals(md2.toString(), metadata.get(1).toString());
+ ArrayList mdAttrs = deserializedEPR.getMetadataAttributes();
+ assertAttributesEqual(attr1,(OMAttribute)mdAttrs.get(0));
+ assertAttributesEqual(attr2,(OMAttribute)mdAttrs.get(1));
+
+ ArrayList extelts = deserializedEPR.getExtensibleElements();
+ assertEquals(ext1.toString(),extelts.get(0).toString());
+ assertEquals(ext2.toString(),extelts.get(1).toString());
+
+ Map m = deserializedEPR.getAllReferenceParameters();
+ assertEquals("rp1", ((OMElement)m.get(rp1Qname)).getText());
+ assertEquals("rp2", ((OMElement)m.get(rp2Qname)).getText());
+ }
+
+ private void assertAttributesEqual(OMAttribute attribute1, OMAttribute attribute2)
+ {
+ if (!attribute1.getAttributeValue().equals(attribute2.getAttributeValue())
+ || (!attribute1.getQName().equals(attribute2.getQName())))
+ {
+ fail("expected:"+attribute1.getQName()+"="
+ +attribute1.getAttributeValue()+" but got "+attribute2.getQName()
+ +"="+attribute2.getAttributeValue());
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org