Ruby jako WSDL/SOAP klient (1)

Tentokrát to bude bez dlouhých řečí. Chvíle laboratorní práce s nekvalitní dokumentací mě přivedla k několika poznatkům, o které se s vámi podělím. Ať chcete nebo ne.

Skutečná best of, a proč si to nepřiznat, jediná funkční knihovna pro Ruby se jmenuje SOAP4R [download, dokumentace]. A proč si to nepřiznat ještě jednou, není tak úplně funkční, jak by se zdálo (ale k tomu se dostaneme posléze).

Nejprve mějme nějakou pěknou službu a její WSDL popis. Stáhněte si ho lokálně a pojmenujte třeba mocna_sluzba.wsdl (čistě pro případ, že budete zkoušet můj pseudo-návod metodou copy and paste).

Máte? Máte. Dobře. Protože jste si nainstalovali SOAP4R, dostalo se vám také nástroje wsdl2ruby. Excelentní stroj, který udělá z mocného WSDL popisu prakticky celého klienta, resp. driver (říkejte si tomu ovladač nebo řadič, jak je ctěná libost). Stačí spustit:

wsdl2ruby.rb --wsdl mocna_sluzba.wsdl --type client --force

Bleskově vzniklý klient bude téměř prázdný, takže ho pravděpodobně budete muset upravit, abyste mohli začít používat službu (popsanou ve WSDL).

Pokud dostanete chybu typu undefined method `new' for nil:NilClass (NoMethodError) při použití wsdl2ruby (proto jste pravděpodobně tady), budete muset záplatovat. Bez velkého hledání a ještě než pořádně začnete, použijte patch 1747. Potom bude všechno fungovat tak jak očekáváte. Víceméně.

SSL untrusted certificate

Další věc, na kterou můžete narazit je všeříkající chyba certificate verify failed (OpenSSL::SSL::SSLError). To se stane, když se snažíte o přístup k serveru, který používá SSL certifikát, jemuž nedůvěřujete. Jednou z možností je začít serveru důvěřovat nebo zvolit rychlou cestu a vypnout kontrolu certifikátu úplně.

Upozornění: Tohle děti doma nezkoušejte, oni jsme profesionál. Vypnout kontrolu certifikátů nedoporučuji dokonce ani pro účely testování.

Jak na to? Máte předpokládám nějaký soubor, který se jmenuje *WebServiceClient.rb (ten jste získali pomocí wsdl2ruby již dříve). V souboru je hned na první stránce řádek obj.wiredump_dev STDERR if $DEBUG. Tím se nastavuje klientovi případný ladící výstup. Abyste měli vyhráno, za tento řádek doplňte ještě jeden:

obj.options["protocol.http.ssl_config.verify_mode"] = nil

Pokud si nechcete zahrávat s ohněm, můžete si stáhnout certifikát certifikační autority daného serveru, uložit ve formátu X.509 Base-64 (například do souboru duveryhodna_ca.cer) a potom, místo zmíněného vypnutí kontroly, naopak podstrčit svému klientovi správný certifikát, skrz který bude ověřovat pravost serveru:

obj.options["protocol.http.ssl_config.ca_file"] = 'duveryhodna_ca.cer'

Jestli náhodou nevíte, oč s těmi certifikáty vlastně jde, měli byste přestat používat elektronické bankovnictví a možná si o tom nejprve něco přečíst.

Chcete další praktické příklady? Napište si o ně. Jinak budeme pokračovat zase někdy jindy. 😉

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Time limit is exhausted. Please reload CAPTCHA.

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..