

SOAP, JAX-WS, Metro a časy v `java.time` | robonovotny
source link: https://novotnyr.github.io/scrolls/jax-ws-serializacia-java-time/
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.

SOAP, JAX-WS, Metro a časy v `java.time`
SOAP, JAX-WS, Metro a časy v java.time
2022/10/31
Eclipse Metro nevie pracovať s balíčkom java.time
.
To je zvláštne, lebo Java 8 je tu od roku 2014, ale vieme to napraviť!
V skutočnosti, s java.time
nevie pracovať knižnica JAXB (Jakarta XML Data Binding), ale tá je súčasťou Metra.
Budeme potrebovať:
-
Javu aspoň 11, ale podpora beží veselo na Jave 17 — poslednom LTS v čase písania článku
-
Eclipse Metro pre Jakarta EE 10 (JAX-WS 4.0)
-
Binding customizations Prispôsobenia prevodu XML na objekty a späť, zvané tiež marshalling, či serializácia.
-
knižnicu ThreeTen, ktorá zavedie podporu pre triedy z
java.time
do JAXB. -
Maven
-
plugin
jaxws-maven-plugin
z Metra
Súbor pre Maven
Do pom.xml
pridajme závislosti na Metre a ThreeTen:
1 | Eclipse Metro pre JAX-WS 4.0 v špecifikácii Jakarta EE 10. |
2 | Knižnica ThreeTen pre podporu „zabudnutých“ tried v JAXB. |
Webservis s dátumami a časmi
Predstavme si webservis, ktorý pracuje s dátumami.
Najprv požiadavka:
Odpoveď bude obsahovať aktuálny čas:
Schéma pre správy
Schéma pokryje požiadavku aj odpoveď:
Schému dáme v projekte do adresára src/wsdl .
Odtiaľ si ju vytiahne mavenovský plugin a tam ju nájde WSDL.
|
WSDL metadáta
WSDL metadáta budú pracovať s uvedenými správami v jedinej operácii: getNow
:
1 | Schéma pre správy vo formáte XSD. |
2 | Schému zahrnieme pomocou include, keďže menný priestor WSDL (urn:example:now ) a menný priestor schémy sa zhodujú. |
3 | Máme jedinú operáciu getNow . |
Schému dáme v projekte do adresára src/wsdl .
Odtiaľ si ju vytiahne mavenovský plugin.
|
Maven Plugin
Pridajme mavenový plugin, ktorý vygeneruje zdrojáky klienta:
Generovanie zdrojákov
Vygenerujme zdrojáky klienta:
Cieľ wsimport hľadá WSDL v adresári src/wsdl .
|
Uvidíme generované súbory:
target ├── generated-sources │ └── wsimport │ └── example │ └── now │ ├── ObjectFactory.java │ ├── TimeService.java │ └── TimeServices.java
Čo s dátumami?
Trieda TimeService
bude pracovať s dátumami typu XMLGregorianCalendar
:
1 | Metóda vracia XMLGregorianCalendar .
To nám nevyhovuje. |
XML Bindingy
Dodajme do projektu prispôsobenia mapovania XML na objekty a späť.
Dodáme XML Binding Customization. |
Do adresára src/main/jaxws
dodáme jaxb-bindings.xml
.
V tomto adresári ho odhalí Maven plugin. |
1 | Dôležité sú:
verzia
3.0, i keď používame JAB modernej verzie. Táto verzia platí i pre JAXB 4.0 (v JAX-WS 4.0). implicitný menný priestor
xjc
tento menný priestor je pre XJC — XML Java Compiler — prekladač XML na anotované Java triedy. Špeciálne ho použijeme na prispôsobenie prekladu dátumov a časov. deklarujeme menný priestor pre XML Schema (XSD), z neho vytiahneme dátový typ pre dátumy a časy |
2 | Deklarujeme pravidlá, ktoré platia globálne, pre všetky triedy. |
3 | Deklarujeme pravidlo, ktoré:
xmlType
vezme dátový typ z XML — tuto dátum a čas name
namapuje ho na dátový typ z Javy adapter
použije na to adaptér, teda Java kód. Ten použijeme z knižnice ThreeTen-JAXB. |
Element Pozor, existuje totiž aj rovnomenný element z |
Vygenerujme znovu zdrojáky klienta:
Uvidíme, že už sa používa java.time.LocalDateTime
.
1 | Používa sa LocalDateTime . |
2 | Generátor zdrojákov správne použije adaptér, ktorý sme uviedli v XML súbore. |
Kód pre klienta
Kód pre klienta následne len využije generované zdrojáky:
Zdrojové kódy
Zdrojové kódy sú k dispozícii na GitHube, v repozitári novotnyr/jaxws-java-util-time-threeten-client
.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK