Od WSDL k webovej službe — generovanie servera a klienta pomocou Metro na Java 1...
source link: https://novotnyr.github.io/scrolls/od-wsdl-k-webovej-sluzbe-metro-pre-java-17/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Od WSDL k webovej službe — generovanie servera a klienta pomocou Metro na Java 17
Od WSDL k webovej službe — generovanie servera a klienta pomocou Metro na Java 17
2022/10/30
Navrhli sme webovú službu pre SOAP pomocou contract-first? Máme teda kontrakt reprezentovaný súborom WSDL?
Poďme vygenerovať kód pre server SOAP na kombinácii:
-
Java 17
-
špecifikáciu Jakarta XML Web Services 4.0 (nástupca JAX-WS)
-
referenčnú implementáciu Eclipse Metro.
-
plugin pre Maven z knižnice Eclipse Metro.
Príklad a štruktúra dát
Vybudujme si službu pre objednanie parkovania. V požiadavke pošleme EČV vozidla a parkovaciu zónu a v odpovedi získame identifikátor parkovacieho lístka a dátum platnosti.
Pripravíme si:
-
schému pre správy v tvare XSD (XML Schema)
-
popisný súbor WSDL
-
mavenovský projekt s
pom.xml
pre serverovskú časť.
XML schéma
Vezmeme schému pre správy pomocou XML Schemy.
Kompletný súbor schémy parking.xsd nájdeme na konci článku, resp. v repozitári na GitHube.
|
WSDL súbor
Vezmeme si hotový súbor pre WSDL.
Kompletný súbor schémy parking.wsdl nájdeme na konci článku, resp. v repozitári na GitHube.
|
Projekt pre serverovskú časť
Založme si nový projekt založený na buildovacom nástroji Maven.
V pom.xml
definujeme:
-
verziu kódu pre kompilátor: použijeme Javu 17
-
závislosť na knižnici Eclipse Metro
-
Maven plugin pre generovanie kódu servera
Verzia kompilátora
Dodajme nasledovné projektové vlastnosti:
Závislosť na knižnici Metro
Pridajme si závislosť na knižnici Metro:
Maven Plugin
Generovanie kostry serverovskej časti projektu, teda generovanie zdrojových kódov podľa dodaného WSDL súboru uskutočníme cez mavenovský plugin.
1 | Definujme odkaz na názov WSDL, z ktorého vygenerujeme kód. |
2 | Uvedieme cestu k adresáru v projekte, z ktorého vytiahneme WSDL súbor. |
3 | Aby sa v generovanom kóde zbytočne neobjavovali celé cesty k lokálnemu súborovému systému používateľa, uveďme explicitnú adresu ku kódu. |
Ak umiestnime WSDL súbor medzi prostriedky (resources), objaví sa vo výslednom JAR archíve a teda v ceste |
Lokácia wsdlLocation s lomkou na začiatku znamená, že WSDL súbor pri budovaní klientskeho kódu sa vytiahne z cesty CLASSPATH .
|
Celý pom.xml
Celý súbor pom.xml nájdeme na na GitHube.
|
Rozmiestnenie súborov
Oba súbory — parking.wsdl
aj parking.xsd
umiestnime do src/main/resources
, pretože tak sme to nastavili v pom.xml
v adresári wsdlDirectory
.
Zostavenie projektu
Zdrojáky pre server nagenerujeme nasledovne:
Ak spúšťame Maven zo shellu, dajme si pozor, aby Java, v ktorej sa spúšťal Maven, bola vo verzii 17. |
Zdrojáky sa nagenerujú do priečinka:
target/generated-sources/wsimport/
Pre naše WSDL sa vygeneruje nasledovná štruktúra:
Názvy priečinkov / balíčkov sa odvodia z targetNamespace vo WSDL či schéme.
|
Konfigurácia projektu
Adresár target/generated-sources/wsimport/
je užitočné potrebné pridať do projektu ako miesto so zdrojovými kódmi.
Eclipse
Pravý klik na adresár v strome Package List, a z kontextového menu Build Path | Use as Source Folder. IntelliJPravý klik na adresár |
Implementácia servera
Implementácia servera znamená vytvorenie triedy, ktorá bude implementovať triedu org.example.ParkingService
.
1 | Implementujeme interfejs, ktorý vznikol generovaním kódu. |
2 | V atribúte endpointInterface uvedieme interfejs s kontraktom webovej služby pre JAX-WS. |
3 | Pripravíme implementáciu metódy — v tomto prípade veľmi jednoduchú. |
Interfejs
Ak vynecháme atribút |
Spustenie servera
Server môžeme spustiť jednoducho:
Server beží na porte 8888 a spĺňa špecifikáciu WSDL.
Táto služba zverejňuje WSDL na adrese http://localhost:8888/parking?wsdl .
Toto WSDL je však autogenerované, čo popiera zmysel ručnej tvorby.
|
Spustenie servera s naším WSDL
Ak chceme použiť existujúce WSDL a to zverejniť klientovi, musíme prispôsobiť nasadenie služby.
Budeme predpokladať, že v CLASSPATH máme aj WSDL (parking.wsdl
) aj XSD (parking.xsd
).
1 | Musíme si pripraviť zoznam pre metadáta: teda WSDL a XSD. |
2 | Vytvoríme objekt Source reprezentujúci XML súbor pre WSDL či schému.
Tento objekt načítame z CLASSPATH : to je reprezentované lomkou v argumente getResourceAsStream . |
3 | Každý takýto objekt Source potrebuje jednoznačný identifikátor v tvare URL s použitím protokolu HTTP alebo file .
Keďže na konkrétnej hodnote nezáleží, vytvoríme si vymyslený ukážkový identifikátor. |
4 | Súbor dodáme do metadát. |
5 | Pomocou properties definujeme filter na službu service a port z WSDL, na ktorý použijeme naše metadáta, teda na ktorom zmeníme WSDL a XML schému XSD.
Pomocou WSDL_SERVICE určíme kvalifikované meno (menný priestor a názov elementu) pre element wsdl:service z WSDL. |
6 | Pomocou WSDL_PORT určíme kvalifikované meno (menný priestor a názov elementu) pre element wsdl:port z WSDL. |
7 | Vytvoríme nový endpoint nad našou triedou s implementáciou servera. |
8 | Nastavíme filter cez properties. |
9 | Nastavíme nové metadáta služby. |
10 | Endpoint vypublikujeme na danej adrese. |
Backend teraz môžeme spustiť ako Java aplikáciu!
Na adrese http://localhost:8888/parking?wsdl uvidíme našej ručne písané WSDL!
|
Pri deklarovaní filtra (properties) sa musia kvalifikované názvy presne zhodovať s názvami vo WSDL.
|
Výsledný repozitár
Výsledný repozitár je na GitHube, v repozitári novotnyr/jaxws-wsdl-server-2022.
Zdrojáky
XML Schéma
Deskriptor pre Maven
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK