2010-09-28 21 views
1

Je suis un total de noob quand il s'agit de messages XML et SOAP. ... Voici le message SOAP.Soap - L'élément n'a pas xsi: nil en tant que propriété, mais la désérialisation ne rend pas l'objet non nul.

<?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> 

Nous avons généré les classes avec l'outil xsd.exe qui nous a donné des classes à désérialiser. Ce fichier .xsd a été fourni par la société à partir de laquelle nous recevons les messages SOAP.

Voici le problème. Lorsque nous recevons ce type de réponse de la part de l'entreprise, nous examinons CSCallbackRequest pour les trois éléments suivants: CDS, CDRP et UDI. Nous essayons de déterminer quel type de rappel nous recevons. Ma supposition initiale était quand nous utilisons un XMLSerializer avec le type (Generated Class Type), l'élément dans CSCallbackRequest qui n'a pas le xsi: nil = true permettrait à l'objet dans l'objet Generated Class Type ne serait pas nul. Mais ce n'est pas le cas. Comment puis-je vérifier si une propriété n'a pas la propriété xsi: nil après la désérialisation?

+0

Dans le schéma, comment les éléments CSCallbackRequest et CDS/CDRP/UDI sont-ils définis? – superfell

Répondre

0

En fait, j'ai compris le problème. Le message SOAP que je mets ici est en fait un exemple de la documentation de l'entreprise. J'essayais d'utiliser cela comme une maquette pour un message que nous recevrions. Après avoir comparé les fichiers de classes générés à partir de la XSD, j'ai remarqué que le <CS> n'était pas réellement défini dans les fichiers. Quand il se désérialisait, il ne trouvait pas cet élément, donc ne peuplait rien, puisque nous avons commencé à désérialiser à partir de l'élément <Data> et au-delà. J'ai vérifié les autres exemples dans la documentation et ceux-ci n'ont pas cet élément supplémentaire <CS>. La suppression de cet élément a réglé toute cette question. J'ai informé la société de leur erreur dans la documentation.