JAX-WS palaiko SOAP pagrįstas žiniatinklio paslaugas. Šios keturių dalių „Java SE“ žiniatinklio tarnybų serijos 2 dalyje apibrėžiama SOAP pagrįsta vienetų konvertavimo tinklo paslauga, sukuriama ir patikrinama ši žiniatinklio paslauga per numatytąjį lengvąjį HTTP serverį (aptariama 1 dalyje), interpretuojamas paslaugos WSDL dokumentas ir pasiekia paslaugą iš paprasto kliento.
Interneto vienetų konvertavimo paslaugos nustatymas
Vienetų konvertavimo žiniatinklio paslaugą, kurią pavadinau UC, sudaro keturios funkcijos, skirtos konvertuoti tarp centimetrų ir colių bei tarp Fahrenheito ir Celsijaus laipsnių. Nors šį pavyzdį galima sukurti kaip vieną „Java“ klasę, aš nusprendžiau vadovautis geriausia patirtimi sukurdamas ją kaip „Java“ sąsają ir „Java“ klasę. 1 sąraše pateikiamos žiniatinklio paslaugos UC
sąsaja.
Sąrašas 1. UC žiniatinklio tarnybos paslaugos pabaigos taško sąsaja
paketas ca.javajeff.uc; importuoti javax.jws.WebMethod; importuoti javax.jws.WebService; @WebService viešoji sąsaja UC {@WebMethod double c2f (dvigubi laipsniai); @WebMethod dvigubas cm2in (dvigubas cm); @WebMethod dvigubas f2c (dvigubi laipsniai); @WebMethod dvigubas in2cm (dvigubas); }
UC
apibūdina a „Service Endpoint“ sąsaja (SEI), kuri yra „Java“ sąsaja, kuri atskleidžia žiniatinklio paslaugų sąsajos operacijas abstrakčių „Java“ metodų požiūriu. Klientai bendrauja su SOAP pagrįstomis interneto paslaugomis per savo SEI.
UC
yra paskelbta SEI per @WebService
anotacija. Kai anotuojama „Java“ sąsaja ar klasė @WebService
, viskas visuomenės
metodai, kurių parametrai, grąžinimo vertės ir deklaruojamos išimtys atitinka JAX-RPC 1.1 specifikacijos 5 skyriuje apibrėžtas taisykles, apibūdina žiniatinklio paslaugų operacijas. Nes tik visuomenės
metodai gali būti deklaruojami sąsajose, visuomenės
rezervuotas žodis deklaruojant nebūtinas c2f ()
, cm2in ()
, f2c ()
ir 2 cm ()
. Šie metodai yra netiesiogiai visuomenės
.
Kiekvienas metodas taip pat yra anotuotas @WebMethod
. Nors @WebMethod
šiame pavyzdyje nėra esminis dalykas, jo buvimas sustiprina tai, kad anotuotas metodas atskleidžia žiniatinklio paslaugos operaciją.
2 sąraše pateikiamos žiniatinklio paslaugos UCImpl
klasė.
Sąrašas 2. UC žiniatinklio paslaugos paslaugų diegimo pupelė
paketas ca.javajeff.uc; importuoti javax.jws.WebService; @WebService (endpointInterface = "ca.javajeff.uc.UC") viešosios klasės UCImpl įgyvendina UC {@Override public double c2f (dvigubus laipsnius) {grįžimo laipsnius * 9.0 / 5.0 + 32; } @Paisyti viešą dvigubą cm2in (dvigubą cm) {grįžti cm / 2,54; } @Paisyti viešą dvigubą f2c (dvigubi laipsniai) {grįžimas (laipsniai - 32) * 5,0 / 9,0; } @Paisyti viešą dvigubą in2cm (dvigubą) {return in * 2,54; }}
UCImpl
apibūdina a Paslaugų diegimo pupelė (SIB), kuris pateikia SEI įgyvendinimą. Ši klasė yra paskelbta SIB per @WebService (endpointInterface = "ca.javajeff.uc.UC")
anotacija. pabaigos taškasSąsaja
elementas sujungia šį SIB su savo SEI ir yra būtinas norint išvengti neapibrėžtų prievado tipo klaidų, kai vykdoma vėliau pateikta kliento programa.
įgyvendina UC
sąlyga nėra visiškai būtina. Jei šios sąlygos nėra, UC
sąsaja nepaisoma (ir yra nereikalinga). Tačiau vertėtų pasilikti įgyvendina UC
taigi kompiliatorius gali patikrinti, ar SEI metodai buvo įdiegti SIB.
SIB metodo antraštės nėra komentuojamos @WebMethod
nes ši anotacija paprastai naudojama SEI kontekste. Tačiau jei norėtumėte pridėti a visuomenės
metodas (kuris atitinka JAX-RPC 1.1 specifikacijos 5 skyriaus taisykles) prie SIB, ir jei šis metodas neatskleidžia žiniatinklio tarnybos operacijos, turėtumėte anotuoti metodo antraštę @WebMethod (neįtraukti = true)
. Paskirdamas tiesa
į @WebMethod
's Neįtraukti
elementą, jūs neleidžiate to metodo susieti su operacija.
Ši žiniatinklio paslauga yra parengta paskelbti, kad ją galėtų pasiekti klientai. 3 sąraše pateikiami a „UCPublisher“
programa, kuri atlieka šią užduotį numatytojo lengvojo HTTP serverio kontekste.
Sąrašas 3. Leidyba UC
importuoti javax.xml.ws.Endpoint; importuoti ca.javajeff.uc.UCImpl; public class UCPublisher {public static void main (String [] args) {Endpoint.publish ("// localhost: 9901 / UC", new UCImpl ()); }}
Skelbiant žiniatinklio paslaugą, reikia atlikti vienintelį skambutį „EndPoint“
klasės Galutinio skelbimo skelbimas (eilutės adresas, objekto diegėjas)
klasės metodas. adresas
parametras identifikuoja žiniatinklio tarnybai priskirtą URI. Aš nusprendžiau paskelbti šią žiniatinklio paslaugą vietiniame pagrindiniame kompiuteryje nurodydamas vietinis šeimininkas
(atitinka IP adresą 127.0.0.1) ir prievado numerį 9901
(kuris greičiausiai yra prieinamas). Be to, aš savavališkai pasirinkau / UC
kaip leidimo kelias. įgyvendintojas
parametras identifikuoja UC
SIB.
paskelbti ()
metodas sukuria ir paskelbia nurodytą tikslą įgyvendintojas
objektas duotame adresas
ir naudoja įgyvendintojas
internetinių paslaugų apibrėžimo kalbos (WSDL) ir XML schemos dokumentų kūrimo anotacijos. Tai sukelia reikalingos serverio infrastruktūros sukūrimą ir konfigūravimą įgyvendinant JAX-WS, remiantis tam tikra numatytąja konfigūracija. Be to, dėl šio metodo programa veikia neribotą laiką. („Windows“ kompiuteriuose vienu metu paspauskite „Ctrl“ ir „C“ klavišus.
Interneto paslaugos kūrimas ir tikrinimas
Nesunku sukurti anksčiau apibrėžtą UC žiniatinklio paslaugą. Pirmiausia turite sukurti tinkamą katalogų struktūrą su atitinkamais failais. Atlikite šią užduotį atlikdami šiuos veiksmus:
- Dabartiniame kataloge sukurkite
apie
kataloge. Vidujeapie
, sukurtijavajeffas
kataloge. Galiausiai, perjavajeffas
, sukurtiuc
kataloge. - Kopijuoti 1 sąrašą į a
UC.java
šaltinio failą ir saugokite šį failąca / javajeff / uc
. - Kopijuoti 2 sąrašą į a
UCImpl.java
šaltinio failą ir saugokite šį failąca / javajeff / uc
. - Kopijuoti 3 sąrašą į a
UCPublisher.java
šaltinio failą ir išsaugokite šį failą dabartiniame kataloge, kuriame yraapie
kataloge.
Kita užduotis yra surinkti šiuos šaltinio failus. Darant prielaidą, kad nepakeitėte katalogų, vykdykite šią komandą, kad sukompiluotumėte šiuos šaltinio failus „Java SE 9“ (praleisti --add-moduliai java.xml.ws
„Java SE 6, 7 arba 8“):
javac --add-modules java.xml.ws UCPublisher.java
Jei šie šaltinio failai sėkmingai kompiliuojami, vykdykite šią komandą, kad paleistumėte šią programą „Java 9“ (praleisti --add-moduliai java.xml.ws
„Java SE 6, 7 arba 8“):
java --add-modules java.xml.ws UCPublisher
Kol programa veikia, naudokite žiniatinklio naršyklę, kad patikrintumėte, ar ši žiniatinklio paslauga veikia tinkamai, ir norėdami pasiekti savo WSDL dokumentą. Paleiskite mėgstamą žiniatinklio naršyklę ir adreso juostoje įveskite šią eilutę:
// localhost: 9901 / UC
1 paveiksle parodytas gautas tinklalapis „Google Chrome“ žiniatinklio naršyklėje.
1 pav. UC tinklalapyje pateikiama išsami informacija apie paskelbtą žiniatinklio paslaugą
1 paveiksle pateikiama žiniatinklio tarnybos galinio taško kvalifikuota paslauga ir prievadų pavadinimai. (Atkreipkite dėmesį, kad paketo pavadinimas buvo apverstas - uc.javajeff.ca
vietoj ca.javajeff.uc
). Klientas naudojasi šiais vardais norėdamas pasiekti paslaugą.
1 paveiksle taip pat pateikiamas žiniatinklio paslaugos adreso URI, žiniatinklio tarnybos WSDL dokumento vieta (žiniatinklio paslaugos URI, pridedama prie ? wsdl
užklausos eilutė) ir žiniatinklio paslaugų diegimo klasės paketais tinkantį pavadinimą.
Žiniatinklio paslaugos WSDL dokumento aiškinimas
UC žiniatinklio tarnybos WSDL dokumento vieta pateikiama kaip nuoroda. Spustelėkite šią nuorodą, kad peržiūrėtumėte WSDL dokumentą, kurio turinys pateiktas 4 sąraše.
Sąrašas 4. UC WSDL dokumentas
A WSDL dokumentas yra XML dokumentas su apibrėžimai
root elementas, kuris daro WSDL dokumentą ne daugiau kaip apibrėžimų rinkinį. Šis elementas apima įvairius xmlns
atributai, skirti nustatyti įvairias standartines vardų sritis, kartu su targetNameSpace
ir vardas
atributai:
-
targetNamespace
atributas sukuria visų vartotojo nustatytų elementų WSDL dokumente (pvz.,c2f
elementas, apibrėžtas perpranešimą
elementas šiuo pavadinimu). Ši vardų sritis naudojama norint atskirti vartotojo nustatytus dabartinio WSDL dokumento elementus nuo vartotojo nustatytų importuotų WSDL dokumentų elementų, kurie identifikuojami per WSDLimportas
elementas. Panašiu būdutargetNamespace
atributas, rodomas XML schemos pagrindu sukurtuose failuoseschema
elementas sukuria savo vartotojo apibrėžtų paprasto tipo elementų, atributų elementų ir sudėtingo tipo elementų vardų sritį. -
vardas
atributas identifikuoja žiniatinklio paslaugą ir naudojamas tik dokumentuoti paslaugą.
Lizduotas apibrėžimai
yra tipai
, pranešimą
, portType
, įrišimas
ir paslaugą
elementai: