从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 可以以这种方式获取原始XML:

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

回到顶部