首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Java语言从SOAPMessage中获取原始XML

用Java语言从SOAPMessage中获取原始XML
EN

Stack Overflow用户
提问于 2009-02-06 22:04:00
回答 9查看 183.3K关注 0票数 84

我已经在JAX-WS中设置了一个SOAP,但是我在弄清楚如何从SOAPMessage (或任何节点)对象中获取原始WebServiceProvider时遇到了麻烦。以下是我现在获得的代码示例,也是我尝试获取XML的地方:

代码语言:javascript
复制
@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,我也愿意这样做。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-02-25 19:00:35

事实证明,可以通过使用Provider获得原始XML,方法如下:

代码语言:javascript
复制
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,为什么还要使用更高级别的对象呢?)

票数 13
EN

Stack Overflow用户

发布于 2009-09-29 03:22:22

你可以试着这样做。

代码语言:javascript
复制
SOAPMessage msg = messageContext.getMessage();
ByteArrayOutputStream out = new ByteArrayOutputStream();
msg.writeTo(out);
String strMsg = new String(out.toByteArray());
票数 161
EN

Stack Overflow用户

发布于 2013-11-20 16:53:13

如果您有SOAPMessageSOAPMessageContext,则可以使用Transformer,方法是通过DOMSource将其转换为Source

代码语言:javascript
复制
            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());

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

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/522395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档