我得到了SOAP <diffgr:diffgram>
的响应,因此无法对此进行解组。阅读一条建议,该建议只解组了我感兴趣的部分。我得到的一般XML响应是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cred:OrpcRESPONSE xmlns:cred="http://www.something.com/">
<cred:OrpcRESULT>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns="http://www.something.com/" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NewDataSet xmlns="">
<IdentificacionyNombreSujeto diffgr:id="IdentificacionyNombreSujeto1" msdata:rowOrder="0">
<NumeroDocumento>12345678</NumeroDocumento>
<Nombre>JHON SMITH</Nombre>
</IdentificacionyNombreSujeto>
<Ropc_01 diffgr:id="Ropc_011" msdata:rowOrder="0">
<No.>1</No.>
<PREGUNTA>SOME COOL QUESTION</PREGUNTA>
</Ropc_01>
<Ropc_01 diffgr:id="Ropc_012" msdata:rowOrder="1">
<No.>A</No.>
<PREGUNTA>1</PREGUNTA>
</Ropc_01>
<SomeCode diffgr:id="SomeCode1" msdata:rowOrder="0">
<SomeCode_X0020>12345678</SomeCode_X0020>
</SomeCode>
<Valid_x0020 diffgr:id="Valid cort1" msdata:rowOrder="0">
<ACTUAL>31/12/2013</ACTUAL>
<HACE_UN_ANIO>31/12/2012</HACE_UN_ANIO>
</Valid_x0020>
<SegmentosBuscar diffgr:id="SegmentosBuscar1" msdata:rowOrder="0">
<idSegmento>123</idSegmento>
<Nombre>IdentificacionyNombreSujeto</Nombre>
<Descripcion>abc</Descripcion>
<NombreUserControl/>
<informativo>false</informativo>
<KeyMensaje/>
<CodigoWS>IdentificacionyNombreSujeto</CodigoWS>
</SegmentosBuscar>
<SegmentosBuscar diffgr:id="SegmentosBuscar2" msdata:rowOrder="1">
<idSegmento>123</idSegmento>
<Nombre>Ropc_01</Nombre>
<Descripcion>abc</Descripcion>
<NombreUserControl/>
<informativo>false</informativo>
<KeyMensaje/>
<CodigoWS>PC_01</CodigoWS>
</SegmentosBuscar>
<SegmentosBuscar diffgr:id="SegmentosBuscar3" msdata:rowOrder="2">
<idSegmento>321</idSegmento>
<Nombre>SomeCode</Nombre>
<Descripcion>gets the code</Descripcion>
<NombreUserControl/>
<informativo>false</informativo>
<KeyMensaje/>
<CodigoWS>somecode</CodigoWS>
</SegmentosBuscar>
<SegmentosBuscar diffgr:id="SegmentosBuscar4" msdata:rowOrder="3">
<idSegmento>123</idSegmento>
<Nombre>some name</Nombre>
<Descripcion>gets the name</Descripcion>
<NombreUserControl/>
<informativo>false</informativo>
<KeyMensaje/>
<CodigoWS>W02</CodigoWS>
</SegmentosBuscar>
</NewDataSet>
</diffgr:diffgram>
</cred:OrpcRESULT>
<cred:mensajeError></cred:mensajeError>
</cred:OrpcRESPONSE>
我感兴趣的部分是:
<Ropc_01 diffgr:id="Ropc_011" msdata:rowOrder="0">
<No.>1</No.>
<PREGUNTA>SOME COOL QUESTION</PREGUNTA>
</Ropc_01>
<Ropc_01 diffgr:id="Ropc_012" msdata:rowOrder="1">
<No.>A</No.>
<PREGUNTA>1</PREGUNTA>
</Ropc_01>
我想获取所有这些元素的列表,所以我创建了一个Java类:
@XmlRootElement(name="Ropc_01")
public class ResultadoObtenerPreguntas {
@XmlElement(name = "No.")
private String numero;
@XmlElement(name = "PREGUNTA")
private String valor;
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
}
我在这里解组:
private List<ResultadoObtenerPreguntas> obtenerResponse(String cadenaXml) throws XMLStreamException, JAXBException {
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource xml = new StreamSource(new StringReader(cadenaXml));
XMLStreamReader xsr = xif.createXMLStreamReader(xml);
xsr.nextTag();
List<ResultadoObtenerPreguntas> lista = new ArrayList<>();
while (xsr.hasNext()) {
if(xsr.isStartElement() && xsr.getLocalName().equals("Ropc_01")) {
JAXBContext jc = JAXBContext.newInstance(ResultadoObtenerPreguntas.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
ResultadoObtenerPreguntas res = (ResultadoObtenerPreguntas)unmarshaller.unmarshal(xsr);
lista.add(res);
}
xsr.next();
}
xsr.close();
return lista;
}
我确实获得了一个带有ResultadoObtenerPreguntas
的列表,但是其中的每个元素都具有属性numero
和valor
为空,就像@XmlElement不能正常工作