Jabón - Elemento no tiene xsi: nil como una propiedad, pero no hace deserializar no el objeto nulo

StackOverflow https://stackoverflow.com/questions/3815081

Pregunta

yo soy un novato total cuando se trata de mensajes XML y SOAP. ... Aquí está el mensaje SOAP.

<?xml version="1.0" encoding="utf-8" ?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <CR>
            <Username xmlns="<Hidden>">mtas</Username>
            <Password xmlns="<Hidden>">password</Password>
            <id xmlns="<Hidden>">
                70dad12b-bb50-402d-8b34-
                fe2d4c0c283d
            </id>
            <Data xmlns="<Hidden>">
                <Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns="<Hidden>">
                    <CS>
                        <CSCallbackRequest xmlns="">
                            <CDS xsi:nil="true" xmlns="<Hidden>"/>
                            <CDRP xmlns="<Hidden>"/>
                            <UDI xsi:nil="true"
                            xmlns="<Hidden>"/>
                        </CSCallbackRequest>
                    </CS>
                    <Fault xsi:nil="true" />
                    <Comment xsi:nil="true"/>
                </Data>
            </Data>
        </CR>
    </s:Body>
</s:Envelope>

genera las clases con la herramienta xsd.exe que nos dio clases para deserializar a. Este archivo .xsd fue proporcionado por la empresa que estamos recibiendo los mensajes SOAP de.

Aquí está el problema. Cuando obtenemos este tipo de vuelta respuesta por parte de la empresa, estamos buscando dentro CSCallbackRequest para esos tres elementos en el interior, los CDS, CDRP, y la UDI. Estamos tratando de determinar qué tipo de devolución de llamada que estamos recibiendo. Mi suposición inicial fue cuando utilizamos un XMLSerializer con el tipo ( Generado Clase Tipo ), el elemento dentro de CSCallbackRequest que no tiene el xsi: nil = true permitiría que el objeto dentro de la Generado Tipo Clase objeto no sería nula. Pero este no es el caso. ¿Cómo puedo comprobar si una propiedad con el no tiene el xsi: nil proprerty después de deserializar

¿Fue útil?

Solución

En realidad, me di cuenta de la cuestión. El mensaje SOAP pongo aquí es en realidad un ejemplo de la documentación de la compañía. Yo estaba tratando de utilizar esto como un simulacro de arriba para un mensaje que nos gustaría recibir. Después de comparar los archivos de clase generados por el XSD, me di cuenta de que el <CS> no se define realmente en los archivos. Cuando se des-serializa, no encontraría ese elemento, por lo tanto nada poblar, desde que empezamos deserializar desde el elemento <Data> y más allá. He comprobado los otros ejemplos en la documentación y los que no lo tienen este elemento <CS> adicional. La eliminación de ese elemento fijo todo este asunto. He informado a la sociedad de su error en la documentación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top