尝试使用JAXB解组xml的一部分时,@ XmlElement不起作用

时间:2018-12-27 16:34:22

标签: java xml soap jaxb unmarshalling

我得到了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的列表,但是其中的每个元素都具有属性numerovalor为空,就像@XmlElement不能正常工作

0 个答案:

没有答案