JAX-WS atbalsta uz SOAP balstītus tīmekļa pakalpojumus. Šīs četrdaļīgās sērijas Java SE tīmekļa pakalpojumos 2. daļa definē uz SOAP balstītu vienību konvertēšanas tīmekļa pakalpojumu, izveido un pēc tam pārbauda šo tīmekļa pakalpojumu lokāli, izmantojot noklusējuma vieglo HTTP serveri (apspriests 1. daļā), interpretē pakalpojuma WSDL dokumentu un piekļūst pakalpojumam no vienkārša klienta.
Tīmekļa pakalpojuma vienību konvertēšanas definēšana
Vienību konvertēšanas tīmekļa pakalpojums, kuru esmu nosaucis par UC, sastāv no četrām funkcijām, lai veiktu konvertēšanu starp centimetriem un collām, kā arī starp Fārenheita un Celsija grādiem. Lai gan šo piemēru varētu veidot kā vienu Java klasi, esmu izvēlējies ievērot paraugpraksi, veidojot to kā Java saskarni un Java klasi. 1. saraksts parāda tīmekļa pakalpojumu UC
interfeiss.
Saraksts 1. UC tīmekļa pakalpojuma pakalpojuma galapunkta saskarne
pakete ca.javajeff.uc; importēt javax.jws.WebMethod; importēt javax.jws.WebService; @WebService publiskā saskarne UC {@WebMethod double c2f (dubultgrādi); @WebMethod dubultā cm2in (dubultā cm); @WebMethod dubultā f2c (dubultgrādi); @WebMethod dubultā 2 cm (dubultā); }
UC
apraksta a Pakalpojuma galapunkta saskarne (SEI), kas ir Java saskarne, kas parāda Web pakalpojuma saskarnes darbības abstraktu Java metožu izteiksmē. Klienti sazinās ar Web pakalpojumiem, kuru pamatā ir SOAP, izmantojot savus SEI.
UC
ar SEA starpniecību tiek pasludināts par SEI @WebService
anotācija. Kad Java saskarne vai klase ir anotēta @WebService
, viss publiski
metodes, kuru parametri, atgriešanās vērtības un deklarētie izņēmumi atbilst noteikumiem, kas definēti JAX-RPC 1.1 specifikācijas 5. sadaļā, apraksta tīmekļa pakalpojumu darbības. Jo tikai publiski
metodes var deklarēt saskarnēs, publiski
deklarēts nav nepieciešams rezervēts vārds c2f ()
, cm2in ()
, f2c ()
, un 2 cm ()
. Šīs metodes ir netieši publiski
.
Katra metode ir arī anotēta @WebMethod
. Lai gan @WebMethod
šajā piemērā nav būtiska, tā klātbūtne pastiprina faktu, ka anotētā metode atklāj tīmekļa pakalpojuma darbību.
2. sarakstā ir redzami tīmekļa pakalpojumi UCImpl
klasē.
UC tīmekļa pakalpojuma pakalpojuma ieviešanas pupa
pakete ca.javajeff.uc; importēt javax.jws.WebService; @WebService (endpointInterface = "ca.javajeff.uc.UC") publiskā klase UCImpl ievieš UC {@Override public double c2f (dubultgrādi) {atgriešanās grādi * 9.0 / 5.0 + 32; } @Orride public double cm2in (double cm) {return cm / 2,54; } @ Pārvarēt publisko dubulto f2c (dubultgrādi) {atgriešanās (grādi - 32) * 5,0 / 9,0; } @Orride public double in2cm (double in) {return in * 2,54; }}
UCImpl
apraksta a Pakalpojuma ieviešanas pupiņa (SIB), kas nodrošina SEI ieviešanu. Šī klase ir deklarēta kā SIB, izmantojot @WebService (endpointInterface = "ca.javajeff.uc.UC")
anotācija. The endpointSaskarne
elements savieno šo SIB ar savu SEI, un tas ir nepieciešams, lai izvairītos no nedefinētām porta tipa kļūdām, palaižot vēlāk prezentēto klienta lietojumprogrammu.
The īsteno UC
klauzula nav absolūti nepieciešama. Ja šīs klauzulas nav, UC
interfeiss tiek ignorēts (un ir lieks). Tomēr tā ir laba ideja paturēt īsteno UC
lai sastādītājs varētu pārbaudīt, vai SEI metodes ir ieviestas SIB.
SIB metodes galvenes nav anotētas @WebMethod
jo šo anotāciju parasti izmanto SEI kontekstā. Tomēr, ja jūs pievienotu publiski
metodi (kas atbilst JAX-RPC 1.1 specifikācijas 5. sadaļas noteikumiem) SIB, un, ja šī metode neatklāj tīmekļa pakalpojuma darbību, jūs metot galveni @WebMethod (izslēgt = patiess)
. Piešķirot taisnība
uz @WebMethod
's izslēgt
elementu, jūs novēršat šīs metodes saistīšanu ar darbību.
Šis tīmekļa pakalpojums ir gatavs publicēšanai, lai tam varētu piekļūt no klientiem. 3. sarakstā ir a UCPublisher
lietojumprogramma, kas izpilda šo uzdevumu noklusējuma vieglā HTTP servera kontekstā.
Uzskaitīšana 3. Publishing UC
importēt javax.xml.ws.Endpoint; imports ca.javajeff.uc.UCImpl; public class UCPublisher {public static void main (String [] args) {Endpoint.publish ("// localhost: 9901 / UC", new UCImpl ()); }}
Tīmekļa pakalpojuma publicēšana ietver viena zvana veikšanu EndPoint
klases Galapunkta publicēšana (virknes adrese, objekta ieviesējs)
klases metode. The adrese
parametrs identificē Web pakalpojumam piešķirto URI. Esmu izvēlējies šo tīmekļa pakalpojumu publicēt vietējā resursdatorā, norādot vietējais saimnieks
(ekvivalents IP adresei 127.0.0.1) un porta numurs 9901
(kas, visticamāk, ir pieejams). Arī es esmu patvaļīgi izvēlējies / UC
kā publicēšanas ceļu. The ieviesējs
parametrs identificē UC
SIB.
The publicēt()
metode izveido un publicē norādīto parametru ieviesējs
objekts dotajā adrese
, un izmanto ieviesējs
piezīmes, lai izveidotu Web Services Definition Language (WSDL) un XML shēmas dokumentus. Tas liek nepieciešamo servera infrastruktūru izveidot un konfigurēt, izmantojot JAX-WS ieviešanu, pamatojoties uz kādu noklusējuma konfigurāciju. Turklāt šī metode liek lietojumprogrammai darboties bezgalīgi. (Windows datoros vienlaikus nospiediet taustiņus Ctrl un C, lai pārtrauktu lietojumprogrammu.)
Tīmekļa pakalpojuma izveide un pārbaude
Nav grūti izveidot iepriekš definēto UC tīmekļa pakalpojumu. Pirmkārt, jums jāizveido piemērota direktoriju struktūra, kurā ir atbilstoši faili. Veiciet šo uzdevumu, veicot šādas darbības:
- Pašreizējā direktorijā izveidojiet a
apm
direktorijā. Iekšpusēapm
, izveidojiet ajavajeff
direktorijā. Visbeidzot, iekšājavajeff
, izveidojiet auc
direktorijā. - Kopēt 1. sarakstu uz a
UC.java
avota failu un saglabājiet šo failuca / javajeff / uc
. - Kopēt 2. sarakstu uz a
UCImpl.java
avota failu un saglabājiet šo failuca / javajeff / uc
. - Kopēt 3. sarakstu uz a
UCPublisher.java
avota failu un saglabājiet šo failu pašreizējā direktorijā, kurā irapm
direktorijā.
Nākamais uzdevums ir apkopot šos avota failus. Pieņemot, ka neesat mainījis direktorijus, izpildiet šo komandu, lai apkopotu šos avota failus Java SE 9 (izlaist --add-moduļi java.xml.ws
Java SE 6, 7 vai 8):
javac --add-modules java.xml.ws UCPublisher.java
Ja šie avota faili tiek veiksmīgi apkopoti, izpildiet šo komandu, lai palaistu šo lietojumprogrammu Java 9 (izlaidiet --add-moduļi java.xml.ws
Java SE 6, 7 vai 8):
java --add-modules java.xml.ws UCPublisher
Kamēr programma darbojas, izmantojiet tīmekļa pārlūkprogrammu, lai pārbaudītu, vai šis tīmekļa pakalpojums darbojas pareizi, un lai piekļūtu tā WSDL dokumentam. Sāciet savu iecienīto tīmekļa pārlūkprogrammu un adreses joslā ievadiet šādu rindu:
// localhost: 9901 / UC
1. attēlā parādīta iegūtā tīmekļa lapa Google Chrome tīmekļa pārlūkprogrammā.
1. attēls. UC tīmekļa lapa sniedz detalizētu informāciju par publicēto tīmekļa pakalpojumu
1. attēlā parādīts Web pakalpojuma galapunkta kvalificētais pakalpojums un portu nosaukumi. (Ievērojiet, ka pakotnes nosaukums ir apgriezts - uc.javajeff.ca
tā vietā ca.javajeff.uc
). Klients izmanto šos nosaukumus, lai piekļūtu pakalpojumam.
1. attēlā parādīts arī tīmekļa pakalpojuma adreses URI, tīmekļa pakalpojuma WSDL dokumenta atrašanās vieta (tīmekļa pakalpojuma URI ar ? wsdl
vaicājuma virkne) un Web pakalpojuma ieviešanas klases pakotnei atbilstošo nosaukumu.
Tīmekļa pakalpojuma WSDL dokumenta interpretācija
UC tīmekļa pakalpojuma WSDL dokumenta atrašanās vieta tiek parādīta kā saite. Noklikšķiniet uz šīs saites, lai apskatītu WSDL dokumentu, kura saturs ir parādīts 4. sarakstā.
4. UC WSDL dokuments
A WSDL dokuments ir XML dokuments ar definīcijas
saknes elements, kas padara WSDL dokumentu tikai par definīciju kopu. Šis elements ietver dažādus xmlns
atribūti dažādu standarta nosaukumvietu identificēšanai kopā ar targetNameSpace
un nosaukums
atribūti:
- The
targetNamespace
atribūts izveido nosaukumvietu visiem lietotāja definētajiem elementiem WSDL dokumentā (piemēram,c2f
elements, kas definēts, izmantojotziņu
elements ar šo nosaukumu). Šo nosaukumvietu izmanto, lai nošķirtu pašreizējā WSDL dokumenta lietotāja definētos elementus no importēto WSDL dokumentu lietotāja definētajiem elementiem, kurus identificē, izmantojot WSDLimportēt
elements. Līdzīgā veidātargetNamespace
atribūts, kas parādās XML shēmas failosshēma
elements izveido nosaukumvietu saviem lietotāja definētiem vienkārša tipa elementiem, atribūtu elementiem un kompleksa tipa elementiem. - The
nosaukums
atribūts identificē tīmekļa pakalpojumu un tiek izmantots tikai pakalpojuma dokumentēšanai.
Ligzdots definīcijas
ir veidi
, ziņu
, portType
, saistošs
, un apkalpošana
elementi: