Я пытаюсь разархивировать XML с помощью JAXB, чтобы преобразовать его в объект, но SOAPPArt, SOAPEnvelope и SOAPBody возвращаются к нулю, я не знаю почему ..
Я пыталсяunmarshal без SOAPMessage, но безуспешно.
Вот XML, который я пытаюсь разобрать:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ObjectXmlResponse
xmlns="http://tempuri.org/testing">
<ResultadoXml xmlns="www.site.com.br">
<CodigoOperacao>dsadsdas</CodigoOperacao>
<OperacoesObjetoAnalise />
<Respostas>
<Resposta Final="true">
<Sistema>dsadfd</Sistema>
<Criterio>fdsfdsf</Criterio>
<Resposta>.</Resposta>
</Resposta>
</Respostas>
</ResultadoXml>
</ObjectXmlResponse>
</soap:Body>
</soap:Envelope>
Вот классы:
@XmlRootElement(name="ObjectXmlResponse", namespace="http://tempuri.org/testing")
@XmlAccessorType(XmlAccessType.FIELD)
public class ObjectXmlResponse {
@XmlElement(name="ResultadoXml", namespace="www.site.com.br")
private ResultadoXml resultadoXml;
public ResultadoXml getResultadoXml() {
return resultadoXml;
}
public void setResultadoXml(ResultadoXml resultadoXml) {
this.resultadoXml = resultadoXml;
}
}
@XmlRootElement(name="ResultadoXml", namespace="www.site.com.br")
@XmlAccessorType(XmlAccessType.FIELD)
public class ResultadoXml {
private static final long serialVersionUID = 1L;
@XmlElement(name="CodigoOperacao")
private String codigoOperacao;
@XmlElement(name="OperacoesObjetoAnalise")
private String OperacoesObjetoAnalise;
@XmlElement(name="Respostas")
private Respostas respostas;
@XmlElement(name="Drivers")
private Drivers drivers;
public String getCodigoOperacao() {
return codigoOperacao;
}
public void setCodigoOperacao(String codigoOperacao) {
this.codigoOperacao = codigoOperacao;
}
public Respostas getRespostas() {
return respostas;
}
public void setRespostas(Respostas respostas) {
this.respostas = respostas;
}
public Drivers getDrivers() {
return drivers;
}
public void setDrivers(Drivers drivers) {
this.drivers = drivers;
}
public String getOperacoesObjetoAnalise() {
return OperacoesObjetoAnalise;
}
public void setOperacoesObjetoAnalise(String operacoesObjetoAnalise) {
OperacoesObjetoAnalise = operacoesObjetoAnalise;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public String toString(){
return "ResultadoXml [codigoOperacao=" + codigoOperacao +"]";
}
}
А вот демаршал:
public static void main(String[] args) {
JAXBContext jaxbContext;
try {
String relatorio = <the xml>;
InputStream is = new ByteArrayInputStream(relatorio.getBytes());
SOAPMessage message = MessageFactory.newInstance().createMessage(null, is);
SOAPPart sp = message.getSOAPPart();
SOAPEnvelope env = sp.getEnvelope();
SOAPBody bdy = env.getBody();
jaxbContext = JAXBContext.newInstance(ObjectXmlResponse.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
ObjectXmlResponse response = (ObjectXmlResponse) jaxbUnmarshaller.unmarshal(new StringReader(relatorio));
System.out.println(response);
} catch(Exception ex) {
ex.printStackTrace();
}
System.exit(0);
}
Мне нужно заполнить объект ObjectXmlResponse и его атрибуты, например ResultadoXml.