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