Как конвертировать SOAPBody в String
Я хочу конвертировать SOAPBody в String. Каков наилучший способ сделать это? Должен ли я сначала преобразовать его в XML, а затем преобразовать в String, или мы можем преобразовать JSUT в String.
3 ответа
При запуске из 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 Document to String?
Вам не нужно конвертировать SOAPBody
в XML
потому что это реализует org.w3c.dom.Element
интерфейс, таким образом, это уже действительный XML
объект. Ты можешь использовать org.w3c.dom.ls
Пакет для достижения вашей цели:
String xmlAsString = null;
Element element = what-ever-element;
DOMImplementationLS domImplementationLS = (DOMImplementationLS)element.getOwnerDocument().getImplementation().getFeature("LS", "3.0");
LSSerializer serializer = domImplementationLS.createLSSerializer();
xmlAsString = serializer.writeToString(element);
Вы можете играть с serializer.getDomConfig().setParameter(....)
настроить сериализатор.