Programovanie

Webové služby v prostredí Java SE, časť 2: Vytváranie webových služieb SOAP

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 @WebMethodje 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 UCje SIB.

The zverejniť () metóda vytvorí a zverejní koncový bod pre zadanú realizátor objekt na danom adresaa používa realizátoranotá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:

  1. V rámci aktuálneho adresára vytvorte a ca. adresár. V rámci ca., Vytvor javajeff adresár. Nakoniec v rámci javajeff, Vytvor uc adresár.
  2. Kopírovať výpis 1 do a UC.java zdrojový súbor a uložiť tento súbor v ca / javajeff / uc.
  3. Skopírujte výpis 2 do a UCImpl.java zdrojový súbor a uložiť tento súbor v ca / javajeff / uc.
  4. Skopírujte výpis 3 do a UCPublisher.java zdrojový súbor a uložte tento súbor do aktuálneho adresára, ktorý obsahuje ca. 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íklad c2f prvok definovaný prostredníctvom sprá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 aj targetNamespace atribút, ktorý sa objavuje v súbore založenom na schéme XML sché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ícietypy, správa, portType, viazaniea služby prvky:

$config[zx-auto] not found$config[zx-overlay] not found