AXIOM-506: Replace TestDataSource with a Blob implementation
diff --git a/axiom-jaxb/src/test/java/org/apache/axiom/om/ds/custombuilder/CustomBuilderSupportTest.java b/axiom-jaxb/src/test/java/org/apache/axiom/om/ds/custombuilder/CustomBuilderSupportTest.java
index 4f373e1..197d77b 100644
--- a/axiom-jaxb/src/test/java/org/apache/axiom/om/ds/custombuilder/CustomBuilderSupportTest.java
+++ b/axiom-jaxb/src/test/java/org/apache/axiom/om/ds/custombuilder/CustomBuilderSupportTest.java
@@ -22,10 +22,10 @@
import java.io.OutputStream;
-import javax.activation.DataHandler;
import javax.xml.bind.JAXBContext;
import javax.xml.namespace.QName;
+import org.apache.axiom.blob.Blob;
import org.apache.axiom.blob.Blobs;
import org.apache.axiom.blob.MemoryBlob;
import org.apache.axiom.mime.MultipartBody;
@@ -36,38 +36,39 @@
import org.apache.axiom.om.OMXMLBuilderFactory;
import org.apache.axiom.om.OMXMLParserWrapper;
import org.apache.axiom.om.util.StAXParserConfiguration;
-import org.apache.axiom.testutils.activation.TestDataSource;
import org.apache.axiom.testutils.blob.RandomBlob;
+import org.apache.axiom.testutils.blob.TestBlob;
import org.apache.axiom.testutils.io.IOTestUtils;
import org.apache.axiom.util.activation.DataHandlerUtils;
import org.junit.jupiter.api.Test;
public class CustomBuilderSupportTest {
- private OMElement createTestDocument(DataHandler dh) {
+ private OMElement createTestDocument(Blob blob) {
OMFactory factory = OMAbstractFactory.getOMFactory();
OMElement document = factory.createOMElement(new QName("urn:test", "document"));
OMElement name = factory.createOMElement(new QName("name"));
name.setText("some name");
document.addChild(name);
OMElement content = factory.createOMElement(new QName("content"));
- content.addChild(factory.createOMText(DataHandlerUtils.toBlob(dh), true));
+ content.addChild(factory.createOMText(blob, true));
document.addChild(content);
return document;
}
- private void test(DataHandler dh, OMXMLParserWrapper builder, boolean same) throws Exception {
+ private void test(Blob blob, OMXMLParserWrapper builder, boolean same) throws Exception {
JAXBCustomBuilder customBuilder =
new JAXBCustomBuilder(JAXBContext.newInstance(MyDocument.class));
((CustomBuilderSupport) builder)
.registerCustomBuilder(CustomBuilder.Selector.PAYLOAD, customBuilder);
builder.getDocumentElement().build();
MyDocument myDocument = (MyDocument) customBuilder.getJaxbObject();
+ Blob actualBlob = DataHandlerUtils.toBlob(myDocument.getContent());
if (same) {
- assertThat(myDocument.getContent()).isSameAs(dh);
+ assertThat(actualBlob).isSameAs(blob);
} else {
- assertThat(myDocument.getContent()).isNotSameAs(dh);
+ assertThat(actualBlob).isNotSameAs(blob);
IOTestUtils.compareStreams(
- dh.getInputStream(),
+ blob.getInputStream(),
"expected",
myDocument.getContent().getInputStream(),
"actual");
@@ -76,36 +77,42 @@
@Test
public void testRegisterCustomBuilderForPayloadJAXBPlain() throws Exception {
- DataHandler dh = DataHandlerUtils.toDataHandler(new RandomBlob(10000));
+ Blob contentBlob = new RandomBlob(10000);
MemoryBlob blob = Blobs.createMemoryBlob();
OutputStream out = blob.getOutputStream();
- createTestDocument(dh).serialize(out);
+ createTestDocument(contentBlob).serialize(out);
out.close();
- test(dh, OMXMLBuilderFactory.createOMBuilder(blob.getInputStream()), false);
+ test(contentBlob, OMXMLBuilderFactory.createOMBuilder(blob.getInputStream()), false);
}
@Test
public void testRegisterCustomBuilderForPayloadJAXBWithDataHandlerReaderExtension()
throws Exception {
- DataHandler dh = new DataHandler(new TestDataSource('X', Integer.MAX_VALUE));
- OMElement document = createTestDocument(dh);
- test(dh, OMXMLBuilderFactory.createStAXOMBuilder(document.getXMLStreamReader()), true);
+ Blob contentBlob = new TestBlob('X', Integer.MAX_VALUE);
+ OMElement document = createTestDocument(contentBlob);
+ test(
+ contentBlob,
+ OMXMLBuilderFactory.createStAXOMBuilder(document.getXMLStreamReader()),
+ true);
}
@Test
public void testRegisterCustomBuilderForPayloadJAXBWithXOP() throws Exception {
- DataHandler dh = DataHandlerUtils.toDataHandler(new RandomBlob(10000));
+ Blob contentBlob = new RandomBlob(10000);
MemoryBlob blob = Blobs.createMemoryBlob();
OutputStream out = blob.getOutputStream();
OMOutputFormat format = new OMOutputFormat();
format.setDoOptimize(true);
- createTestDocument(dh).serialize(out, format);
+ createTestDocument(contentBlob).serialize(out, format);
out.close();
MultipartBody mb =
MultipartBody.builder()
.setInputStream(blob.getInputStream())
.setContentType(format.getContentType())
.build();
- test(dh, OMXMLBuilderFactory.createOMBuilder(StAXParserConfiguration.DEFAULT, mb), false);
+ test(
+ contentBlob,
+ OMXMLBuilderFactory.createOMBuilder(StAXParserConfiguration.DEFAULT, mb),
+ false);
}
}
diff --git a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/text/TestBase64StreamingWithSerialize.java b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/text/TestBase64StreamingWithSerialize.java
index f8475b6..cbb700d 100644
--- a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/text/TestBase64StreamingWithSerialize.java
+++ b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/text/TestBase64StreamingWithSerialize.java
@@ -18,16 +18,12 @@
*/
package org.apache.axiom.ts.om.text;
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMMetaFactory;
import org.apache.axiom.om.OMText;
-import org.apache.axiom.testutils.activation.TestDataSource;
+import org.apache.axiom.testutils.blob.TestBlob;
import org.apache.axiom.ts.AxiomTestCase;
-import org.apache.axiom.util.activation.DataHandlerUtils;
import org.apache.commons.io.output.NullOutputStream;
/**
@@ -46,11 +42,10 @@
protected void runTest() throws Throwable {
OMFactory factory = metaFactory.getOMFactory();
OMElement elem = factory.createOMElement("test", null);
- // Create a data source that would eat up all memory when loaded. If the test
- // doesn't fail with an OutOfMemoryError, we know that the OMText implementation
- // supports streaming.
- DataSource ds = new TestDataSource('A', Runtime.getRuntime().maxMemory());
- OMText text = factory.createOMText(DataHandlerUtils.toBlob(new DataHandler(ds)), false);
+ // Create a blob that would eat up all memory when loaded. If the test doesn't fail with an
+ // OutOfMemoryError, we know that the OMText implementation supports streaming.
+ OMText text =
+ factory.createOMText(new TestBlob('A', Runtime.getRuntime().maxMemory()), false);
elem.addChild(text);
elem.serialize(NullOutputStream.NULL_OUTPUT_STREAM);
}
diff --git a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/xop/XOPRoundtripTest.java b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/xop/XOPRoundtripTest.java
index 1467d75..b31ef73 100644
--- a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/xop/XOPRoundtripTest.java
+++ b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/xop/XOPRoundtripTest.java
@@ -18,20 +18,19 @@
*/
package org.apache.axiom.ts.om.xop;
-import javax.activation.DataHandler;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.stax.StAXSource;
+import org.apache.axiom.blob.Blob;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMMetaFactory;
import org.apache.axiom.om.OMText;
import org.apache.axiom.om.OMXMLBuilderFactory;
import org.apache.axiom.om.XOPEncoded;
-import org.apache.axiom.testutils.activation.TestDataSource;
+import org.apache.axiom.testutils.blob.TestBlob;
import org.apache.axiom.ts.AxiomTestCase;
-import org.apache.axiom.util.activation.DataHandlerUtils;
public class XOPRoundtripTest extends AxiomTestCase {
public XOPRoundtripTest(OMMetaFactory metaFactory) {
@@ -41,9 +40,9 @@
@Override
protected void runTest() throws Throwable {
OMFactory factory = metaFactory.getOMFactory();
- DataHandler dh = new DataHandler(new TestDataSource('x', Runtime.getRuntime().maxMemory()));
+ Blob blob = new TestBlob('x', Runtime.getRuntime().maxMemory());
OMElement element1 = factory.createOMElement(new QName("test"));
- element1.addChild(factory.createOMText(DataHandlerUtils.toBlob(dh), true));
+ element1.addChild(factory.createOMText(blob, true));
XOPEncoded<XMLStreamReader> xopEncodedStream = element1.getXOPEncodedStreamReader(true);
OMElement element2 =
OMXMLBuilderFactory.createOMBuilder(
@@ -55,6 +54,6 @@
assertNotNull(child);
assertTrue(child.isBinary());
assertTrue(child.isOptimized());
- assertSame(dh, DataHandlerUtils.toDataHandler(child.getBlob()));
+ assertSame(blob, child.getBlob());
}
}
diff --git a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestMTOMForwardStreaming.java b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestMTOMForwardStreaming.java
index ea65fde..ac75089 100644
--- a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestMTOMForwardStreaming.java
+++ b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestMTOMForwardStreaming.java
@@ -22,9 +22,7 @@
import java.io.PipedOutputStream;
import java.util.Iterator;
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-
+import org.apache.axiom.blob.Blob;
import org.apache.axiom.mime.MultipartBody;
import org.apache.axiom.mime.activation.PartDataHandlerBlobFactory;
import org.apache.axiom.mime.activation.PartDataHandler;
@@ -36,7 +34,7 @@
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.testutils.activation.TestDataSource;
+import org.apache.axiom.testutils.blob.TestBlob;
import org.apache.axiom.testutils.io.IOTestUtils;
import org.apache.axiom.ts.AxiomTestCase;
import org.apache.axiom.util.activation.DataHandlerUtils;
@@ -58,8 +56,8 @@
@Override
protected void runTest() throws Throwable {
- DataSource ds1 = new TestDataSource('A', Runtime.getRuntime().maxMemory());
- DataSource ds2 = new TestDataSource('B', Runtime.getRuntime().maxMemory());
+ Blob blob1 = new TestBlob('A', Runtime.getRuntime().maxMemory());
+ Blob blob2 = new TestBlob('B', Runtime.getRuntime().maxMemory());
// Programmatically create the original message
SOAPFactory factory = metaFactory.getSOAP12Factory();
@@ -69,11 +67,9 @@
factory.createOMElement(
"test", factory.createOMNamespace("urn:test", "p"), orgBody);
OMElement orgData1 = factory.createOMElement("data", null, orgBodyElement);
- orgData1.addChild(
- factory.createOMText(DataHandlerUtils.toBlob(new DataHandler(ds1)), true));
+ orgData1.addChild(factory.createOMText(blob1, true));
OMElement orgData2 = factory.createOMElement("data", null, orgBodyElement);
- orgData2.addChild(
- factory.createOMText(DataHandlerUtils.toBlob(new DataHandler(ds2)), true));
+ orgData2.addChild(factory.createOMText(blob2, true));
OMOutputFormat format = new OMOutputFormat();
format.setDoOptimize(true);
@@ -152,14 +148,14 @@
OMElement data2 = it.next();
IOTestUtils.compareStreams(
- ds1.getInputStream(),
+ blob1.getInputStream(),
((PartDataHandler)
DataHandlerUtils.toDataHandler(
((OMText) data1.getFirstOMChild()).getBlob()))
.getPart()
.getInputStream(false));
IOTestUtils.compareStreams(
- ds2.getInputStream(),
+ blob2.getInputStream(),
((PartDataHandler)
DataHandlerUtils.toDataHandler(
((OMText) data2.getFirstOMChild()).getBlob()))
diff --git a/testing/testutils/src/main/java/org/apache/axiom/testutils/activation/TestDataSource.java b/testing/blob-testutils/src/main/java/org/apache/axiom/testutils/blob/TestBlob.java
similarity index 67%
rename from testing/testutils/src/main/java/org/apache/axiom/testutils/activation/TestDataSource.java
rename to testing/blob-testutils/src/main/java/org/apache/axiom/testutils/blob/TestBlob.java
index 04a33aa..5231aee 100644
--- a/testing/testutils/src/main/java/org/apache/axiom/testutils/activation/TestDataSource.java
+++ b/testing/blob-testutils/src/main/java/org/apache/axiom/testutils/blob/TestBlob.java
@@ -17,38 +17,29 @@
* under the License.
*/
-package org.apache.axiom.testutils.activation;
+package org.apache.axiom.testutils.blob;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import javax.activation.DataSource;
+import org.apache.axiom.blob.Blob;
+import org.apache.axiom.ext.io.StreamCopyException;
/**
- * Test data source that produces a byte sequence with specified length and with all bytes equal to
- * a specified value.
+ * Test blob that produces a byte sequence with specified length and with all bytes equal to a
+ * specified value.
*/
-public class TestDataSource implements DataSource {
+public class TestBlob implements Blob {
final int value;
final long length;
- public TestDataSource(int value, long length) {
+ public TestBlob(int value, long length) {
this.value = value;
this.length = length;
}
@Override
- public String getName() {
- return null;
- }
-
- @Override
- public String getContentType() {
- return null;
- }
-
- @Override
public InputStream getInputStream() throws IOException {
return new InputStream() {
private long position;
@@ -66,7 +57,18 @@
}
@Override
- public OutputStream getOutputStream() throws IOException {
- throw new UnsupportedOperationException();
+ public void writeTo(OutputStream out) throws StreamCopyException {
+ for (long i = 0; i < length; i++) {
+ try {
+ out.write(value);
+ } catch (IOException ex) {
+ throw new StreamCopyException(StreamCopyException.WRITE, ex);
+ }
+ }
+ }
+
+ @Override
+ public long getSize() {
+ return length;
}
}