diff --git a/xml/src/main/java/org/springframework/xml/dom/DomContentHandler.java b/xml/src/main/java/org/springframework/xml/dom/DomContentHandler.java
index 5e3ddfa8..05dbc3fc 100644
--- a/xml/src/main/java/org/springframework/xml/dom/DomContentHandler.java
+++ b/xml/src/main/java/org/springframework/xml/dom/DomContentHandler.java
@@ -37,11 +37,11 @@ import org.xml.sax.helpers.DefaultHandler;
*/
public class DomContentHandler extends DefaultHandler {
- private Document document;
+ private final Document document;
- private List elements = new ArrayList();
+ private final List elements = new ArrayList();
- private Node node;
+ private final Node node;
/**
* Creates a new instance of the DomContentHandler with the given node.
@@ -54,6 +54,10 @@ public class DomContentHandler extends DefaultHandler {
if (node instanceof Document) {
document = (Document) node;
}
+ else {
+ document = node.getOwnerDocument();
+ }
+ Assert.notNull(document, "document must not be null");
}
private Node getParent() {
diff --git a/xml/src/test/java/org/springframework/xml/dom/DomContentHandlerTest.java b/xml/src/test/java/org/springframework/xml/dom/DomContentHandlerTest.java
index b3000084..2b408f6d 100644
--- a/xml/src/test/java/org/springframework/xml/dom/DomContentHandlerTest.java
+++ b/xml/src/test/java/org/springframework/xml/dom/DomContentHandlerTest.java
@@ -22,17 +22,24 @@ import javax.xml.parsers.DocumentBuilderFactory;
import org.custommonkey.xmlunit.XMLTestCase;
import org.w3c.dom.Document;
+import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class DomContentHandlerTest extends XMLTestCase {
- private static final String XML_CONTENT_HANDLER = "" + "" +
+ private static final String XML_1 = "" + "" +
"" +
"content" +
"";
+ private static final String XML_2_EXPECTED = "" + "" +
+ "" + "";
+
+ private static final String XML_2_SNIPPET =
+ "" + "";
+
private Document expected;
private DomContentHandler handler;
@@ -41,20 +48,33 @@ public class DomContentHandlerTest extends XMLTestCase {
private XMLReader xmlReader;
+ private DocumentBuilder documentBuilder;
+
protected void setUp() throws Exception {
xmlReader = XMLReaderFactory.createXMLReader();
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
- DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
+ documentBuilder = documentBuilderFactory.newDocumentBuilder();
result = documentBuilder.newDocument();
- handler = new DomContentHandler(result);
- expected = documentBuilder.parse(new InputSource(new StringReader(XML_CONTENT_HANDLER)));
+ xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
}
- public void testContentHandler() throws Exception {
- xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
+ public void testContentHandlerDocument() throws Exception {
+ handler = new DomContentHandler(result);
+ expected = documentBuilder.parse(new InputSource(new StringReader(XML_1)));
xmlReader.setContentHandler(handler);
- xmlReader.parse(new InputSource(new StringReader(XML_CONTENT_HANDLER)));
+ xmlReader.parse(new InputSource(new StringReader(XML_1)));
assertXMLEqual("Invalid result", expected, result);
}
+
+ public void testContentHandlerElement() throws Exception {
+ Element rootElement = result.createElementNS("namespace", "root");
+ result.appendChild(rootElement);
+ handler = new DomContentHandler(rootElement);
+ expected = documentBuilder.parse(new InputSource(new StringReader(XML_2_EXPECTED)));
+ xmlReader.setContentHandler(handler);
+ xmlReader.parse(new InputSource(new StringReader(XML_2_SNIPPET)));
+ assertXMLEqual("Invalid result", expected, result);
+
+ }
}
\ No newline at end of file