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 2012/07/21 20:55:29 UTC

svn commit: r1364148 - in /webservices/axiom/branches/AXIOM-437/modules: axiom-api/src/main/java/org/apache/axiom/om/ axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/ axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/

Author: veithen
Date: Sat Jul 21 18:55:29 2012
New Revision: 1364148

URL: http://svn.apache.org/viewvc?rev=1364148&view=rev
Log:
Support DTDs when constructing an Axiom tree from a DOMSource.

Modified:
    webservices/axiom/branches/AXIOM-437/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java
    webservices/axiom/branches/AXIOM-437/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/DOMXMLStreamReader.java
    webservices/axiom/branches/AXIOM-437/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java

Modified: webservices/axiom/branches/AXIOM-437/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/AXIOM-437/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java?rev=1364148&r1=1364147&r2=1364148&view=diff
==============================================================================
--- webservices/axiom/branches/AXIOM-437/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java (original)
+++ webservices/axiom/branches/AXIOM-437/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLBuilderFactory.java Sat Jul 21 18:55:29 2012
@@ -302,7 +302,7 @@ public class OMXMLBuilderFactory {
      *            the source of the XML document
      * @return the builder
      */
-    // TODO: if the source is a SAXSource or DOMSource and the document has a DTD, then Axiom will remove the DTD (or even fail); fix this and/or specify the behavior
+    // TODO: if the source is a SAXSource and the document has a DTD, then Axiom will remove the DTD (or even fail); fix this and/or specify the behavior
     public static OMXMLParserWrapper createOMBuilder(OMFactory omFactory, Source source) {
         return omFactory.getMetaFactory().createOMBuilder(omFactory, source);
     }

Modified: webservices/axiom/branches/AXIOM-437/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/DOMXMLStreamReader.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/AXIOM-437/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/DOMXMLStreamReader.java?rev=1364148&r1=1364147&r2=1364148&view=diff
==============================================================================
--- webservices/axiom/branches/AXIOM-437/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/DOMXMLStreamReader.java (original)
+++ webservices/axiom/branches/AXIOM-437/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/DOMXMLStreamReader.java Sat Jul 21 18:55:29 2012
@@ -23,14 +23,16 @@ import javax.xml.namespace.NamespaceCont
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 
+import org.apache.axiom.ext.stax.DTDReader;
 import org.apache.axiom.util.stax.AbstractXMLStreamReader;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
+import org.w3c.dom.DocumentType;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.ProcessingInstruction;
 
-class DOMXMLStreamReader extends AbstractXMLStreamReader {
+class DOMXMLStreamReader extends AbstractXMLStreamReader implements DTDReader {
     private final Node root;
     private Node node;
     private int event;
@@ -47,7 +49,11 @@ class DOMXMLStreamReader extends Abstrac
     }
 
     public Object getProperty(String name) throws IllegalArgumentException {
-        return null;
+        if (DTDReader.PROPERTY.equals(name)) {
+            return this;
+        } else {
+            return null;
+        }
     }
 
     public int next() throws XMLStreamException {
@@ -77,8 +83,7 @@ class DOMXMLStreamReader extends Abstrac
                     break;
                 case Node.DOCUMENT_TYPE_NODE:
                     event = DTD;
-                    // There is no meaningful way to convert a DOM doctype node to StAX; skip the node
-                    continue;
+                    break;
                 case Node.ELEMENT_NODE:
                     if (visited) {
                         event = END_ELEMENT;
@@ -126,6 +131,18 @@ class DOMXMLStreamReader extends Abstrac
         return ((Document)node).getXmlStandalone();
     }
 
+    public String getRootName() {
+        return ((DocumentType)node).getName();
+    }
+
+    public String getPublicId() {
+        return ((DocumentType)node).getPublicId();
+    }
+
+    public String getSystemId() {
+        return ((DocumentType)node).getSystemId();
+    }
+
     public String getLocalName() {
         return node.getLocalName();
     }
@@ -214,7 +231,11 @@ class DOMXMLStreamReader extends Abstrac
     }
 
     public String getText() {
-        return node.getNodeValue();
+        if (event == DTD) {
+            return ((DocumentType)node).getInternalSubset();
+        } else {
+            return node.getNodeValue();
+        }
     }
 
     public String getPITarget() {

Modified: webservices/axiom/branches/AXIOM-437/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/AXIOM-437/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java?rev=1364148&r1=1364147&r2=1364148&view=diff
==============================================================================
--- webservices/axiom/branches/AXIOM-437/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java (original)
+++ webservices/axiom/branches/AXIOM-437/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestCreateOMBuilderFromDOMSource.java Sat Jul 21 18:55:29 2012
@@ -26,7 +26,6 @@ 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;
@@ -34,6 +33,7 @@ import org.apache.axiom.testutils.confor
 import org.apache.axiom.ts.ConformanceTestCase;
 import org.custommonkey.xmlunit.XMLAssert;
 import org.custommonkey.xmlunit.XMLUnit;
+import org.xml.sax.InputSource;
 
 public class TestCreateOMBuilderFromDOMSource extends ConformanceTestCase {
     public TestCreateOMBuilderFromDOMSource(OMMetaFactory metaFactory, ConformanceTestFile file) {
@@ -51,8 +51,8 @@ public class TestCreateOMBuilderFromDOMS
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             builder.getDocument().serialize(baos);
             XMLAssert.assertXMLIdentical(XMLUnit.compareXML(
-                    AbstractTestCase.toDocumentWithoutDTD(getFileAsStream()),
-                    AbstractTestCase.toDocumentWithoutDTD(new ByteArrayInputStream(baos.toByteArray()))), true);
+                    new InputSource(getFileAsStream()),
+                    new InputSource(new ByteArrayInputStream(baos.toByteArray()))), true);
         } finally {
             in.close();
         }