You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ve...@apache.org on 2009/07/20 18:18:39 UTC
svn commit: r795898 -
/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/AbstractTestCase.java
Author: veithen
Date: Mon Jul 20 16:18:39 2009
New Revision: 795898
URL: http://svn.apache.org/viewvc?rev=795898&view=rev
Log:
Improved the ADB test suite to systematically test MTOM.
Modified:
webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/AbstractTestCase.java
Modified: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/AbstractTestCase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/AbstractTestCase.java?rev=795898&r1=795897&r2=795898&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/AbstractTestCase.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/AbstractTestCase.java Mon Jul 20 16:18:39 2009
@@ -24,6 +24,7 @@
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
@@ -44,10 +45,14 @@
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
+import org.apache.axiom.attachments.Attachments;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMOutputFormat;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder;
import org.apache.axis2.databinding.ADBBean;
import org.apache.axis2.databinding.ADBException;
import org.apache.axis2.databinding.types.HexBinary;
@@ -149,6 +154,33 @@
}
}
+ private static int countDataHandlers(Object bean) throws Exception {
+ int count = 0;
+ for (PropertyDescriptor desc : getBeanInfo(bean.getClass()).getPropertyDescriptors()) {
+ Object value = desc.getReadMethod().invoke(bean);
+ if (value != null) {
+ if (value instanceof DataHandler) {
+ count++;
+ } else if (value.getClass().isArray()) {
+ int length = Array.getLength(value);
+ for (int i=0; i<length; i++) {
+ Object item = Array.get(value, i);
+ if (item != null) {
+ if (item instanceof DataHandler) {
+ count++;
+ } else if (isADBBean(item.getClass())) {
+ count += countDataHandlers(item);
+ }
+ }
+ }
+ } else if (isADBBean(value.getClass())) {
+ count += countDataHandlers(value);
+ }
+ }
+ }
+ return count;
+ }
+
private static void assertDataHandlerEquals(DataHandler expected, DataHandler actual) {
try {
InputStream in1 = expected.getInputStream();
@@ -247,15 +279,17 @@
}
public static void testSerializeDeserialize(ADBBean bean, ADBBean expectedResult, boolean testGetPullParser) throws Exception {
- testSerializeDeserialize1(bean, expectedResult);
- testSerializeDeserialize2(bean, expectedResult);
+ testSerializeDeserializeUsingStAX(bean, expectedResult);
+ testSerializeDeserializeUsingOMStAXWrapper(bean, expectedResult);
if (testGetPullParser) {
// TODO: this badly fails for many of the test cases => there are still issues to solve!!!
- testSerializeDeserialize3(bean, expectedResult);
+ testSerializeDeserializeUsingPullParser(bean, expectedResult);
}
- testSerializeDeserialize4(bean, expectedResult);
+ testSerializeDeserializeWrapped(bean, expectedResult);
+ testSerializeDeserializeUsingMTOM(bean, expectedResult, true);
+ testSerializeDeserializeUsingMTOM(bean, expectedResult, false);
try {
Class.forName("helper." + bean.getClass().getName());
@@ -267,16 +301,18 @@
Object helperModeBean = toHelperModeBean(bean);
Object helperModeExpectedResult = toHelperModeBean(expectedResult);
- testSerializeDeserialize1(helperModeBean, helperModeExpectedResult);
- testSerializeDeserialize2(helperModeBean, helperModeExpectedResult);
- testSerializeDeserialize4(helperModeBean, helperModeExpectedResult);
+ testSerializeDeserializeUsingStAX(helperModeBean, helperModeExpectedResult);
+ testSerializeDeserializeUsingOMStAXWrapper(helperModeBean, helperModeExpectedResult);
+ testSerializeDeserializeWrapped(helperModeBean, helperModeExpectedResult);
+ testSerializeDeserializeUsingMTOM(helperModeBean, helperModeExpectedResult, true);
+ testSerializeDeserializeUsingMTOM(helperModeBean, helperModeExpectedResult, false);
}
// Deserialization approach 1: use an XMLStreamReader produced by the StAX parser.
- private static void testSerializeDeserialize1(Object bean, Object expectedResult) throws Exception {
+ private static void testSerializeDeserializeUsingStAX(Object bean, Object expectedResult) throws Exception {
OMElement omElement = ADBBeanUtil.getOMElement(bean);
String omElementString = omElement.toStringWithConsume();
- System.out.println(omElementString);
+// System.out.println(omElementString);
assertBeanEquals(expectedResult, ADBBeanUtil.parse(bean.getClass(),
StAXUtils.createXMLStreamReader(new StringReader(omElementString))));
}
@@ -284,7 +320,7 @@
// Deserialization approach 2: use an Axiom tree with caching. In this case the
// XMLStreamReader implementation is OMStAXWrapper and we test interoperability
// between ADB and Axiom's OMStAXWrapper.
- private static void testSerializeDeserialize2(Object bean, Object expectedResult) throws Exception {
+ private static void testSerializeDeserializeUsingOMStAXWrapper(Object bean, Object expectedResult) throws Exception {
OMElement omElement = ADBBeanUtil.getOMElement(bean);
String omElementString = omElement.toStringWithConsume();
OMElement omElement2 = new StAXOMBuilder(StAXUtils.createXMLStreamReader(
@@ -293,14 +329,14 @@
}
// Deserialization approach 3: use the pull parser produced by ADB.
- private static void testSerializeDeserialize3(Object bean, Object expectedResult) throws Exception {
+ private static void testSerializeDeserializeUsingPullParser(Object bean, Object expectedResult) throws Exception {
assertBeanEquals(expectedResult, ADBBeanUtil.parse(bean.getClass(), ADBBeanUtil.getPullParser(bean)));
}
// Approach 4: Serialize the bean as the child of an element that declares a default namespace.
// If ADB behaves correctly, this should not have any impact. A failure here may be an indication
// of an incorrect usage of XMLStreamWriter#writeStartElement(String).
- private static void testSerializeDeserialize4(Object bean, Object expectedResult) throws Exception {
+ private static void testSerializeDeserializeWrapped(Object bean, Object expectedResult) throws Exception {
StringWriter sw = new StringWriter();
MTOMAwareXMLStreamWriter writer = new MTOMAwareXMLSerializer(StAXUtils.createXMLStreamWriter(sw));
writer.writeStartElement("", "root", "urn:test");
@@ -312,6 +348,22 @@
assertBeanEquals(expectedResult, ADBBeanUtil.parse(bean.getClass(), omElement3.getFirstElement().getXMLStreamReader()));
}
+ private static void testSerializeDeserializeUsingMTOM(Object bean, Object expectedResult, boolean cache) throws Exception {
+ SOAPEnvelope envelope = OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
+ envelope.getBody().addChild(ADBBeanUtil.getOMElement(bean));
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ OMOutputFormat format = new OMOutputFormat();
+ format.setDoOptimize(true);
+ envelope.serialize(buffer, format);
+// envelope.serialize(System.out, format);
+ String contentType = format.getContentTypeForMTOM("text/xml");
+ Attachments attachments = new Attachments(new ByteArrayInputStream(buffer.toByteArray()), contentType);
+ assertEquals(countDataHandlers(bean) + 1, attachments.getAllContentIDs().length);
+ MTOMStAXSOAPModelBuilder builder = new MTOMStAXSOAPModelBuilder(StAXUtils.createXMLStreamReader(attachments.getSOAPPartInputStream()), attachments);
+ OMElement bodyElement = builder.getSOAPEnvelope().getBody().getFirstElement();
+ assertBeanEquals(expectedResult, ADBBeanUtil.parse(bean.getClass(), cache ? bodyElement.getXMLStreamReader() : bodyElement.getXMLStreamReaderWithoutCaching()));
+ }
+
/**
* Assert that serializing the given bean should result in an {@link ADBException}.
*