从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