2015-04-24 2 views
1

ayant jamais travaillé avec du savon avant, je suis maintenant essayer de suivre this tutorial pour en savoir plus sur le service SOAP du registre foncier du gouvernement néerlandais (de kadaster.nl):Comment introspecter les types de données SOAP?

>>> from SOAPpy import WSDL 
>>> server = WSDL.Proxy('http://www1.kadaster.nl/1/schemas/kik-inzage/20141101/verzoekTotInformatie-2.1.wsdl') 
/Library/Python/2.7/site-packages/wstools/XMLSchema.py:1280: UserWarning: annotation is ignored 
    warnings.warn('annotation is ignored') 
/Library/Python/2.7/site-packages/wstools/XMLSchema.py:1217: UserWarning: Not keeping schema component. 
    warnings.warn("Not keeping schema component.") 
>>> server.methods.keys() 
[u'VerzoekTotInformatie'] 
>>> callInfo = server.methods['VerzoekTotInformatie'] 
>>> callInfo.inparams[0].name 
u'body' 
>>> callInfo.inparams[0].type 
(u'http://www.kadaster.nl/schemas/kik-inzage/20141101', u'VerzoekTotInformatieRequest') 

Je comprends maintenant je dois appelez la méthode VerzoekTotInformatie (qui se traduit par RequestForInformation) avec un message de type VerzoekTotInformatieRequest.

Mais à partir d'ici, je suis perdu. Comment puis-je construire un tel VerzoekTotInformatieRequest? Comment puis-je introspecter plus loin dans ce VerzoekTotInformatieRequest?

Des conseils sur la façon de procéder à partir d'ici seraient grandement appréciés.

ps. Si je devais utiliser une autre bibliothèque (mais je préfère Python), c'est aussi correct. J'ai lu de bonnes choses à propos de suds, mais puisque cela n'a pas eu un commit for over 3 years je l'ai considéré abandonware. J'ai aussi essayé pysimplesoap, ce qui me semble bien, mais je ne savais pas comment l'utiliser pour introspecter le service SOAP.

Répondre

3

Vos observations à ce stade sont exactes. Mais je voudrais d'abord explorer le WSDL avec un outil client SOAP pour avoir une idée de sa structure et de ses références. Lorsque vous regardez le WSDL, notez comment les types sont définis dans un schéma .xsd référencé nommé verzoekTotInformatie-2.1.xsd. Ensuite, ce schéma fait référence et dont 20 autres fichiers de schéma:

High-res image - click here.

enter image description here

Il est évident que dans votre cas, il devient un cauchemar pour suivre tout simplement en vous lisant (WSDL n'est pas indended pour la lecture humaine par conception de toute façon, mais la vôtre est très, très imbriquée).

Je vous suggère d'importer ce WSDL dans SOAP UI (il est libre, ce que j'utilisé dans la capture d'écran ci-dessus) et de créer un nouveau projet en utilisant l'URL WSDL:

http://www1.kadaster.nl/1/schemas/kik-inzage/20141101/verzoekTotInformatie-2.1.wsdl

Il importera Tout et créez un exemple de demande pour vous. Pour moi, il a même essayé d'ajouter quelques exemples de données Lorem-ipsum, en fonction des types de champs:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.kadaster.nl/schemas/kik-inzage/20141101" xmlns:v20="http://www.kadaster.nl/schemas/kik-inzage/ip-aanvraag/v20141101"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ns:VerzoekTotInformatieRequest> 
     <v20:Aanvraag> 
      <v20:berichtversie>4.7</v20:berichtversie> 
      <v20:klantReferentie>cum murmure</v20:klantReferentie> 
      <v20:productAanduiding>aeoliam venit</v20:productAanduiding> 
      <!--Optional:--> 
      <v20:Gebruiker> 
       <v20:identificatie>ventos tempestatesqu</v20:identificatie> 
      </v20:Gebruiker> 
      <v20:Ingang> 
       <!--You have a CHOICE of the next 3 items at this level--> 
       <v20:Object> 
        <!--You have a CHOICE of the next 2 items at this level--> 
        <v20:IMKAD_OZLocatie> 
        <v20:adres> 
         <v20:BAG_NummerAanduiding> 
          <v20:postcode>temper</v20:postcode> 
          <v20:huisnummer>turbine corripuit</v20:huisnummer> 
          <!--Optional:--> 
          <v20:huisletter>r</v20:huisletter> 
          <!--Optional:--> 
          <v20:huisnummertoevoeging>frem</v20:huisnummertoevoeging> 
         </v20:BAG_NummerAanduiding> 
        </v20:adres> 
        <!--Optional:--> 
        <v20:bijOfTegenover>ferant rapidi</v20:bijOfTegenover> 
        </v20:IMKAD_OZLocatie> 
        <v20:IMKAD_KadastraleAanduiding> 
        <!--Optional:--> 
        <v20:gemeente>sceptra tenens</v20:gemeente> 
        <v20:sectie>turbine corripuit scopuloque</v20:sectie> 
        <v20:perceelnummer>flamm</v20:perceelnummer> 
        <!--Optional:--> 
        <v20:appartementsindex>prof</v20:appartementsindex> 
        <!--Optional:--> 
        <v20:deelperceelnummer>nubi</v20:deelperceelnummer> 
        <!--Optional:--> 
        <v20:AKRKadastraleGemeenteCode>ac vi</v20:AKRKadastraleGemeenteCode> 
        </v20:IMKAD_KadastraleAanduiding> 
       </v20:Object> 
       <v20:PersoonsIngang> 
        <v20:Persoon> 
        <!--You have a CHOICE of the next 4 items at this level--> 
        <v20:BSN>100</v20:BSN> 
        <!--Optional:--> 
        <v20:KVKNummer>rapidum</v20:KVKNummer> 
        <!--Optional:--> 
        <v20:RSIN>caelumque</v20:RSIN> 
        <v20:kadastraleIdentificatie>100</v20:kadastraleIdentificatie> 
        </v20:Persoon> 
        <!--Optional:--> 
        <v20:Restrictie> 
        <v20:maximumAantalObjecten>100</v20:maximumAantalObjecten> 
        </v20:Restrictie> 
       </v20:PersoonsIngang> 
       <v20:Brondocument> 
        <v20:IMKAD_DeelEnNummer> 
        <v20:deel>circu</v20:deel> 
        <v20:nummer>coniu</v20:nummer> 
        <!--Optional:--> 
        <v20:reeks>arce sceptra</v20:reeks> 
        <v20:ipa_registerCodeSub>circum claustra fremunt</v20:ipa_registerCodeSub> 
        </v20:IMKAD_DeelEnNummer> 
       </v20:Brondocument> 
      </v20:Ingang> 
     </v20:Aanvraag> 
     </ns:VerzoekTotInformatieRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 

Après tout est importé, vous pouvez étendre le projet, puis faites un clic droit sur le VezorekToInformatieBinding obligatoire et sélectionnez Show Interface Viewer pour explorer tous les types (y compris la requête) dont vous avez besoin pour approfondir l'introspection qui sont définis dans les schémas référencés.

Avec toute la définition à votre disposition, il sera beaucoup plus facile de faire une introspection. Dans votre cas, il doit y avoir une option pour importer le WSDL et "développer" toutes les inclusions/références d'abord et ensuite seulement commencer l'introspection, quand vous avez toute l'image disponible. Si cette option n'existe pas, vous devrez peut-être suivre les références et les inclure une par une.

Espérons que cela aide comme point de départ. Bonne chance!

+0

C'est génial! Votre réponse est bien meilleure que ce que j'avais espéré! Merci un million! – kramer65

+0

Heureux d'être utile! Je vous en prie! –

+0

Bonjour @PlamenPetrov.Après l'aide impressionnante que vous m'avez donné sur ma question ici, je suis maintenant confronté à un problème avec le xml renvoyé créant un TypeError dans pysimplesoap ('TypeError: Tag: IMKAD_Perceel invalide (type non trouvé)'). J'ai créé une nouvelle question à ce sujet ici: http://stackoverflow.com/questions/30258321/typeerror-in-soaprequest-using-pysimplesoap. Souhaitez-vous savoir quelque chose sur la façon de corriger cette erreur de type? – kramer65