SoapUI je profesionálny nástroj na testovanie webových servisov (SOAP a REST). Nekomerčná verzia je voľne dostupná na https://www.soapui.org/downloads/soapui.html
XML schema rozlišuje dva spôsoby ako definovať odvodené typy
Poznámka:Objektovo orientované programovacia jazyky (ako java) zvyčajne poznajú len prvý spôsob – extension.
Možnosti, ktoré poskytuje XML-schéma pri návrhu servisu postupom contract-first ilustrujeme v nasledujúcich variantách servisu pre poisťovňu
Predmety/I-ASOS/P5/p5Schema1.xsd
Predmety/I-ASOS/P5/p5Schema2.xsd
Všimnite si, že v tomto prípade je návrh odvodený od zmluvy (tak ako štvorec je špeciálny prípad obdĺžnika)
Predmety/I-ASOS/P5/p5Schema3.xsd
Pozrite vygenerované triedy Navrh a Zmluva v jednotlivých variantách a všimnite si rozdiely v ich štruktúre.
Implementácia operácie navrhZmluvy môže byť však rovnaká pre všetky varianty:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public org.netbeans.xml.schema.p5schema.Zmluva navrhZmluvy(org.netbeans.xml.schema.p5schema.Navrh part1) { Zmluva z = new Zmluva(); z.setDruh(part1.getDruh()); z.getUcastnik().addAll(part1.getUcastnik()); z.setMajitel(part1.getMajitel()); z.getPoistenec().addAll(part1.getPoistenec()); z.setCislo("Z123"); // nastavenie casu je trochu komplikovane try { GregorianCalendar c = new GregorianCalendar(); c.setTime(new Date()); XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(c); z.setUzavreta(xmlDate); } catch (DatatypeConfigurationException ex) { Logger.getLogger(NewWebServiceFromWSDL.class.getName()).log(Level.SEVERE, null, ex); } return z; } |
Volania web-servisových operácií sú štandardne synchrónne, t.j. klient musí čakať kým server požiadavku nespracuje a nepošle odpoveď. To sa týka aj void operácií, pretože výstupnú správu posiela každá obojsmerná soap-operácia (aj ke nevracia žiadne údaje). Ak nechcem výstupnú správu vôbec generovať musíme soap-operáciu definovať ako jednosmernú. V jave slúži na to anotácia @Oneway
1 2 3 4 5 6 7 8 9 10 |
public void navrhZmluvy(Navrh part1) { try { System.out.println("Spracovanie zmluvy zacina .. ") ; // spracovanie .. trva niekolko sekund Thread.sleep(5000); System.out.println("Hotovo"); } catch (InterruptedException ex) { Logger.getLogger(NewWebService.class.getName()).log(Level.SEVERE, null, ex); } } |
Keď má operácia návratovú hodnotu nemôže byť jednosmerná. Tomto prípade môžeme asynchonnú komunikáciu dosiahnuť pomocou asynchrónneho klienta. Netbeans umožňuje vygenerovať proxy objekt aj pre asynchrónnu komunikáciu nasledovne:
otvoríme dialog: Web Service References/ Edit Web Service Attributes..
záložke WSDL customization vyhľadáme operáciu a zvolíme Enable asynchronuos client
netbeans vygeneruje 2 proxy objetky pre asynchrónnu komunikáciu, jeden založený na pollingu a druhý na callbackoch
Pozn. Vložiť asynchrónne volania do kódu klientskej aplikácie možno rovnako pomocou Insert code / Call Web Service Operation…