[英]XML SOAP Envelope coming null with JAXB
I'm trying to unmarshal a XML with JAXB to convert it into an object, but the SOAPPArt, SOAPEnvelope and the SOAPBody are coming null I don't know why..
我也嘗試在沒有 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 object 及其屬性,如 ResultadoXml。
在所有元素上指定命名空間(或在包上使用 @XmlSchema)並使用解組 SOAP 正文內容
ObjectXmlResponse response = (ObjectXmlResponse) jaxbUnmarshaller.unmarshal(bdy.extractContentAsDocument());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.