I'm trying to replace SOAP Body element with a string from SOAP message (SOAPMessage object) which looks like
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing">
<soap:Header>
..... SOAP Headers ....
</soap:Header>
<soap:Body>
... SOAP body part...
</soap:Body>
</soap:Envelope>
to
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing">
<soap:Header>
..... SOAP Headers ....
</soap:Header>
<soap:Body>
Body part was removed.
</soap:Body>
</soap:Envelope>
To do that I have used XPath
Document doc = convertStringToDocument(message);
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "//soap:Envelope/soap:Body";
Node node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE);
// Set the node content
node.setTextContent("Body part was removed.");
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(buffer));
String markedMessage = buffer.toString();
but it came back as node = null
so it wasn't replaced with a string