You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2011/07/17 18:18:38 UTC
svn commit: r1147674 - in /webservices/commons/trunk/modules/axiom:
modules/axiom-api/src/main/java/org/apache/axiom/om/
modules/axiom-api/src/main/java/org/apache/axiom/om/impl/jaxp/
modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/ ...
Author: veithen
Date: Sun Jul 17 16:18:36 2011
New Revision: 1147674
URL: http://svn.apache.org/viewvc?rev=1147674&view=rev
Log:
Introduced a getSAXSource method in OMContainer. In LLOM and DOOM this method is implemented using the existing OMSource class, but other implementations may return a SAXSource that uses special optimizations.
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetSAXSource.java
- copied, changed from r1144617, webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/jaxp/OMSourceToStreamResultTestCase.java
Removed:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/jaxp/OMSourceToStreamResultTestCase.java
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/jaxp/OMSourceToStreamResultTest.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/jaxp/OMSourceToStreamResultTest.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMContainer.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/jaxp/OMSource.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/OMXMLReader.java
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/pom.xml
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/OMTestSuiteBuilder.java
webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMContainer.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMContainer.java?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMContainer.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMContainer.java Sun Jul 17 16:18:36 2011
@@ -22,6 +22,11 @@ package org.apache.axiom.om;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.sax.SAXSource;
+
+import org.xml.sax.ContentHandler;
+import org.xml.sax.ext.LexicalHandler;
import java.io.OutputStream;
import java.io.Writer;
@@ -299,4 +304,32 @@ public interface OMContainer extends OMS
* @return an {@link XMLStreamReader} representation of this element
*/
XMLStreamReader getXMLStreamReader(boolean cache);
+
+ /**
+ * Get a {@link SAXSource} representation for this node. This method can be used to integrate
+ * Axiom with APIs and third party libraries that don't support StAX. In particular it can be
+ * used with the {@link Transformer} API.
+ * <p>
+ * The returned object supports all events defined by {@link ContentHandler} and
+ * {@link LexicalHandler}, with the exception of DTD related events. {@link OMDocType} nodes
+ * will be silently skipped.
+ * <p>
+ * If the node is an element and has a parent which is not a document, care is taken to properly
+ * generate {@link ContentHandler#startPrefixMapping(String, String)} and
+ * {@link ContentHandler#endPrefixMapping(String)} events also for namespace mappings declared
+ * on the ancestors of the element. To understand why this is important, consider the following
+ * example:
+ * <pre><root xmlns:ns="urn:ns"><element attr="ns:someThing"/><root></pre>
+ * <p>
+ * In that case, to correctly interpret the attribute value, the SAX content handler must be
+ * aware of the namespace mapping for the <tt>ns</tt> prefix, even if the serialization starts
+ * only at the child element.
+ *
+ * @param cache
+ * Indicates if caching should be enabled. If set to <code>false</code>, the returned
+ * {@link SAXSource} may only be used once, and using it may have the side effect of
+ * consuming the original content of this node.
+ * @return a {@link SAXSource} representation of this element
+ */
+ SAXSource getSAXSource(boolean cache);
}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/jaxp/OMSource.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/jaxp/OMSource.java?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/jaxp/OMSource.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/jaxp/OMSource.java Sun Jul 17 16:18:36 2011
@@ -21,6 +21,7 @@ package org.apache.axiom.om.impl.jaxp;
import javax.xml.transform.sax.SAXSource;
+import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.serialize.OMXMLReader;
import org.xml.sax.InputSource;
@@ -32,9 +33,16 @@ import org.xml.sax.InputSource;
* <p>
* Note that {@link org.apache.axiom.om.OMDocType} nodes are not supported and will be
* silently skipped.
+ * <p>
+ * <b>NOTE: As of version 1.2.13, application code should use
+ * {@link OMContainer#getSAXSource(boolean)} instead of instantiating this class directly.</b>
*/
public class OMSource extends SAXSource {
public OMSource(OMElement element) {
- super(new OMXMLReader(element), new InputSource());
+ this((OMContainer)element);
+ }
+
+ public OMSource(OMContainer node) {
+ super(new OMXMLReader(node), new InputSource());
}
}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/OMXMLReader.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/OMXMLReader.java?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/OMXMLReader.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/OMXMLReader.java Sun Jul 17 16:18:36 2011
@@ -29,6 +29,7 @@ import java.util.Set;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMComment;
import org.apache.axiom.om.OMContainer;
+import org.apache.axiom.om.OMDocument;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
@@ -62,11 +63,11 @@ import org.xml.sax.XMLReader;
* only at the child element.
*/
public class OMXMLReader extends AbstractXMLReader {
- private final OMElement element;
+ private final OMContainer root;
private final AttributesAdapter attributesAdapter = new AttributesAdapter();
- public OMXMLReader(OMElement element) {
- this.element = element;
+ public OMXMLReader(OMContainer root) {
+ this.root = root;
}
public void parse(InputSource input) throws IOException, SAXException {
@@ -78,10 +79,21 @@ public class OMXMLReader extends Abstrac
}
private void parse() throws SAXException {
+ if (root instanceof OMDocument) {
+ generateEvents((OMDocument)root);
+ } else {
+ OMElement element = (OMElement)root;
+ contentHandler.startDocument();
+ generateParentPrefixMappingEvents(element, true);
+ generateEvents(element);
+ generateParentPrefixMappingEvents(element, false);
+ contentHandler.endDocument();
+ }
+ }
+
+ private void generateEvents(OMDocument document) throws SAXException {
contentHandler.startDocument();
- generateParentPrefixMappingEvents(element, true);
- generateEvents(element);
- generateParentPrefixMappingEvents(element, false);
+ generateEventsForChildren(document);
contentHandler.endDocument();
}
@@ -156,7 +168,13 @@ public class OMXMLReader extends Abstrac
// This is explicitely allowed by the specification of the startElement method.
attributesAdapter.setAttributes(omElement);
contentHandler.startElement(uri, localName, qName, attributesAdapter);
- for (Iterator it = omElement.getChildren(); it.hasNext(); ) {
+ generateEventsForChildren(omElement);
+ contentHandler.endElement(uri, localName, qName);
+ generatePrefixMappingEvents(omElement, false);
+ }
+
+ private void generateEventsForChildren(OMContainer parent) throws SAXException {
+ for (Iterator it = parent.getChildren(); it.hasNext(); ) {
OMNode node = (OMNode)it.next();
switch (node.getType()) {
case OMNode.ELEMENT_NODE:
@@ -188,8 +206,6 @@ public class OMXMLReader extends Abstrac
contentHandler.processingInstruction(pi.getTarget(), pi.getValue());
}
}
- contentHandler.endElement(uri, localName, qName);
- generatePrefixMappingEvents(omElement, false);
}
private void generateEvents(OMText omText, boolean space) throws SAXException {
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java Sun Jul 17 16:18:36 2011
@@ -32,6 +32,7 @@ import org.apache.axiom.om.impl.OMContai
import org.apache.axiom.om.impl.OMNodeEx;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.impl.dom.factory.OMDOMFactory;
+import org.apache.axiom.om.impl.jaxp.OMSource;
import org.apache.axiom.om.impl.traverse.OMChildrenIterator;
import org.apache.axiom.om.impl.traverse.OMChildrenLocalNameIterator;
import org.apache.axiom.om.impl.traverse.OMChildrenNamespaceIterator;
@@ -44,6 +45,7 @@ import org.w3c.dom.NodeList;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.sax.SAXSource;
import java.util.Iterator;
@@ -694,4 +696,8 @@ public abstract class ParentNode extends
}
return new DOMStAXWrapper(builder, this, cache);
}
+
+ public SAXSource getSAXSource(boolean cache) {
+ return new OMSource(this);
+ }
}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java Sun Jul 17 16:18:36 2011
@@ -29,6 +29,7 @@ import org.apache.axiom.om.impl.MTOMXMLS
import org.apache.axiom.om.impl.OMContainerEx;
import org.apache.axiom.om.impl.OMDocumentImplUtil;
import org.apache.axiom.om.impl.OMNodeEx;
+import org.apache.axiom.om.impl.jaxp.OMSource;
import org.apache.axiom.om.impl.traverse.OMChildrenIterator;
import org.apache.axiom.om.impl.traverse.OMChildrenLocalNameIterator;
import org.apache.axiom.om.impl.traverse.OMChildrenNamespaceIterator;
@@ -38,6 +39,8 @@ import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import javax.xml.transform.sax.SAXSource;
+
import java.util.Iterator;
/** Class OMDocumentImpl */
@@ -327,4 +330,8 @@ public class OMDocumentImpl extends OMSe
public XMLStreamReader getXMLStreamReader(boolean cache) {
return OMContainerHelper.getXMLStreamReader(this, cache);
}
+
+ public SAXSource getSAXSource(boolean cache) {
+ return new OMSource(this);
+ }
}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java Sun Jul 17 16:18:36 2011
@@ -39,6 +39,7 @@ import org.apache.axiom.om.impl.OMNodeEx
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.impl.builder.XOPAwareStAXOMBuilder;
import org.apache.axiom.om.impl.builder.XOPBuilder;
+import org.apache.axiom.om.impl.jaxp.OMSource;
import org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory;
import org.apache.axiom.om.impl.traverse.OMChildElementIterator;
import org.apache.axiom.om.impl.traverse.OMChildrenIterator;
@@ -57,6 +58,7 @@ import javax.xml.stream.XMLStreamConstan
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import javax.xml.transform.sax.SAXSource;
import java.io.StringWriter;
import java.util.HashMap;
@@ -1111,5 +1113,9 @@ public class OMElementImpl extends OMNod
this.setComplete(true);
}
}
+
+ public SAXSource getSAXSource(boolean cache) {
+ return new OMSource(this);
+ }
}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java Sun Jul 17 16:18:36 2011
@@ -42,6 +42,7 @@ import javax.xml.stream.XMLStreamConstan
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import javax.xml.transform.sax.SAXSource;
import java.io.IOException;
import java.io.OutputStream;
@@ -1069,6 +1070,10 @@ public class OMSourcedElementImpl extend
}
}
+ public SAXSource getSAXSource(boolean cache) {
+ return super.getSAXSource(cache);
+ }
+
class DeferredNamespace implements OMNamespace {
final String uri;
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/pom.xml
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/pom.xml?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/pom.xml (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/pom.xml Sun Jul 17 16:18:36 2011
@@ -72,5 +72,10 @@
<classifier>tests</classifier>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.7.1</version>
+ </dependency>
</dependencies>
</project>
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/OMTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/OMTestSuiteBuilder.java?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/OMTestSuiteBuilder.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/OMTestSuiteBuilder.java Sun Jul 17 16:18:36 2011
@@ -55,6 +55,8 @@ public class OMTestSuiteBuilder extends
addTest(new org.apache.axiom.ts.om.builder.TestIOExceptionInGetText(metaFactory));
for (int i=0; i<conformanceFiles.length; i++) {
for (int j=0; j<containerFactories.length; j++) {
+ addTest(new org.apache.axiom.ts.om.container.TestGetSAXSource(metaFactory, conformanceFiles[i], containerFactories[j], true));
+ addTest(new org.apache.axiom.ts.om.container.TestGetSAXSource(metaFactory, conformanceFiles[i], containerFactories[j], false));
addTest(new org.apache.axiom.ts.om.container.TestGetXMLStreamReader(metaFactory, conformanceFiles[i], containerFactories[j], true));
addTest(new org.apache.axiom.ts.om.container.TestGetXMLStreamReader(metaFactory, conformanceFiles[i], containerFactories[j], false));
for (int k=0; k<serializationMethods.length; k++) {
Copied: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetSAXSource.java (from r1144617, webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/jaxp/OMSourceToStreamResultTestCase.java)
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetSAXSource.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetSAXSource.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/jaxp/OMSourceToStreamResultTestCase.java&r1=1144617&r2=1147674&rev=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/jaxp/OMSourceToStreamResultTestCase.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetSAXSource.java Sun Jul 17 16:18:36 2011
@@ -16,65 +16,59 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.axiom.om.impl.jaxp;
+package org.apache.axiom.ts.om.container;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import junit.framework.TestSuite;
import org.apache.axiom.om.AbstractTestCase;
import org.apache.axiom.om.OMMetaFactory;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.jaxp.OMSource;
+import org.apache.axiom.om.util.StAXParserConfiguration;
+import org.apache.axiom.ts.AxiomTestCase;
+import org.apache.axiom.ts.ConformanceTestCase;
import org.apache.axiom.util.stax.dialect.StAXDialect;
import org.apache.axiom.util.stax.dialect.StAXDialectDetector;
+import org.apache.xalan.processor.TransformerFactoryImpl;
-public class OMSourceToStreamResultTestCase extends AbstractTestCase {
- private final OMMetaFactory omMetaFactory;
- private final TransformerFactory transformerFactory;
- private final String file;
+public class TestGetSAXSource extends ConformanceTestCase {
+ private final OMContainerFactory containerFactory;
+ private final boolean cache;
- private OMSourceToStreamResultTestCase(OMMetaFactory omMetaFactory,
- TransformerFactory transformerFactory, String name, String file) {
- super(name);
- this.omMetaFactory = omMetaFactory;
- this.transformerFactory = transformerFactory;
- this.file = file;
+ public TestGetSAXSource(OMMetaFactory metaFactory, String file, OMContainerFactory containerFactory, boolean cache) {
+ super(metaFactory, file);
+ this.containerFactory = containerFactory;
+ this.cache = cache;
+ containerFactory.addTestProperties(this);
+ addTestProperty("cache", Boolean.toString(cache));
}
protected void runTest() throws Throwable {
- XMLInputFactory inputFactory = XMLInputFactory.newInstance();
- StAXDialect dialect = StAXDialectDetector.getDialect(inputFactory.getClass());
- inputFactory = dialect.normalize(inputFactory);
- // Make sure CDATA sections are reported by the StAX parser
- inputFactory = dialect.enableCDataReporting(inputFactory);
- XMLStreamReader reader = inputFactory.createXMLStreamReader(getTestResource(file));
- StAXOMBuilder builder = new StAXOMBuilder(omMetaFactory.getOMFactory(), reader);
- OMSource source = new OMSource(builder.getDocumentElement());
ByteArrayOutputStream out = new ByteArrayOutputStream();
- StreamResult result = new StreamResult(out);
- transformerFactory.newTransformer().transform(source, result);
- assertXMLIdentical(compareXML(
- toDocumentWithoutDTD(getTestResource(file)),
- toDocumentWithoutDTD(new ByteArrayInputStream(out.toByteArray()))), true);
- }
-
- public static TestSuite suite(OMMetaFactory omMetaFactory,
- TransformerFactory transformerFactory) throws Exception {
- TestSuite suite = new TestSuite();
- String[] files = getConformanceTestFiles();
- for (int i=0; i<files.length; i++) {
- String file = files[i];
- int idx = file.lastIndexOf('/');
- String name = file.substring(idx+1);
- suite.addTest(new OMSourceToStreamResultTestCase(omMetaFactory, transformerFactory,
- name, file));
+ InputStream in = getFileAsStream();
+ try {
+ OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(metaFactory.getOMFactory(),
+ StAXParserConfiguration.PRESERVE_CDATA_SECTIONS, in);
+ SAXSource source = containerFactory.getContainer(builder).getSAXSource(cache);
+ StreamResult result = new StreamResult(out);
+ new TransformerFactoryImpl().newTransformer().transform(source, result);
+ } finally {
+ in.close();
}
- return suite;
+ assertXMLIdentical(compareXML(
+ AbstractTestCase.toDocumentWithoutDTD(getFileAsStream()),
+ AbstractTestCase.toDocumentWithoutDTD(new ByteArrayInputStream(out.toByteArray()))), true);
}
}
Modified: webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml?rev=1147674&r1=1147673&r2=1147674&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml (original)
+++ webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml Sun Jul 17 16:18:36 2011
@@ -1237,6 +1237,28 @@ while (iterator.hasNext()) {
</para>
</section>
</section>
+ <section id="changes-1.2.13">
+ <title>Changes in Axiom 1.2.13</title>
+ <section>
+ <title>New abstract APIs</title>
+ <para>
+ Axiom 1.2.13 introduces a couple of new abstract APIs which give implementations of the Axiom API
+ the freedom to do additional optimizations. Application code should be migrated to take
+ advantage of these new APIs:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Instead of instantiating a <classname>OMSource</classname> object directly,
+ <methodname>OMContainer#getSAXSource(boolean)</methodname> should be used.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ Note that some of the superseded APIs may disappear in Axiom 1.3.
+ </para>
+ </section>
+ </section>
</section>
</chapter>