SWS-392
This commit is contained in:
@@ -45,6 +45,7 @@ import com.thoughtworks.xstream.io.xml.QNameMap;
|
||||
import com.thoughtworks.xstream.io.xml.SaxWriter;
|
||||
import com.thoughtworks.xstream.io.xml.StaxReader;
|
||||
import com.thoughtworks.xstream.io.xml.StaxWriter;
|
||||
import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer;
|
||||
import com.thoughtworks.xstream.io.xml.XppReader;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
@@ -309,7 +310,7 @@ public class XStreamMarshaller extends AbstractMarshaller {
|
||||
streamWriter = new DomWriter((Document) node);
|
||||
}
|
||||
else if (node instanceof Element) {
|
||||
streamWriter = new DomWriter((Element) node);
|
||||
streamWriter = new DomWriter((Element) node, node.getOwnerDocument(), new XmlFriendlyReplacer());
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException("DOMResult contains neither Document nor Element");
|
||||
|
||||
@@ -77,6 +77,34 @@ public class XStreamMarshallerTest extends XMLTestCase {
|
||||
assertXMLEqual("Marshaller writes invalid DOMResult", expected, document);
|
||||
}
|
||||
|
||||
// see SWS-392
|
||||
public void testMarshalDOMResultToExistentDocument() throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
|
||||
Document existent = builder.newDocument();
|
||||
Element rootElement = existent.createElement("root");
|
||||
Element flightsElement = existent.createElement("flights");
|
||||
rootElement.appendChild(flightsElement);
|
||||
existent.appendChild(rootElement);
|
||||
|
||||
// marshall into the existent document
|
||||
DOMResult domResult = new DOMResult(flightsElement);
|
||||
marshaller.marshal(flight, domResult);
|
||||
|
||||
Document expected = builder.newDocument();
|
||||
Element eRootElement = expected.createElement("root");
|
||||
Element eFlightsElement = expected.createElement("flights");
|
||||
Element eFlightElement = expected.createElement("flight");
|
||||
eRootElement.appendChild(eFlightsElement);
|
||||
eFlightsElement.appendChild(eFlightElement);
|
||||
expected.appendChild(eRootElement);
|
||||
Element eNumberElement = expected.createElement("flightNumber");
|
||||
eFlightElement.appendChild(eNumberElement);
|
||||
Text text = expected.createTextNode("42");
|
||||
eNumberElement.appendChild(text);
|
||||
assertXMLEqual("Marshaller writes invalid DOMResult", expected, existent);
|
||||
}
|
||||
|
||||
public void testMarshalStreamResultWriter() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
StreamResult result = new StreamResult(writer);
|
||||
|
||||
Reference in New Issue
Block a user