我已经在JAX-WS中设置了一个SOAP,但是我在弄清楚如何从SOAPMessage (或任何节点)对象中获取原始WebServiceProvider时遇到了麻烦。以下是我现在获得的代码示例,也是我尝试获取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?如果有一种方法可以通过设置不同类型的提供程序(比如Source)来获取原始XML,我也愿意这样做。
发布于 2009-02-25 19:00:35
事实证明,可以通过使用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,为什么还要使用更高级别的对象呢?)
发布于 2009-09-29 03:22:22
你可以试着这样做。
SOAPMessage msg = messageContext.getMessage();
ByteArrayOutputStream out = new ByteArrayOutputStream();
msg.writeTo(out);
String strMsg = new String(out.toByteArray());
发布于 2013-11-20 16:53:13
如果您有SOAPMessage
或SOAPMessageContext
,则可以使用Transformer
,方法是通过DOMSource
将其转换为Source
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());
这将考虑到编码,这样您的“特殊字符”就不会被破坏。
https://stackoverflow.com/questions/522395
复制相似问题