Skip to content

Commit eae8694

Browse files
committed
Resolved #SWS-61: DomContentHandler throwing NullpointerExption on document
1 parent ce6f562 commit eae8694

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

xml/src/main/java/org/springframework/xml/dom/DomContentHandler.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@
3737
*/
3838
public class DomContentHandler extends DefaultHandler {
3939

40-
private Document document;
40+
private final Document document;
4141

42-
private List elements = new ArrayList();
42+
private final List elements = new ArrayList();
4343

44-
private Node node;
44+
private final Node node;
4545

4646
/**
4747
* Creates a new instance of the <code>DomContentHandler</code> with the given node.
@@ -54,6 +54,10 @@ public DomContentHandler(Node node) {
5454
if (node instanceof Document) {
5555
document = (Document) node;
5656
}
57+
else {
58+
document = node.getOwnerDocument();
59+
}
60+
Assert.notNull(document, "document must not be null");
5761
}
5862

5963
private Node getParent() {

xml/src/test/java/org/springframework/xml/dom/DomContentHandlerTest.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,24 @@
2222

2323
import org.custommonkey.xmlunit.XMLTestCase;
2424
import org.w3c.dom.Document;
25+
import org.w3c.dom.Element;
2526
import org.xml.sax.InputSource;
2627
import org.xml.sax.XMLReader;
2728
import org.xml.sax.helpers.XMLReaderFactory;
2829

2930
public class DomContentHandlerTest extends XMLTestCase {
3031

31-
private static final String XML_CONTENT_HANDLER = "<?xml version='1.0' encoding='UTF-8'?>" + "<?pi content?>" +
32+
private static final String XML_1 = "<?xml version='1.0' encoding='UTF-8'?>" + "<?pi content?>" +
3233
"<root xmlns='namespace'>" +
3334
"<prefix:child xmlns:prefix='namespace2' xmlns:prefix2='namespace3' prefix2:attr='value'>content</prefix:child>" +
3435
"</root>";
3536

37+
private static final String XML_2_EXPECTED = "<?xml version='1.0' encoding='UTF-8'?>" + "<root xmlns='namespace'>" +
38+
"<child xmlns='namespace2' />" + "</root>";
39+
40+
private static final String XML_2_SNIPPET =
41+
"<?xml version='1.0' encoding='UTF-8'?>" + "<child xmlns='namespace2' />";
42+
3643
private Document expected;
3744

3845
private DomContentHandler handler;
@@ -41,20 +48,33 @@ public class DomContentHandlerTest extends XMLTestCase {
4148

4249
private XMLReader xmlReader;
4350

51+
private DocumentBuilder documentBuilder;
52+
4453
protected void setUp() throws Exception {
4554
xmlReader = XMLReaderFactory.createXMLReader();
4655
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
4756
documentBuilderFactory.setNamespaceAware(true);
48-
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
57+
documentBuilder = documentBuilderFactory.newDocumentBuilder();
4958
result = documentBuilder.newDocument();
59+
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
60+
}
61+
62+
public void testContentHandlerDocument() throws Exception {
5063
handler = new DomContentHandler(result);
51-
expected = documentBuilder.parse(new InputSource(new StringReader(XML_CONTENT_HANDLER)));
64+
expected = documentBuilder.parse(new InputSource(new StringReader(XML_1)));
65+
xmlReader.setContentHandler(handler);
66+
xmlReader.parse(new InputSource(new StringReader(XML_1)));
67+
assertXMLEqual("Invalid result", expected, result);
5268
}
5369

54-
public void testContentHandler() throws Exception {
55-
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
70+
public void testContentHandlerElement() throws Exception {
71+
Element rootElement = result.createElementNS("namespace", "root");
72+
result.appendChild(rootElement);
73+
handler = new DomContentHandler(rootElement);
74+
expected = documentBuilder.parse(new InputSource(new StringReader(XML_2_EXPECTED)));
5675
xmlReader.setContentHandler(handler);
57-
xmlReader.parse(new InputSource(new StringReader(XML_CONTENT_HANDLER)));
76+
xmlReader.parse(new InputSource(new StringReader(XML_2_SNIPPET)));
5877
assertXMLEqual("Invalid result", expected, result);
78+
5979
}
6080
}

0 commit comments

Comments
 (0)