Grails - webové služby
Tento článek shrnuje mé zkušenosti s webovými službami Grailsu (a taky Groovy). Bude vycházet z pohledu uživatele - používajícího webové služby. Pokud hledáte víc ze strany serveru - poskytovatele služeb, můžete využít pluginy jako Metro nebo XFire.
Možnosti¶
Pokud se rozhodnete vytvořit klienta webové služby čistě v groovy, nemáte mnoho možností. Našel jsem pouze dvě knihovny: Groovy SOAP a Groovy WS.
První z nich je nepovolený (???) modul, takže se musí použít Groovy WS.
Sisyfovská výzva¶
Knihovny¶
Je těžké je zprovoznit. Šikovné příklady jsou na homepage Groovy WS, ale ani jeden z nich nefunguje. Dost dlouho mi trvalo, než jsem přišel na to, kde je chyba. Dostával jsem tuhle zvláštní chybovou hlášku:
1
2 Oct 26, 2008 9:48:19 PM org.apache.cxf.bus.spring.SpringBusFactory createBus
3 WARNING: Failed to create application context.
4 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cxf.wsdl.WSDLManager' defined in class path resource [META-INF/cxf/cxf.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.wsdl11.WSDLManagerImpl]: Constructor threw exception; nested exception is java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
5 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:881)
6 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:837)
7 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
8 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
9 at java.security.AccessController.doPrivileged(Native Method)
10
11 blah blah blah
Po chvíli pátrání jsem zjistil, že problém je s knihovnami. Knihovna Groovy WS se nemá ráda s xerces a xml-apis knihovnami.
SSL¶
Se SSL byla druhá obtíž. Nepamatuji si detaily. Bylo nějakým způsobem nemožné stáhnout WSDL přes SSL. Bylo nutné stahovat a ukládat to do systému souborů (???).
Kompatibilita¶
Groovy WS používá knihovny Apache CXF, které nepodporují RPC/kódované webové služby.
1 java.lang.RuntimeException: Error compiling schema from WSDL at {https://my.url?wsdl}: undefined simple or complex type 'soapenc:Array'
2 at org.apache.cxf.endpoint.dynamic.DynamicClientFactory$InnerErrorListener
Závěr¶
Nemyslím si, že by Groovy WS byla promyšlenou knihovnou. Je možné ji používat pro spotřebitelské webové služby, ale jen pro ty nejjednodušší. Jakmile se nám objeví SSL, autorizace...musí se použít větší síla. V mém případě tou větší silou byly Netbeans, které vygenerovaly všechny nezbytné třídy.
V neposlední řadě: na začátku jsem si vůbec nebyl jistý, v čem je problém. Myslel jsem si, že webové služby nepracují správně. Tak jsem použil testovací nástroj soapUI, abych zjistil, zda jsou webové služby v pořádku.
Comments