Programavimas

Žiniatinklio paslaugos „Java SE“, 2 dalis. SOAP žiniatinklio paslaugų kūrimas

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 UCSIB.

paskelbti () metodas sukuria ir paskelbia nurodytą tikslą įgyvendintojas objektas duotame adresasir naudoja įgyvendintojasinternetinių 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:

  1. Dabartiniame kataloge sukurkite apie kataloge. Viduje apie, sukurti javajeffas kataloge. Galiausiai, per javajeffas, sukurti uc kataloge.
  2. Kopijuoti 1 sąrašą į a UC.java šaltinio failą ir saugokite šį failą ca / javajeff / uc.
  3. Kopijuoti 2 sąrašą į a UCImpl.java šaltinio failą ir saugokite šį failą ca / javajeff / uc.
  4. Kopijuoti 3 sąrašą į a UCPublisher.java šaltinio failą ir išsaugokite šį failą dabartiniame kataloge, kuriame yra apie 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 per praneš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 WSDL importas elementas. Panašiu būdu targetNamespace atributas, rodomas XML schemos pagrindu sukurtuose failuose schema 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šimasir paslaugą elementai: