diff --git a/core/src/main/java/org/springframework/ws/pox/dom/DomPoxMessage.java b/core/src/main/java/org/springframework/ws/pox/dom/DomPoxMessage.java index cbee446a..afbc0848 100644 --- a/core/src/main/java/org/springframework/ws/pox/dom/DomPoxMessage.java +++ b/core/src/main/java/org/springframework/ws/pox/dom/DomPoxMessage.java @@ -26,13 +26,15 @@ import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import org.springframework.util.Assert; import org.springframework.ws.pox.PoxMessage; import org.springframework.ws.transport.TransportConstants; import org.springframework.ws.transport.TransportOutputStream; import org.springframework.xml.namespace.QNameUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Element; /** * Implementation of the PoxMessage interface that is based on a DOM Document. @@ -69,6 +71,10 @@ public class DomPoxMessage implements PoxMessage { } public Result getPayloadResult() { + NodeList children = document.getChildNodes(); + for (int i = 0; i < children.getLength(); i++) { + document.removeChild(children.item(i)); + } return new DOMResult(document); } diff --git a/core/src/test/java/org/springframework/ws/pox/dom/DomPoxMessageTest.java b/core/src/test/java/org/springframework/ws/pox/dom/DomPoxMessageTest.java index 7ba87ed5..9aa66e03 100644 --- a/core/src/test/java/org/springframework/ws/pox/dom/DomPoxMessageTest.java +++ b/core/src/test/java/org/springframework/ws/pox/dom/DomPoxMessageTest.java @@ -23,9 +23,10 @@ import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import org.custommonkey.xmlunit.XMLTestCase; +import org.w3c.dom.Document; + import org.springframework.xml.transform.StringResult; import org.springframework.xml.transform.StringSource; -import org.w3c.dom.Document; public class DomPoxMessageTest extends XMLTestCase { @@ -53,6 +54,15 @@ public class DomPoxMessageTest extends XMLTestCase { assertXMLEqual(content, stringResult.toString()); } + public void testGetPayloadResultTwice() throws Exception { + String content = ""; + transformer.transform(new StringSource(content), message.getPayloadResult()); + transformer.transform(new StringSource(content), message.getPayloadResult()); + StringResult stringResult = new StringResult(); + transformer.transform(message.getPayloadSource(), stringResult); + assertXMLEqual(content, stringResult.toString()); + } + public void testWriteTo() throws Exception { String content = "" + ""; StringSource source = new StringSource(content);