如何将 SOAPBody 转换为 String
我想将 SOAPBody 转换为 String。最好的方法是什么?我应该首先将其转换为xml,然后将其转换为String,或者我们可以将其转换为String。
我想将 SOAPBody 转换为 String。最好的方法是什么?我应该首先将其转换为xml,然后将其转换为String,或者我们可以将其转换为String。
从 SOAPMessage 开始时,最简单的方法是使用以下方法:writeTo
ByteArrayOutputStream stream = new ByteArrayOutputStream();
soapMessage.writeTo(stream);
String message = new String(stream.toByteArray(), "utf-8")
(上面,我假设你的SAAJ实现将使用UTF-8,你可能想要检查)。
如果从SOAPBody开始,那么你可能应该使用XML API,看到SOAPBody是一个org.w3.dom.Element,最简单的方法可能是使用TrAX:
SOAPBody element = ... // Whatever
DOMSource source = new DOMSource(element);
StringWriter stringResult = new StringWriter();
TransformerFactory.newInstance().newTransformer().transform(source, new StreamResult(stringResult));
String message = stringResult.toString();
(对不起,我在这里没有我的IDE,无法检查这是否编译,但那应该非常接近)。
请注意:序列化的 SOAPMessage 可能不是原始 XML:它可能是 MIME 结构:如果 SOAPMessage 实际使用 SwA(SOAP With Attachment)或 MTOM。但是,SOAPBody 绝对是纯 XML。
认为这可能会有所帮助 -
private String convertToString (SOAPBody message) throws Exception{
Document doc = message.extractContentAsDocument();
StringWriter sw = new StringWriter();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.transform(new DOMSource(doc), new StreamResult(sw));
return sw.toString();
}
感谢以下帖子 - XML文档到字符串?