Úvod do JAX-WS

1. Prehľad

Java API pre XML Web Services (JAX-WS) je štandardizované API pre vytváranie a konzumáciu webových služieb SOAP (Simple Object Access Protocol).

V tomto článku vytvoríme webovú službu SOAP a pripojíme sa k nej pomocou JAX-WS.

2. MYDLO

SOAP je špecifikácia XML na odosielanie správ cez sieť. Správy SOAP sú nezávislé od ľubovoľného operačného systému a môžu používať rôzne komunikačné protokoly vrátane HTTP a SMTP.

SOAP je ťažký XML, a preto sa najlepšie používa s nástrojmi / frameworkmi. JAX-WS je rámec, ktorý zjednodušuje používanie protokolu SOAP. Je súčasťou štandardnej Javy.

3. Zhora nadol vs. zdola nahor

Existujú dva spôsoby budovania webových služieb SOAP. Môžeme ísť prístupom zhora nadol alebo zdola nahor.

Pri prístupe zhora nadol (najskôr na zmluvu) sa vytvorí dokument WSDL a z WSDL sa vygenerujú potrebné triedy Java. Pri prístupe zdola nahor (contract-last) sa zapisujú triedy Java a WSDL sa generuje z tried Java.

Zápis súboru WSDL môže byť dosť zložitý v závislosti od toho, ako zložitá je vaša webová služba. Vďaka tomu je prístup zdola nahor ľahšou voľbou. Na druhej strane, pretože váš WSDL je generovaný z tried Java, akákoľvek zmena v kóde môže spôsobiť zmenu WSDL. To neplatí pre prístup zhora nadol.

V tomto článku sa pozrieme na oba prístupy.

4. Jazyk definície webových služieb (WSDL)

WSDL je definícia kontraktu dostupných služieb. Je to špecifikácia vstupných / výstupných správ a spôsob, ako vyvolať webovú službu. Je jazykovo neutrálny a je definovaný v XML.

Pozrime sa na hlavné prvky dokumentu WSDL.

4.1. Definície

The definície prvok je koreňovým prvkom všetkých dokumentov WSDL. Definuje názov, menný priestor atď. Služby a ako vidíte, môže byť celkom priestranný:

 ... 

4.2. Typy

The typy prvok definuje dátové typy používané webovou službou. WSDL používa XSD (XML Schema Definition) ako typový systém, ktorý pomáha pri interoperabilite:

 ...      ... 

4.3. Správy

The správa poskytuje abstraktnú definíciu prenášaných údajov. Každý správa element popisuje vstup alebo výstup metódy služby a možné výnimky:

 ...          ... 

4.4. Prevádzka a typy portov

The portType každý prvok popisuje prevádzka ktoré je možné vykonať a všetky správa zúčastnené prvky. Napríklad getEmployee operácia špecifikuje požiadavku vstup, výkon a možné chyba výnimka vyvolaná webovou službou prevádzka:

 ...       ....  ...  

4.5. Viazania

The viazanie prvok poskytuje podrobnosti protokolu a dátového formátu pre každú z nich portType:

 ...               ...  ... 

4.6. Služby a prístavy

The služby prvok definuje porty podporované webovou službou. The prístav prvok v služby definuje názov, viazanie a adresa služby:

 ...      ... 

5. Prístup zhora nadol (najskôr na základe zmluvy)

Začnime prístupom zhora nadol vytvorením súboru WSDL Zamestnanciervicetopdown.wsdl. Kvôli jednoduchosti má iba jednu metódu:

5.1. Generovanie Zdrojové súbory webových služieb z WSDL

Existuje niekoľko spôsobov, ako vygenerovať zdrojové súbory webových služieb z dokumentu WSDL.

Jedným zo spôsobov je použitie wsimport nástroj, ktorý je súčasťou JDK (na $ JAVA_HOME / bin) do JDK 8.

Z príkazového riadku:

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

Použité možnosti príkazového riadku: -p určuje cieľový balík. -s určuje, kam umiestniť vygenerované zdrojové súbory.

Pre neskoršie verzie JDK môžeme použiť jaxws-maven-plugin podľa MojoHaus, ako je tu popísané.

Prípadne org.jvnet.jaxb2‘S maven-jaxb2-plugin môže byť užitočné, ako je podrobne uvedené v časti Vyvolanie webovej služby SOAP na jar.

Vygenerované súbory:

  • EmployeeServiceTopDown.java - je rozhranie koncového bodu služby (SEI), ktoré obsahuje definície metód
  • ObjectFactory.java - obsahuje továrenské metódy na programové vytváranie inštancií tried odvodených zo schémy
  • EmployeeServiceTopDown_Service.java - je trieda poskytovateľa služieb, ktorú môže používať klient JAX-WS

5.2. Rozhranie koncového bodu webovej služby

The wsimport nástroj vygeneroval rozhranie koncového bodu webovej služby EmployeeServiceTopDown. Deklaruje metódy webových služieb:

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

5.3. Implementácia webových služieb

The wsimport nástroj vytvoril štruktúru webovej služby. Musíme vytvoriť implementáciu webovej služby:

@WebService (name = "EmployeeServiceTopDown", endpointInterface = "com.baeldung.jaxws.server.topdown.EmployeeServiceTopDown", targetNamespace = "//topdown.server.jaxws.baeldung.com/") verejná trieda EmployeeServiceTopDownImpl implementuje EmployeeService {@ private EmployeeRepository employeeRepositoryImpl; @WebMethod public int countEmployees () {return employeeRepositoryImpl.count (); }}

6. Prístup zdola nahor (zmluva - posledný)

V prístupe zdola nahor musíme vytvoriť rozhranie koncového bodu aj implementačné triedy. WSDL sa generuje z tried pri zverejnení webovej služby.

Vytvorme webovú službu, ktorá bude vykonávať jednoduché operácie CRUD Zamestnanec údaje.

6.1. Trieda modelu

The Zamestnanec modelová trieda:

public class Employee {private int id; private String meno; // štandardné getre a setre}

6.2. Rozhranie koncového bodu webovej služby

Rozhranie koncového bodu webovej služby, ktoré deklaruje metódy webovej služby:

@WebService verejné rozhranie EmployeeService {@WebMethod Employee getEmployee (int id); @WebMethod Employee updateEmployee (int id, String name); @WebMethod boolean deleteEmployee (int id); @WebMethod Employee addEmployee (int id, String name); // ...}

Toto rozhranie definuje abstraktnú zmluvu pre webovú službu. Použité anotácie:

  • @Webová služba označuje, že sa jedná o rozhranie webovej služby
  • @WebMethod sa používa na prispôsobenie prevádzky webovej služby
  • @WebResult sa používa na prispôsobenie názvu prvku XML, ktorý predstavuje návratovú hodnotu

6.3. Implementácia webových služieb

Trieda implementácie rozhrania koncového bodu webovej služby:

@WebService (endpointInterface = "com.baeldung.jaxws.EmployeeService") verejná trieda EmployeeServiceImpl implementuje EmployeeService {@Inject private EmployeeRepository employeeRepositoryImpl; @WebMethod public Zamestnanec getEmployee (int id) {návrat employeeRepositoryImpl.getEmployee (id); } @WebMethod public Employee updateEmployee (int id, String name) {return employeeRepositoryImpl.updateEmployee (id, name); } @WebMethod public boolean deleteEmployee (int id) {return employeeRepositoryImpl.deleteEmployee (id); } @WebMethod public Employee addEmployee (int id, String name) {return employeeRepositoryImpl.addEmployee (id, name); } // ...}

7. Publikovanie koncových bodov webovej služby

Na zverejnenie webových služieb (zhora nadol a zdola nahor) je potrebné odovzdať adresu a inštanciu implementácie webových služieb zverejniť () metóda javax.xml.ws.Endpoint trieda:

verejná trieda EmployeeServicePublisher {public static void main (String [] args) {Endpoint.publish ("// localhost: 8080 / zaměstnanciervicetopdown", new EmployeeServiceTopDownImpl ()); Endpoint.publish ("// localhost: 8080 / employeeervice", new EmployeeServiceImpl ()); }}

Teraz môžeme bežať EmployeeServicePublisher spustiť webovú službu. Na využitie funkcií CDI je možné webové služby nasadiť ako súbor WAR na aplikačné servery ako WildFly alebo GlassFish.

8. Vzdialený klient webovej služby

Poďme si teraz vytvoriť klienta JAX-WS na pripojenie k EmployeeService webová služba na diaľku.

8.1. Generovanie artefaktov klienta

Na generovanie artefaktov klienta JAX-WS môžeme opäť použiť wsimport nástroj:

wsimport -keep -p com.baeldung.jaxws.client // localhost: 8080 / employeeervice? wsdl

Generované EmployeeService_Service trieda zapuzdruje logiku na získanie portu servera pomocou URL a QName.

8.2. Pripojenie k webovej službe

Klient webovej služby používa vygenerované EmployeeService_Service pripojenie na server a uskutočňovanie hovorov z webových služieb na diaľku:

public class EmployeeServiceClient {public static void main (String [] args) vyvolá výnimku {URL url = nová URL ("// localhost: 8080 / Zamestnanci? wsdl"); EmployeeService_Service employeeService_Service = nový EmployeeService_Service (url); EmployeeService employeeServiceProxy = employeeService_Service.getEmployeeServiceImplPort (); Zoznam allEmployees = employeeServiceProxy.getAllEmployees (); }}

9. Záver

Tento článok je rýchly úvod do webových služieb SOAP pomocou JAX-WS.

Na vytváranie webových služieb SOAP pomocou rozhrania JAX-WS API sme použili prístup zdola nahor aj zhora nadol. Napísali sme tiež klienta JAX-WS, ktorý sa môže vzdialene pripojiť k serveru a uskutočňovať hovory webových služieb.

Celý zdrojový kód je k dispozícii na GitHub.


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