Преобразование ответа SOAP в объект xstream

1

У меня есть ответ 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**

file.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)

Итак, могу ли я знать, как преобразовать ответ мыла в объект Java с помощью XStream?

Заранее спасибо.

  • 0
    Я не вижу псевдонимов / конвертеров, настроенных в вашем примере, поэтому он, вероятно, не знает, как десериализовать ваше мыло: Конверт
  • 0
    Итак, мне нужно настроить так: xstream.codehaus.org/alias-tutorial.html
Теги:
xstream

1 ответ

0

Вам нужно взять тело 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();
      }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню