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();
}