从 Java 中的 SOAPMessage 获取 Raw XML

2022-08-31 11:47:23

我已经在 JAX-WS 中设置了一个 SOAP WebServiceProvider,但是我很难弄清楚如何从 SOAPMessage(或任何 Node)对象中获取原始 XML。以下是我现在拥有的代码示例,以及我尝试获取 XML 的位置:

@WebServiceProvider(wsdlLocation="SoapService.wsdl")
@ServiceMode(value=Service.Mode.MESSAGE)
public class SoapProvider implements Provider<SOAPMessage>
{
    public SOAPMessage invoke(SOAPMessage msg)
    {
        // How do I get the raw XML here?
    }
}

有没有一种简单的方法来获取原始请求的XML?如果有一种方法可以通过设置不同类型的提供程序(如源)来获取原始 XML,我也愿意这样做。


答案 1

你可以试试这种方式。

SOAPMessage msg = messageContext.getMessage();
ByteArrayOutputStream out = new ByteArrayOutputStream();
msg.writeTo(out);
String strMsg = new String(out.toByteArray());

答案 2

如果你有 或 ,则可以通过将它转换为 via 来使用 ,SOAPMessageSOAPMessageContextTransformerSourceDOMSource

            final SOAPMessage message = messageContext.getMessage();
            final StringWriter sw = new StringWriter();

            try {
                TransformerFactory.newInstance().newTransformer().transform(
                    new DOMSource(message.getSOAPPart()),
                    new StreamResult(sw));
            } catch (TransformerException e) {
                throw new RuntimeException(e);
            }

            // Now you have the XML as a String:
            System.out.println(sw.toString());

这将考虑编码,因此您的“特殊字符”不会被破坏。


推荐