从Java中的SOAPMessage获取原始XML
我已经在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?如果有一种方法可以通过设置其他类型的Provider(例如Source)来获取原始XML,那么我也愿意这样做。
回答:
事实证明,通过使用Provider 
import java.io.ByteArrayOutputStream;import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
@ServiceMode(value=Service.Mode.PAYLOAD)
@WebServiceProvider()
public class SoapProvider implements Provider<Source>
{
    public Source invoke(Source msg)
    {
        StreamResult sr = new StreamResult();
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        sr.setOutputStream(out);
        try {
            Transformer trans = TransformerFactory.newInstance().newTransformer();
            trans.transform(msg, sr);
            // Use out to your heart's desire.
        }
        catch (TransformerException e) {
            e.printStackTrace();
        }
        return msg;
    }
}
我最终不需要此解决方案,因此我实际上并没有亲自尝试过此代码-可能需要进行一些调整才能正确。但是我知道这是从Web服务获取原始XML的正确途径。
(如果您绝对必须有一个SOAPMessage对象,我不确定如何使这项工作有效,但是,如果仍然要处理原始XML,那么又为什么要使用更高级别的对象呢?)
以上是 从Java中的SOAPMessage获取原始XML 的全部内容, 来源链接: utcz.com/qa/401616.html






