Grails - webové služby

Added by Ondřej Bezucha about 1 year ago

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