Programmēšana

Tīmekļa pakalpojumi Java SE, 2. daļa: SOAP tīmekļa pakalpojumu izveide

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

The publicēt() metode izveido un publicē norādīto parametru ieviesējs objekts dotajā adrese, un izmanto ieviesējspiezī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:

  1. Pašreizējā direktorijā izveidojiet a apm direktorijā. Iekšpusē apm, izveidojiet a javajeff direktorijā. Visbeidzot, iekšā javajeff, izveidojiet a uc direktorijā.
  2. Kopēt 1. sarakstu uz a UC.java avota failu un saglabājiet šo failu ca / javajeff / uc.
  3. Kopēt 2. sarakstu uz a UCImpl.java avota failu un saglabājiet šo failu ca / javajeff / uc.
  4. Kopēt 3. sarakstu uz a UCPublisher.java avota failu un saglabājiet šo failu pašreizējā direktorijā, kurā ir apm 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, izmantojot ziņ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 WSDL importēt elements. Līdzīgā veidā targetNamespace atribūts, kas parādās XML shēmas failos shē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:

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