JAX-WS podporuje webové služby založené na SOAP. Časť 2 tejto štvordielnej série o webových službách Java SE definuje webovú službu na prevod jednotiek založenú na SOAP, vytvára a potom lokálne overuje túto webovú službu prostredníctvom predvoleného ľahkého servera HTTP (popisovaného v časti 1), interpretuje dokument WSDL služby a pristupuje k službe od jednoduchého klienta.
Definovanie webovej služby na prevod jednotiek
Webová služba na prevod jednotiek, ktorú som pomenoval UC, pozostáva zo štyroch funkcií na prevod medzi centimetrami a palcami a medzi stupňami Fahrenheita a stupňami Celzia. Aj keď by tento príklad mohol byť navrhnutý ako jedna trieda Java, rozhodol som sa postupovať podľa osvedčených postupov tak, že som ho vytvoril ako rozhranie Java a triedu Java. Zoznam 1 predstavuje webové služby UC
rozhranie.
Zoznam 1. Rozhranie koncového bodu služby webovej služby UC
balíček ca.javajeff.uc; import javax.jws.WebMethod; import javax.jws.WebService; @WebService verejné rozhranie UC {@WebMethod double c2f (dvojité stupne); @WebMethod double cm2in (double cm); @WebMethod double f2c (dvojité stupne); @WebMethod double in2cm (double in); }
UC
opisuje a Rozhranie koncového bodu služby (SEI), čo je rozhranie Java, ktoré sprístupňuje operácie rozhrania webovej služby z hľadiska abstraktných metód Java. Klienti komunikujú s webovými službami založenými na SOAP prostredníctvom svojich SEI.
UC
je vyhlásený za SEI prostredníctvom @Webová služba
anotácia. Keď je anotované rozhranie alebo trieda Java @Webová služba
, všetko verejné
metódy, ktorých parametre, návratové hodnoty a deklarované výnimky sa riadia pravidlami definovanými v časti 5 špecifikácie JAX-RPC 1.1, popisujú operácie webových služieb. Pretože iba verejné
metódy možno deklarovať na rozhraniach, verejné
pri deklarovaní nie je potrebné vyhradené slovo c2f ()
, cm2in ()
, f2c ()
a in2cm ()
. Tieto metódy sú implicitné verejné
.
Každá metóda je tiež anotovaná @WebMethod
. Hoci @WebMethod
nie je v tomto príklade nevyhnutné, jeho prítomnosť posilňuje skutočnosť, že anotovaná metóda vystavuje operáciu webovej služby.
Zoznam 2 predstavuje webové služby UCImpl
trieda.
Výpis 2. Znak implementácie služby webovej služby UC
balíček ca.javajeff.uc; import javax.jws.WebService; @WebService (endpointInterface = "ca.javajeff.uc.UC") verejná trieda UCImpl implementuje UC {@Override public double c2f (dvojité stupne) {návratové stupne * 9,0 / 5,0 + 32; } @Override public double cm2in (double cm) {return cm / 2.54; } @Override public double f2c (dvojité stupne) {návrat (stupne - 32) * 5,0 / 9,0; } @Override public double in2cm (double in) {return in * 2,54; }}
UCImpl
opisuje a Bean implementácie služby (SIB), ktorý poskytuje implementáciu SEI. Táto trieda je deklarovaná ako SIB prostredníctvom @WebService (endpointInterface = "ca.javajeff.uc.UC")
anotácia. The endpointInterface
element spája tento SIB s jeho SEI a je nevyhnutné vyhnúť sa nedefinovaným chybám typu portu pri spustení klientskej aplikácie, ktorá sa uvedie neskôr.
The realizuje UC
doložka nie je úplne nevyhnutná. Ak toto ustanovenie nie je k dispozícii, UC
rozhranie je ignorované (a je nadbytočné). Je však dobré si to ponechať realizuje UC
aby prekladač mohol overiť, že metódy SEI boli implementované v SIB.
Hlavičky metód SIB nie sú anotované @WebMethod
pretože táto anotácia sa zvyčajne používa v kontexte SEI. Ak by ste však mali pridať a verejné
(ktorá zodpovedá pravidlám v časti 5 špecifikácie JAX-RPC 1.1) na SIB, a ak táto metóda nevystavuje operáciu webovej služby, anotujete hlavičku metódy @WebMethod (vylúčiť = true)
. Priradením pravda
do @WebMethod
je vylúčiť
prvku zabránite priradeniu tejto metódy k operácii.
Táto webová služba je pripravená na zverejnenie, aby k nej mali prístup klienti. Zoznam 3 predstavuje a Vydavateľ UCP
aplikácia, ktorá plní túto úlohu v kontexte predvoleného ľahkého servera HTTP.
Zoznam 3. Publikovanie UC
import javax.xml.ws.Endpoint; import ca.javajeff.uc.UCImpl; public class UCPublisher {public static void main (String [] args) {Endpoint.publish ("// localhost: 9901 / UC", new UCImpl ()); }}
Publikovanie webovej služby zahŕňa uskutočnenie jedného hovoru na server Koncový bod
triedy Publikovanie koncového bodu (adresa reťazca, implementátor objektu)
triedna metóda. The adresa
parameter identifikuje URI priradený k webovej službe. Rozhodol som sa zverejniť túto webovú službu na lokálnom hostiteľovi zadaním localhost
(ekvivalent IP adresy 127.0.0.1) a číslo portu 9901
(ktorý je s najväčšou pravdepodobnosťou k dispozícii). Tiež som si svojvoľne vybral / UC
ako publikačná cesta. The realizátor
parameter identifikuje inštanciu UC
je SIB.
The zverejniť ()
metóda vytvorí a zverejní koncový bod pre zadanú realizátor
objekt na danom adresa
a používa realizátor
anotácie na vytvorenie dokumentov WSDL (Web Services Definition Language) a schémy XML. Spôsobuje to vytváranie a konfiguráciu potrebnej serverovej infraštruktúry implementáciou JAX-WS na základe nejakej predvolenej konfigurácie. Ďalej táto metóda spôsobí, že aplikácia bude bežať neurčito. (Na počítačoch so systémom Windows ukončite aplikáciu súčasným stlačením klávesov Ctrl a C.)
Budovanie a overovanie webovej služby
Nie je ťažké vybudovať predtým definovanú webovú službu UC. Najprv musíte vytvoriť vhodnú adresárovú štruktúru obsahujúcu príslušné súbory. Túto úlohu splňte vykonaním nasledujúcich krokov:
- V rámci aktuálneho adresára vytvorte a
ca.
adresár. V rámcica.
, Vytvorjavajeff
adresár. Nakoniec v rámcijavajeff
, Vytvoruc
adresár. - Kopírovať výpis 1 do a
UC.java
zdrojový súbor a uložiť tento súbor vca / javajeff / uc
. - Skopírujte výpis 2 do a
UCImpl.java
zdrojový súbor a uložiť tento súbor vca / javajeff / uc
. - Skopírujte výpis 3 do a
UCPublisher.java
zdrojový súbor a uložte tento súbor do aktuálneho adresára, ktorý obsahujeca.
adresár.
Ďalšou úlohou je zostaviť tieto zdrojové súbory. Za predpokladu, že ste nezmenili adresáre, vykonajte nasledujúci príkaz na kompiláciu týchto zdrojových súborov v prostredí Java SE 9 (vynechajte --add-modules java.xml.ws
v Java SE 6, 7 alebo 8):
javac --add-modules java.xml.ws UCPublisher.java
Ak sa tieto zdrojové súbory kompilujú úspešne, spustením tejto aplikácie v prostredí Java 9 vykonajte nasledujúci príkaz (vynechajte --add-modules java.xml.ws
v Java SE 6, 7 alebo 8):
java --add-modules java.xml.ws UCPublisher
Keď je aplikácia spustená, pomocou webového prehliadača overte, či táto webová služba beží správne, a získajte prístup k svojmu dokumentu WSDL. Spustite obľúbený webový prehliadač a do panela s adresou zadajte nasledujúci riadok:
// localhost: 9901 / UC
Obrázok 1 zobrazuje výslednú webovú stránku vo webovom prehliadači Google Chrome.
Obrázok 1. Webová stránka UC poskytuje podrobné informácie o zverejnenej webovej službe
Obrázok 1 predstavuje kvalifikovanú službu a názvy portov koncového bodu webovej služby. (Všimnite si, že názov balíka bol obrátený - uc.javajeff.ca
namiesto ca.javajeff.uc
). Klient používa tieto mená na prístup k službe.
Obrázok 1 tiež predstavuje URI adresy webovej služby, umiestnenie dokumentu WSDL webovej služby (URI webovej služby doplnené o ? wsdl
reťazec dotazu) a názov balíka kvalifikovanej triedy implementácie webových služieb.
Interpretácia dokumentu WSDL webovej služby
Umiestnenie dokumentu WSDL webovej služby UC je uvedené ako odkaz. Kliknutím na tento odkaz zobrazíte dokument WSDL, ktorého obsah je uvedený v zozname 4.
Zoznam 4. Dokument WSDL UC
A Dokument WSDL je dokument XML s a definície
koreňový prvok, ktorý z dokumentu WSDL nerobí nič iné ako súbor definícií. Tento prvok obsahuje rôzne xmlns
atribúty na identifikáciu rôznych štandardných menných priestorov spolu s targetNameSpace
a názov
atribúty:
- The
targetNamespace
atribút vytvorí priestor názvov pre všetky používateľom definované prvky v dokumente WSDL (napríkladc2f
prvok definovaný prostredníctvomspráva
prvok s týmto názvom). Tento priestor názvov sa používa na rozlíšenie medzi používateľom definovanými prvkami aktuálneho dokumentu WSDL a používateľom definovanými prvkami importovaných dokumentov WSDL, ktoré sú identifikované pomocou kódov WSDL.dovoz
element. Podobným spôsobom ajtargetNamespace
atribút, ktorý sa objavuje v súbore založenom na schéme XMLschéma
element vytvára priestor názvov pre svoje užívateľom definované prvky jednoduchého typu, prvky atribútov a prvky zložitého typu. - The
názov
atribút identifikuje webovú službu a používa sa iba na dokumentáciu služby.
Vnorené do definície
sú typy
, správa
, portType
, viazanie
a služby
prvky: