【问题标题】:Convert SOAP response to xstream object将 SOAP 响应转换为 xstream 对象
【发布时间】:2014-08-11 08:53:38
【问题描述】:

我有来自另一个应用程序的 Soap 响应,我正在尝试使用 "XStream" 使用以下代码将其转换为对象;

XStream xstream = new XStream(new DomDriver());
file file = new File("file.xml");
InputStream inputStream= new FileInputStream(file);
Reader reader = new InputStreamReader(inputStream,"UTF-8");
String reqXMLString = "" //Stream converted to XML
System.out.println(xstream.fromXML(reqXMLString)); **//Error line**

文件.xml:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:validationErrors>
            <messages>
                <message>
                    <code>1020</code>
                    <text>Filed 1 is mandatory</text>
                </message>                  
            </messages>
        </soap:validationErrors>
    </soap:Body>
</soap:Envelope>

当我尝试将此 xml 转换为 java 对象时。我遇到了错误;

Exception in thread "main" com.thoughtworks.xstream.mapper.CannotResolveClassException: soap:Envelope : soap:Envelope
    at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:68)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
    at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:71)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
    at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)

我想知道,如何使用 XStream 将soap 响应转换为java 对象

提前致谢。

【问题讨论】:

  • 我看不到您的示例中配置的任何别名/转换器,因此它可能不知道如何反序列化您的 soap:Envelope
  • 所以,我需要这样配置:xstream.codehaus.org/alias-tutorial.html
  • xstream.codehaus.org/alias-tutorial.html 的链接无效。

标签: java xstream


【解决方案1】:

您需要将 SOAP 主体作为响应中的 OMElement 来映射对象。您可以这样尝试:(假设您将响应(xml 文件)映射到的类是ValidationErrors

FileReader fr = new FileReader("file.xml");
XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(fr);
    StAXSOAPModelBuilder smb = new StAXSOAPModelBuilder(xmlStreamReader);
    SOAPEnvelope senv = smb.getSOAPEnvelope();
    OMElement omelement = senv.getBody().getFirstElement();
    try{
        Iterator<OMElement> childIterator = omelement.getChildElements();
        while(childIterator.hasNext()){
        OMElement childEle = childIterator.next();
        String childName = childEle.getLocalName();
        if("validationErrors".equalsIgnoreCase(childName)){
            XStream stream = new XStream(new StaxDriver());
            stream.setClassLoader(ValidationErrors.class.getClassLoader());
            stream.alias("validationErrors", ValidationErrors.class);
            ValidationErrors response = (ValidationErrors)stream.fromXML(childEle.toString());
           }
        }
        catch(XStreamException e){
           e.printStack();
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多