Author: veithen
Date: Sat Apr 16 19:48:26 2011
New Revision: 1094037

URL: http://svn.apache.org/viewvc?rev=1094037&view=rev
Log:
AXIOM-353: Generalized the API introduced in r1088682 so that one can also 
create an OM builder from a DOMSource. Note that the DOM->StAX conversion is 
directly supported by Woodstox.

Added:
    
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java
   (with props)
    
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromSAXSource.java
      - copied, changed from r1089635, 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestSAXOMBuilder.java
Removed:
    
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestSAXOMBuilder.java
Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMMetaFactory.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/AbstractOMMetaFactory.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/OMTestSuiteBuilder.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMMetaFactory.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMMetaFactory.java?rev=1094037&r1=1094036&r2=1094037&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMMetaFactory.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMMetaFactory.java
 Sat Apr 16 19:48:26 2011
@@ -20,7 +20,7 @@
 package org.apache.axiom.om;
 
 import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.Source;
 
 import org.apache.axiom.om.util.StAXParserConfiguration;
 import org.apache.axiom.soap.SOAPFactory;
@@ -98,7 +98,7 @@ public interface OMMetaFactory {
     OMXMLParserWrapper createOMBuilder(OMFactory omFactory, 
StAXParserConfiguration configuration, InputSource is);
     
     /**
-     * Create an object model builder for plain XML that gets its input from a 
{@link SAXSource}.
+     * Create an object model builder for plain XML that gets its input from a 
{@link Source}.
      * 
      * @param omFactory
      *            The object model factory to use. This factory must be 
obtained from the same
@@ -110,7 +110,7 @@ public interface OMMetaFactory {
      *            the source of the XML document
      * @return the builder
      */
-    OMXMLParserWrapper createSAXOMBuilder(OMFactory omFactory, SAXSource 
source);
+    OMXMLParserWrapper createOMBuilder(OMFactory omFactory, Source source);
     
     /**
      * Create an object model builder for SOAP that pulls events from a StAX 
stream reader. The

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java?rev=1094037&r1=1094036&r2=1094037&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java
 Sat Apr 16 19:48:26 2011
@@ -22,7 +22,7 @@ import java.io.InputStream;
 import java.io.Reader;
 
 import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.Source;
 
 import org.apache.axiom.om.util.StAXParserConfiguration;
 import org.apache.axiom.soap.SOAPFactory;
@@ -182,19 +182,19 @@ public class OMXMLBuilderFactory {
     
     /**
      * Create an object model builder that reads a plain XML document from the 
provided
-     * {@link SAXSource}.
+     * {@link Source}.
      * 
      * @param source
      *            the source of the XML document
      * @return the builder
      */
-    public static OMXMLParserWrapper createSAXOMBuilder(SAXSource source) {
+    public static OMXMLParserWrapper createOMBuilder(Source source) {
         OMMetaFactory metaFactory = OMAbstractFactory.getMetaFactory();
-        return metaFactory.createSAXOMBuilder(metaFactory.getOMFactory(), 
source);
+        return metaFactory.createOMBuilder(metaFactory.getOMFactory(), source);
     }
     
     /**
-     * Create an object model builder that reads an XML document from the 
provided {@link SAXSource}
+     * Create an object model builder that reads an XML document from the 
provided {@link Source}
      * using a specified object model factory.
      * 
      * @param omFactory
@@ -203,8 +203,8 @@ public class OMXMLBuilderFactory {
      *            the source of the XML document
      * @return the builder
      */
-    public static OMXMLParserWrapper createSAXOMBuilder(OMFactory omFactory, 
SAXSource source) {
-        return omFactory.getMetaFactory().createSAXOMBuilder(omFactory, 
source);
+    public static OMXMLParserWrapper createOMBuilder(OMFactory omFactory, 
Source source) {
+        return omFactory.getMetaFactory().createOMBuilder(omFactory, source);
     }
     
     /**

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/AbstractOMMetaFactory.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/AbstractOMMetaFactory.java?rev=1094037&r1=1094036&r2=1094037&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/AbstractOMMetaFactory.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/AbstractOMMetaFactory.java
 Sat Apr 16 19:48:26 2011
@@ -20,6 +20,7 @@ package org.apache.axiom.om.impl;
 
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.Source;
 import javax.xml.transform.sax.SAXSource;
 
 import org.apache.axiom.om.OMException;
@@ -72,8 +73,16 @@ public abstract class AbstractOMMetaFact
         return createStAXOMBuilder(omFactory, 
createXMLStreamReader(configuration, is));
     }
     
-    public OMXMLParserWrapper createSAXOMBuilder(OMFactory omFactory, 
SAXSource source) {
-        return new SAXOMXMLParserWrapper(omFactory, source);
+    public OMXMLParserWrapper createOMBuilder(OMFactory omFactory, Source 
source) {
+        if (source instanceof SAXSource) {
+            return new SAXOMXMLParserWrapper(omFactory, (SAXSource)source);
+        } else {
+            try {
+                return new StAXOMBuilder(omFactory, 
StAXUtils.getXMLInputFactory().createXMLStreamReader(source));
+            } catch (XMLStreamException ex) {
+                throw new OMException(ex);
+            }
+        }
     }
 
     public SOAPModelBuilder createStAXSOAPModelBuilder(XMLStreamReader parser) 
{

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java?rev=1094037&r1=1094036&r2=1094037&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
 Sat Apr 16 19:48:26 2011
@@ -23,6 +23,7 @@ import junit.framework.TestSuite;
 
 import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
 import org.apache.axiom.ts.OMTestSuiteBuilder;
+import org.apache.axiom.ts.om.builder.TestCreateOMBuilderFromDOMSource;
 import org.apache.axiom.ts.om.container.TestSerialize;
 import 
org.apache.axiom.ts.om.element.TestGetXMLStreamReaderCDATAEventFromElement;
 import 
org.apache.axiom.ts.om.element.TestGetXMLStreamReaderWithOMSourcedElementDescendant;
@@ -65,6 +66,12 @@ public class OMImplementationTest extend
         // TODO: this case is not working because Axiom doesn't serialize the 
DTD
         builder.exclude(TestSerialize.class, 
"(&(file=spaces.xml)(container=document))");
         
+        // TODO: CDATA sections are lost when using createOMBuilder with a 
DOMSource
+        builder.exclude(TestCreateOMBuilderFromDOMSource.class, 
"(|(file=cdata.xml)(file=test.xml))");
+        
+        // TODO: suspecting Woodstox bug here
+        builder.exclude(TestCreateOMBuilderFromDOMSource.class, 
"(file=spaces.xml)");
+        
         return builder.build();
     }
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java?rev=1094037&r1=1094036&r2=1094037&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
 Sat Apr 16 19:48:26 2011
@@ -23,6 +23,7 @@ import junit.framework.TestSuite;
 
 import org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactory;
 import org.apache.axiom.ts.OMTestSuiteBuilder;
+import org.apache.axiom.ts.om.builder.TestCreateOMBuilderFromDOMSource;
 import org.apache.axiom.ts.om.container.TestSerialize;
 import 
org.apache.axiom.ts.om.element.TestGetXMLStreamReaderWithOMSourcedElementDescendant;
 import org.apache.axiom.ts.om.node.TestInsertSiblingAfterOnChild;
@@ -48,6 +49,12 @@ public class OMImplementationTest extend
         // TODO: this case is not working because Axiom doesn't serialize the 
DTD
         builder.exclude(TestSerialize.class, 
"(&(file=spaces.xml)(container=document))");
         
+        // TODO: CDATA sections are lost when using createOMBuilder with a 
DOMSource
+        builder.exclude(TestCreateOMBuilderFromDOMSource.class, 
"(|(file=cdata.xml)(file=test.xml))");
+        
+        // TODO: suspecting Woodstox bug here
+        builder.exclude(TestCreateOMBuilderFromDOMSource.class, 
"(file=spaces.xml)");
+        
         return builder.build();
     }
 }

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=1094037&r1=1094036&r2=1094037&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
 Sat Apr 16 19:48:26 2011
@@ -45,14 +45,15 @@ public class OMTestSuiteBuilder extends 
         addTest(new 
org.apache.axiom.ts.om.attribute.TestEqualsHashCode(metaFactory));
         addTest(new 
org.apache.axiom.ts.om.attribute.TestGetQNameWithNamespace(metaFactory));
         addTest(new 
org.apache.axiom.ts.om.attribute.TestGetQNameWithoutNamespace(metaFactory));
+        for (int i=0; i<conformanceFiles.length; i++) {
+            addTest(new 
org.apache.axiom.ts.om.builder.TestCreateOMBuilderFromDOMSource(metaFactory, 
conformanceFiles[i]));
+            addTest(new 
org.apache.axiom.ts.om.builder.TestCreateOMBuilderFromSAXSource(metaFactory, 
conformanceFiles[i]));
+        }
         addTest(new 
org.apache.axiom.ts.om.builder.TestGetDocumentElement(metaFactory));
         addTest(new 
org.apache.axiom.ts.om.builder.TestGetDocumentElementWithDiscardDocument(metaFactory));
         addTest(new 
org.apache.axiom.ts.om.builder.TestInvalidXML(metaFactory));
         addTest(new 
org.apache.axiom.ts.om.builder.TestIOExceptionInGetText(metaFactory));
         for (int i=0; i<conformanceFiles.length; i++) {
-            addTest(new 
org.apache.axiom.ts.om.builder.TestSAXOMBuilder(metaFactory, 
conformanceFiles[i]));
-        }
-        for (int i=0; i<conformanceFiles.length; i++) {
             for (int j=0; j<containerFactories.length; j++) {
                 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));

Added: 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java?rev=1094037&view=auto
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java
 (added)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java
 Sat Apr 16 19:48:26 2011
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axiom.ts.om.builder;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.dom.DOMSource;
+
+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.ts.ConformanceTestCase;
+
+public class TestCreateOMBuilderFromDOMSource extends ConformanceTestCase {
+    public TestCreateOMBuilderFromDOMSource(OMMetaFactory metaFactory, String 
file) {
+        super(metaFactory, file);
+    }
+
+    protected void runTest() throws Throwable {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+        DocumentBuilder documentBuilder = factory.newDocumentBuilder();
+        InputStream in = getFileAsStream();
+        try {
+            DOMSource source = new DOMSource(documentBuilder.parse(in));
+            OMXMLParserWrapper builder = 
OMXMLBuilderFactory.createOMBuilder(metaFactory.getOMFactory(), source);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            builder.getDocument().serialize(baos);
+            assertXMLIdentical(compareXML(
+                    AbstractTestCase.toDocumentWithoutDTD(getFileAsStream()),
+                    AbstractTestCase.toDocumentWithoutDTD(new 
ByteArrayInputStream(baos.toByteArray()))), true);
+        } finally {
+            in.close();
+        }
+    }
+}

Propchange: 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromSAXSource.java
 (from r1089635, 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestSAXOMBuilder.java)
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromSAXSource.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromSAXSource.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestSAXOMBuilder.java&r1=1089635&r2=1094037&rev=1094037&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestSAXOMBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromSAXSource.java
 Sat Apr 16 19:48:26 2011
@@ -33,8 +33,8 @@ import org.apache.axiom.om.OMXMLParserWr
 import org.apache.axiom.ts.ConformanceTestCase;
 import org.xml.sax.InputSource;
 
-public class TestSAXOMBuilder extends ConformanceTestCase {
-    public TestSAXOMBuilder(OMMetaFactory metaFactory, String file) {
+public class TestCreateOMBuilderFromSAXSource extends ConformanceTestCase {
+    public TestCreateOMBuilderFromSAXSource(OMMetaFactory metaFactory, String 
file) {
         super(metaFactory, file);
     }
 
@@ -46,7 +46,7 @@ public class TestSAXOMBuilder extends Co
         InputStream in = getFileAsStream();
         try {
             SAXSource source = new SAXSource(parser.getXMLReader(), new 
InputSource(in));
-            OMXMLParserWrapper builder = 
OMXMLBuilderFactory.createSAXOMBuilder(metaFactory.getOMFactory(), source);
+            OMXMLParserWrapper builder = 
OMXMLBuilderFactory.createOMBuilder(metaFactory.getOMFactory(), source);
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             builder.getDocument().serialize(baos);
             assertXMLIdentical(compareXML(


Reply via email to