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.