Как проникнуть в типы данных SOAP?

Никогда еще не работая с SOAP, я теперь пытаюсь следовать этому руководству, чтобы узнать о службе SOAP голландского государственного земельного регистра (kadaster.nl):

>>> 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') 

Поэтому я теперь понимаю, что мне нужно вызвать метод VerzoekTotInformatie (который переводится как RequestForInformation) с сообщением типа VerzoekTotInformatieRequest .

Но отсюда я немного потерялся. Как создать такой VerzoekTotInformatieRequest ? Как я могу еще больше VerzoekTotInformatieRequest в этот VerzoekTotInformatieRequest ?

Любые советы о том, как исходить отсюда, будут очень признательны.

пс. Если я должен использовать другую библиотеку (но я предпочитаю Python), это тоже нормально. Я читал хорошие вещи о пеной , но, поскольку у меня не было фиксации более 3 лет, я считал это отказом. Я также попробовал pysimplesoap, что кажется хорошим, но я не знал, как использовать его для интроспекции в SOAP-сервис.

One Solution collect form web for “Как проникнуть в типы данных SOAP?”

Ваши наблюдения по этому вопросу правильные. Но я сначала исследовал WSDL с помощью инструмента SOAP-клиента, чтобы понять его структуру и ссылки. Когда вы смотрите на WSDL, обратите внимание, как типы определены в ссылочной схеме verzoekTotInformatie-2.1.xsd именем verzoekTotInformatie-2.1.xsd . Затем эта схема ссылается и включает 20 других файлов схемы:

Изображение с высоким разрешением – нажмите здесь.

введите описание изображения здесь

Очевидно, что в вашем случае это становится кошмаром, чтобы следить за всем, просто прочитав себя (WSDL не требуется для чтения человеком по дизайну в любом случае, но ваш очень, очень вложенный).

Поэтому я предлагаю вам импортировать этот WSDL в пользовательском интерфейсе SOAP (это бесплатно, это то, что я использовал на скриншоте выше) и создать новый проект с использованием URL-адреса WSDL:

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

Он будет импортировать eveything и создать образец запроса для вас. Для меня он даже попытался добавить некоторые образцы данных lorem-ipsum, основанные на типах полей:

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

После того, как все будет импортировано, вы можете развернуть проект, а затем щелкнуть правой кнопкой мыши по привязке VezorekToInformatieBinding и выбрать « Show Interface Viewer чтобы изучить любые типы (включая запрос), которые вам нужно дополнительно изучить, которые определены в ссылочных схемах.

С полным определением в вашем распоряжении будет намного легче сделать интроспекцию. В вашем случае должна быть возможность импортировать WSDL и сначала «развернуть» все включенные / ссылки, а затем начать интроспекцию, когда у вас будет весь доступный снимок. Если такой опции нет, вам, возможно, придется следовать рекомендациям и включать один за другим.

Надеюсь, это поможет в качестве отправной точки. Удачи!

Python - лучший язык программирования в мире.