У меня есть ответ 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?
Заранее спасибо.
Вам нужно взять тело 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();
}