Soap - elemento não tem xsi: nil como uma propriedade, mas a desapego não torna o objeto não nulo

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

Pergunta

Sou um Noob total quando se trata de mensagens de XML e sabão. ... Aqui está a mensagem 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>

Geramos as classes com a ferramenta XSD.exe que nos deu aulas para desfazer. Este arquivo .xsd foi fornecido pela empresa da qual estamos recebendo as mensagens SOAP.

Aqui está o problema. Quando recebemos esse tipo de resposta da empresa, estamos procurando no CSCallBackRequest para esses três elementos internos, CDS, CDRP e UDI. Estamos tentando determinar qual tipo de retorno de chamada estamos recebendo. Minha suposição inicial foi quando usamos um XMLSerializer com tipo (Tipo de classe gerado), o elemento no cscallbackRequest que não possui o xsi: nil = true permitiria o objeto dentro do Tipo de classe gerado objeto não seria nulo. Mas esse não é o caso. Como verifico se uma propriedade com o não tem o XSI: nil Propherty após a desapego?

Foi útil?

Solução

Na verdade, eu descobri o problema. A mensagem SOAP que coloquei aqui é realmente um exemplo da documentação da empresa. Eu estava tentando usar isso como uma simulação para uma mensagem que receberíamos. Depois de comparar os arquivos de classe gerados do XSD, notei que o <CS> na verdade não foi definido nos arquivos. Quando estava desapegando, não encontraria esse elemento, portanto não preenche nada, já que começamos a desapegar a partir do <Data> elemento e além. Eu verifiquei os outros exemplos na documentação e aqueles não tinham isso extra <CS> elemento. A remoção desse elemento corrigiu todo esse problema. Notifiquei a empresa de seu erro na documentação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top