Bevezetés a JAX-WS-be

1. Áttekintés

Java API for XML Web Services (JAX-WS) egy szabványosított API a SOAP (Simple Object Access Protocol) webszolgáltatások létrehozására és felhasználására.

Ebben a cikkben létrehozunk egy SOAP webszolgáltatást, és csatlakozunk hozzá a JAX-WS használatával.

2. SOAP

A SOAP egy XML specifikáció üzenetek hálózaton keresztül történő küldéséhez. A SOAP üzenetek függetlenek minden operációs rendszertől, és különféle kommunikációs protokollokat használhatnak, beleértve a HTTP-t és az SMTP-t.

A SOAP XML nehéz, ezért a legjobban az eszközökkel / keretekkel használható. A JAX-WS egy olyan keretrendszer, amely leegyszerűsíti a SOAP használatát. A standard Java része.

3. Felülről lefelé és alulról felfelé

A SOAP webszolgáltatások kétféleképpen építhetők fel. Mehetünk felülről lefelé vagy alulról felfelé irányuló megközelítéssel.

Felülről lefelé irányuló (szerződés-első) megközelítésben WSDL-dokumentum jön létre, és a szükséges Java-osztályokat a WSDL-ből generálják. Alulról felfelé (szerződés-utolsó) megközelítésben a Java osztályokat írják, és a WSDL-t a Java osztályokból állítják elő.

A WSDL fájl írása meglehetősen nehéz lehet attól függően, hogy milyen összetett a webszolgáltatása. Ez megkönnyíti az alulról felfelé irányuló megközelítést. Másrészt, mivel a WSDL-t a Java osztályokból állítja elő, a kód bármilyen változása változást okozhat a WSDL-ben. A fentről lefelé irányuló megközelítés esetében ez nem áll fenn.

Ebben a cikkben mindkét megközelítést megvizsgáljuk.

4. Webszolgáltatások definíciós nyelve (WSDL)

A WSDL az elérhető szolgáltatások szerződéses meghatározása. Ez a be- és kimeneti üzenetek specifikációja, valamint a webszolgáltatás meghívásának módja. Nyelv-semleges és XML-ben definiált.

Nézzük meg a WSDL-dokumentum főbb elemeit.

4.1. Definíciók

A definíciók elem az összes WSDL dokumentum gyökéreleme. Meghatározza a szolgáltatás nevét, névterét stb., És mint láthatja, meglehetősen tág lehet:

 ... 

4.2. Típusok

A típusok elem határozza meg a webszolgáltatás által használt adattípusokat. A WSDL az XSD-t (XML Schema Definition) használja az interoperabilitást elősegítő típusú rendszerként:

 ...      ... 

4.3. üzenetek

A üzenet elem a továbbított adatok elvont meghatározását adja. Minden egyes üzenet elem leírja egy szolgáltatási módszer bemenetét vagy kimenetét és a lehetséges kivételeket:

 ...          ... 

4.4. Műveletek és porttípusok

A portType elem mindegyiket leírja művelet hogy végre lehet hajtani és minden üzenet érintett elemek. Például a getEmployee művelet határozza meg a kérést bemenet, Kimenet és lehetséges hiba a webszolgáltatás által dobott kivétel művelet:

 ...       ....  ...  

4.5. Kötések

A kötés elem mindegyikhez megadja a protokoll és az adatformátum részleteit portType:

 ...               ...  ... 

4.6. Szolgáltatások és kikötők

A szolgáltatás elem határozza meg a webszolgáltatás által támogatott portokat. A kikötő elem be szolgáltatás meghatározza a név, kötés és a cím a szolgáltatás:

 ...      ... 

5. Felülről lefelé irányuló (szerződés-első) megközelítés

Kezdjük egy felülről lefelé irányuló megközelítéssel egy WSDL fájl létrehozásával alkalmazottakervicetopdown.wsdl. Az egyszerűség kedvéért csak egyetlen módszere van:

5.1. Generáló Webszolgáltatás forrásfájljai a WSDL-től

A webszolgáltatás forrásfájljainak létrehozása WSDL-dokumentumból többféleképpen lehetséges.

Az egyik mód a wsimport eszköz, amely a JDK része ($ JAVA_HOME / bin) a JDK 8-ig.

A parancssorból:

wsimport -s. -p com.baeldung.jaxws.server.topdown alkalmazottakervicetopdown.wsdl

Használt parancssori opciók: -p megadja a célcsomagot. -s meghatározza, hová kell tenni a generált forrásfájlokat.

A későbbi JDK verziókhoz használhatjuk jaxws-maven-plugin írta MojoHaus.

Alternatív megoldásként org.jvnet.jaxb2’S maven-jaxb2-plugin hasznos lehet, amint azt a SOAP webszolgáltatás meghívása tavasszal részletesen bemutatja.

A létrehozott fájlok:

  • EmployeeServiceTopDown.java - a szolgáltatás végpont interfésze (SEI), amely metódusdefiníciókat tartalmaz
  • ObjectFactory.java - gyári módszereket tartalmaz a sémából származó osztályok példányainak programozott létrehozására
  • EmployeeServiceTopDown_Service.java - az a szolgáltatói osztály, amelyet egy JAX-WS kliens használhat

5.2. Web Service Endpoint Interface

A wsimport eszköz létrehozta a webszolgáltatás végpont interfészét EmployeeServiceTopDown. Nyilatkozik a webszolgáltatási módszerekről:

@WebService (név = "EmployeeServiceTopDown", targetNamespace = "//topdown.server.jaxws.baeldung.com/") @SOAPBinding (parameterStyle = SOAPBinding.ParameterStyle.BARE) @XmlSeeAlso ({ObjectFactory.opassee_class}) @WebMethod (action = "//topdown.server.jaxws.baeldung.com/" + "EmployeeServiceTopDown / countEmployees") @WebResult (name = "countEmployeesResponse", targetNamespace = "//topdown.server.jaxws.baeldung.com/ ", partName =" paraméterek ") public int countEmployees (); }

5.3. Webszolgáltatás megvalósítása

A wsimport eszköz létrehozta a webszolgáltatás struktúráját. Létre kell hoznunk a webszolgáltatás megvalósítását:

@WebService (név = "EmployeeServiceTopDown", endpointInterface = "com.baeldung.jaxws.server.topdown.EmployeeServiceTopDown", targetNamespace = "//topdown.server.jaxws.baeldung.com/") nyilvános osztály private EmployeeRepository workerRepositoryImpl; @WebMethod public int countEmployees () {return workerRepositoryImpl.count (); }}

6. Alulról felfelé építkező (szerződés-utolsó) megközelítés

Alulról felfelé építve mind a végpont interfészt, mind a megvalósítási osztályokat létre kell hoznunk. A WSDL a webszolgáltatás közzétételekor az osztályokból jön létre.

Hozzunk létre egy webszolgáltatást, amely egyszerű CRUD műveleteket hajt végre Munkavállaló adat.

6.1. A modellosztály

A Munkavállaló modell osztály:

public class Alkalmazott {private int id; privát karakterlánc keresztnév; // szabványos mérőeszközök és beállítók}

6.2. Web Service Endpoint Interface

A webszolgáltatás végpontja, amely deklarálja a webszolgáltatási módszereket:

@WebService nyilvános felület EmployeeService {@WebMethod Employee getEmployee (int id); @WebMethod Employee updateEmployee (int azonosító, karakterlánc neve); @WebMethod logikai törlésEmployee (int id); @WebMethod Employee addEmployee (int id, String name); // ...}

Ez a felület meghatározza a webszolgáltatás elvont szerződését. A felhasznált kommentárok:

  • @Webes szolgáltatás azt jelenti, hogy ez egy webszolgáltatási felület
  • @WebMethod a webszolgáltatás működésének testreszabására szolgál
  • @WebResult a visszatérési értéket képviselő XML elem nevének testreszabására szolgál

6.3. Webszolgáltatás megvalósítása

A webszolgáltatás végpont felületének megvalósítási osztálya:

@WebService (endpointInterface = "com.baeldung.jaxws.EmployeeService") public class EmployeeServiceImpl implementálja az EmployeeService {@Inject private EmployeeRepository workerRepositoryImpl; @WebMethod public Employee getEmployee (int id) {return workerRepositoryImpl.getEmployee (id); } @WebMethod public Employee updateEmployee (int id, String name) {return workerRepositoryImpl.updateEmployee (id, név); } @WebMethod nyilvános logikai törlésEmployee (int id) {return workerRepositoryImpl.deleteEmployee (id); } @WebMethod public Employee addEmployee (int id, String name) {return workerRepositoryImpl.addEmployee (id, név); } // ...}

7. A webszolgáltatás végpontok közzététele

A webszolgáltatások (felülről és alulról felfelé) közzétételéhez át kell adnunk egy címet és a webszolgáltatás megvalósításának egy példányát a közzétenni () módszere javax.xml.ws.Endpoint osztály:

public class EmployeeServicePublisher {public static void main (String [] args) {Endpoint.publish ("// localhost: 8080 / workerservicetopdown", new EmployeeServiceTopDownImpl ()); Endpoint.publish ("// localhost: 8080 / alkalmazottszolgáltatás", új EmployeeServiceImpl ()); }}

Most már futhatunk EmployeeServicePublisher a webszolgáltatás elindításához. A CDI funkciók kihasználása érdekében a webszolgáltatások WAR fájlként telepíthetők olyan alkalmazáskiszolgálókra, mint a WildFly vagy a GlassFish.

8. Távoli webszolgáltatás kliens

Most hozzunk létre egy JAX-WS klienst a csatlakozáshoz EmployeeService webes szolgáltatás távolról.

8.1. Ügyféltermékek generálása

A JAX-WS kliens műtermékeinek előállításához ismét felhasználhatjuk a wsimport eszköz:

wsimport -keep -p com.baeldung.jaxws.client // localhost: 8080 / alkalmazottszolgáltatás? wsdl

A generált EmployeeService_Service osztály beágyazza a logikát a kiszolgáló portjának használatához URL és QName.

8.2. Csatlakozás a webszolgáltatáshoz

A webszolgáltatás kliens a létrehozottat használja EmployeeService_Service a szerverhez való csatlakozáshoz és a webszolgáltatás távhívásához:

public class EmployeeServiceClient {public static void main (String [] args) dobja a (z) {URL url = new URL ("// localhost: 8080 / staffervice? wsdl") kivételt; EmployeeService_Service workerService_Service = új EmployeeService_Service (url); EmployeeService workerServiceProxy = workerService_Service.getEmployeeServiceImplPort (); List allEmployees = workerServiceProxy.getAllEmployees (); }}

9. Következtetés

Ez a cikk az gyors bemutatás a JAAP-WS használatával a SOAP webszolgáltatásokról.

Az alulról felfelé és felülről lefelé irányuló megközelítést egyaránt alkalmaztuk a SOAP webszolgáltatások létrehozásához a JAX-WS API segítségével. Írtunk egy JAX-WS klienst is, amely távolról csatlakozhat a szerverhez és webszolgáltatási hívásokat indíthat.

A teljes forráskód elérhető a GitHub oldalon.