JAX-WS tukee SOAP-pohjaisia verkkopalveluja. Tämän Java SE -verkkopalvelujen neljän osan sarjan osa 2 määrittelee SOAP-pohjaisen yksikkömuunnosverkkopalvelun, rakentaa ja vahvistaa tämän verkkopalvelun paikallisesti oletusarvoisen kevyen HTTP-palvelimen kautta (käsitelty osassa 1), tulkitsee palvelun WSDL-asiakirjan ja käyttää palvelua yksinkertaiselta asiakkaalta.
Yksikkömuunnoksen verkkopalvelun määritteleminen
Yksikkömuunnosverkkopalvelu, jonka olen nimittänyt UC: ksi, koostuu neljästä toiminnosta muuntamiseksi senttimetrien ja tuumien sekä Fahrenheit- ja Celsius-asteiden välillä. Vaikka tämä esimerkki voitaisiin suunnitella yhdeksi Java-luokaksi, olen päättänyt noudattaa parhaita käytäntöjä rakentamalla sen Java-käyttöliittymäksi ja Java-luokaksi. Listaus 1 esittää verkkopalvelun UC
käyttöliittymä.
Luettelo 1. UC-verkkopalvelun palvelun päätepisteliittymä
paketti ca.javajeff.uc; tuo javax.jws.WebMethod; tuo javax.jws.WebService; @WebService julkinen käyttöliittymä UC {@WebMethod double c2f (kaksinkertainen aste); @WebMethod kaksinkertainen cm2 (kaksinkertainen cm); @WebMethod kaksinkertainen f2c (kaksinkertainen aste); @WebMethod tuplakoko2 cm (tuplakoko); }
UC
kuvaa a Palvelun päätepisteliittymä (SEI), joka on Java-käyttöliittymä, joka paljastaa verkkopalvelurajapinnan toiminnan abstraktien Java-menetelmien kannalta. Asiakkaat kommunikoivat SOAP-pohjaisten verkkopalvelujen kanssa SEI: nsä kautta.
UC
ilmoitetaan SEI: ksi @WebService
merkintä. Kun Java-käyttöliittymä tai luokka on merkitty @WebService
, kaikki julkinen
menetelmät, joiden parametrit, palautusarvot ja ilmoitetut poikkeukset noudattavat JAX-RPC 1.1 -määrityksen osassa 5 määriteltyjä sääntöjä, kuvaavat verkkopalvelutoimintoja. Koska vain julkinen
- menetelmät voidaan ilmoittaa rajapinnoissa, julkinen
varattu sana ei ole tarpeen ilmoitettaessa c2f ()
, cm2in ()
, f2c ()
ja 2 cm ()
. Nämä menetelmät ovat implisiittisesti julkinen
.
Jokainen menetelmä on myös merkitty @WebMethod
. Siitä huolimatta @WebMethod
ei ole välttämätön tässä esimerkissä, sen läsnäolo vahvistaa sitä tosiasiaa, että kommentoitu menetelmä paljastaa verkkopalvelutoiminnon.
Listaus 2 esittää verkkopalvelun UCImpl
luokassa.
Listaus 2. UC-verkkopalvelun palvelun käyttöönottopapu
paketti ca.javajeff.uc; tuo javax.jws.WebService; @WebService (endpointInterface = "ca.javajeff.uc.UC") julkisen luokan UCImpl toteuttaa UC {@Override public double c2f (double Celsius) {return astetta * 9.0 / 5.0 + 32; } @Override public double cm2in (double cm) {return cm / 2,54; } @Override public double f2c (kaksinkertainen aste) {paluu (astetta - 32) * 5,0 / 9,0; } @Override public double in2cm (double in) {paluu sisään * 2,54; }}
UCImpl
kuvaa a Palvelun käyttöönottopapu (SIB), joka tarjoaa SEI: n toteutuksen. Tämä luokka ilmoitetaan SIB: n kautta SIB: n kautta @WebService (endpointInterface = "ca.javajeff.uc.UC")
merkintä. endpointInterface
elementti yhdistää tämän SIB: n SEI: hen, ja se on välttämätön, jotta vältetään määrittelemättömät porttityypin virheet suoritettaessa myöhemmin esitettyä asiakassovellusta.
toteuttaa UC
lauseke ei ole ehdottoman välttämätön. Jos tätä lauseketta ei ole, UC
käyttöliittymä ohitetaan (ja se on tarpeeton). Se on kuitenkin hyvä pitää toteuttaa UC
joten kääntäjä voi tarkistaa, että SEI: n menetelmät on otettu käyttöön SIB: ssä.
SIB: n menetelmän otsikoita ei ole merkitty @WebMethod
koska tätä merkintää käytetään tyypillisesti SEI: n yhteydessä. Jos kuitenkin haluat lisätä a julkinen
method (joka noudattaa JAX-RPC 1.1 -määrityksen osion 5 sääntöjä) SIB: lle, ja jos tämä menetelmä ei paljasta verkkopalvelutoimintoa, merkitään metodin otsikko @WebMethod (poissulkea = tosi)
. Määrittämällä totta
että @WebMethod
on sulkea pois
-elementti, estät menetelmän liittämisen toimintaan.
Tämä verkkopalvelu on valmis julkaistavaksi, jotta sitä voidaan käyttää asiakkailta. Luettelossa 3 esitetään a UCPublisher
sovellus, joka suorittaa tämän tehtävän oletusarvoisen kevyen HTTP-palvelimen yhteydessä.
Listaus 3. UC: n julkaiseminen
tuo javax.xml.ws.Endpoint; tuonti ca.javajeff.uc.UCImpl; public class UCPublisher {public static void main (String [] args) {Endpoint.publish ("// localhost: 9901 / UC", new UCImpl ()); }}
Verkkopalvelun julkaiseminen edellyttää yhden puhelun soittamista EndPoint
luokan Päätepisteen julkaisu (merkkijono-osoite, objektin toteuttaja)
luokan menetelmä. osoite
parametri tunnistaa verkkopalvelulle määritetyn URI: n. Olen päättänyt julkaista tämän verkkopalvelun paikallisessa isännässä määrittelemällä paikallinen isäntä
(vastaa IP-osoitetta 127.0.0.1) ja portin numero 9901
(joka on todennäköisesti käytettävissä). Lisäksi olen mielivaltaisesti valinnut / UC
julkaisupoluna. toteuttaja
parametri tunnistaa UC
SIB.
julkaista()
menetelmä luo ja julkaisee päätepisteen määritetylle toteuttaja
esine annetulla osoite
ja käyttää toteuttaja
merkinnät Web Services Definition Language (WSDL) - ja XML Schema -asiakirjojen luomiseen. Se saa tarvittavan palvelininfrastruktuurin luomaan ja konfiguroimaan JAX-WS-toteutuksen avulla jonkin oletusasetuksen perusteella. Lisäksi tämä menetelmä saa sovelluksen toimimaan loputtomasti. (Lopeta sovellus painamalla Windows-koneissa Ctrl- ja C-näppäimiä samanaikaisesti.)
Verkkopalvelun rakentaminen ja todentaminen
Aiemmin määritetyn UC-verkkopalvelun rakentaminen ei ole vaikeaa. Ensin sinun on luotava sopiva hakemistorakenne, joka sisältää sopivat tiedostot. Suorita tämä tehtävä suorittamalla seuraavat vaiheet:
- Luo nykyiseen hakemistoon a
noin
hakemistoon. Sisällänoin
, luojavajeff
hakemistoon. Lopuksi, sisälläjavajeff
, luouc
hakemistoon. - Kopioi luettelo 1 kohtaan a
UC.java
lähdetiedosto ja tallenna tämä tiedostoca / javajeff / uc
. - Kopioi luettelo 2 kohtaan a
UCImpl.java
lähdetiedosto ja tallenna tämä tiedostoca / javajeff / uc
. - Kopioi luettelo 3 kohtaan a
UCPublisher.java
lähdetiedosto ja tallenna tämä tiedosto nykyiseen hakemistoon, joka sisältäänoin
hakemistoon.
Seuraava tehtävä on koota nämä lähdetiedostot. Olettaen, ettet ole vaihtanut hakemistoja, suorita seuraava komento kääntääksesi nämä lähdetiedostot Java SE 9: ssä (jätä pois --add-modules java.xml.ws
Java SE 6, 7 tai 8):
javac --add-modules java.xml.ws UCPublisher.java
Jos nämä lähdetiedostot kääntyvät onnistuneesti, suorita seuraava komento suorittaaksesi tämän sovelluksen Java 9: ssä (jätä pois --add-modules java.xml.ws
Java SE 6, 7 tai 8):
java --add-modules java.xml.ws UCPublisher
Kun sovellus on käynnissä, tarkista verkkoselaimella, että tämä verkkopalvelu toimii oikein, ja pääset käyttämään WSDL-asiakirjaa. Käynnistä suosikkiselaimesi ja kirjoita seuraava rivi osoiteriville:
// paikallinen isäntä: 9901 / UC
Kuvassa 1 näkyy tuloksena oleva verkkosivu Google Chrome -selaimessa.
Kuva 1. UC: n verkkosivu tarjoaa yksityiskohtaista tietoa julkaistusta verkkopalvelusta
Kuvassa 1 on verkkopalvelun päätepisteen pätevä palvelu ja porttien nimet. (Huomaa, että paketin nimi on käännetty - uc.javajeff.ca
sijasta ca.javajeff.uc
). Asiakas käyttää näitä nimiä palvelun käyttämiseen.
Kuvassa 1 on esitetty myös verkkopalvelun osoitteen URI, verkkopalvelun WSDL-asiakirjan sijainti (verkkopalvelun URI, jonka ? wsdl
kyselymerkkijono) ja verkkopalvelun toteutusluokan pakettikelpoinen nimi.
Verkkopalvelun WSDL-asiakirjan tulkinta
UC-verkkopalvelun WSDL-asiakirjan sijainti esitetään linkkinä. Napsauttamalla tätä linkkiä näet WSDL-asiakirjan, jonka sisältö on esitetty luettelossa 4.
Luettelo 4. UC: n WSDL-asiakirja
A WSDL-asiakirja on XML-asiakirja, jossa on määritelmät
root-elementti, joka tekee WSDL-dokumentista vain joukon määritelmiä. Tämä elementti sisältää erilaisia xmlns
määritteet erilaisten tavallisten nimitilojen tunnistamiseksi yhdessä targetNameSpace
ja nimi
määritteet:
-
targetNamespace
attribute luo nimitilan kaikille käyttäjän määrittämille elementeille WSDL-asiakirjassa (kutenc2f
elementti, joka määritetäänviesti
nimi tällä nimellä). Tätä nimitilaa käytetään erottamaan nykyisen WSDL-asiakirjan käyttäjän määrittämät elementit ja tuotujen WSDL-asiakirjojen käyttäjän määrittelemät elementit, jotka tunnistetaan WSDL: n kauttatuonti
elementti. Samalla tavallatargetNamespace
attribuutti, joka näkyy XML-skeema-pohjaisissa tiedostoissaskeema
elementti luo nimitilan käyttäjän määrittelemille yksinkertaisen tyypin elementeille, attribuuttielementeille ja monimutkaisille tyypin elementeille. -
nimi
attribuutti identifioi verkkopalvelun ja sitä käytetään vain palvelun dokumentointiin.
Sisäkkäin määritelmät
ovat tyypit
, viesti
, portType
, sitova
ja palvelu
elementit: