Pozivanje SOAP web usluge na proljeće

1. Pregled

Prije smo vidjeli kako stvoriti web uslugu SOAP s Springom.

U ovom uputstvu naučit ćemo kako stvoriti klijenta utemeljenog na Proljeću za konzumiranje ove web usluge.

Pozivajući se na SOAP web uslugu u Javi, učinili smo isto koristeći JAX-WS RI.

2. Proljetni SOAP web servis - brzi osvrt

Ranije smo u proljeće stvorili web uslugu za prikupljanje podataka o državi, s obzirom na njezino ime. Prije nego što se pozabavimo implementacijom klijenta, napravimo kratki osvrt na to kako smo to učinili.

Slijedom pristupa prema ugovoru, prvo smo napisali datoteku XML sheme koja definira domenu. Zatim smo koristili ovaj XSD za generiranje klasa za zahtjev, odgovor i model podataka pomoću jaxb2-maven-dodatak.

Nakon toga kodirali smo četiri razreda:

  • CountryEndpoint - krajnja točka koja odgovara na zahtjev
  • CountryRepository - spremište na pozadini za opskrbu podacima o zemljama
  • WebServiceConfig - konfiguracija koja definira potrebni grah
  • Primjena - Spring Boot App kako bi naša usluga bila dostupna za potrošnju

Napokon, testirali smo ga putem cURL-a slanjem zahtjeva za SOAP.

Sada pokrenimo poslužitelj izvođenjem gornje aplikacije za pokretanje i prijeđimo na sljedeći korak.

3. Klijent

Evo, idemo izgraditi Spring klijenta za pozivanje i testiranje gore navedene web usluge.

Sada, da vidimo korak po korak što sve trebamo učiniti da bismo stvorili klijenta.

3.1. Generirajte kod klijenta

Prvo ćemo generirati nekoliko klasa pomoću WSDL-a dostupnog na //localhost:8080/ws/countries.wsdl. Ovo ćemo preuzeti i spremiti u naš src / glavni / resursi mapu.

Da biste generirali kôd pomoću Mavena, mi ćemo dodati maven-jaxb2-dodatak našem pom.xml:

 org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.14.0 generira WSDL $ {project.basedir} / src / main / java com.baeldung.springsoap.client.gen $ {project.basedir} / src / main / resources zemlje.wsdl 

Značajno, u konfiguraciji dodatka definirali smo:

  • generiratiDirectory - mapa u kojoj će se generirani artefakti spremiti
  • generirajte paket - naziv paketa koji će koristiti artefakti
  • schemaDirectory i schemaIncludes - imenik i naziv datoteke za WSDL

Da bismo izvršili postupak generiranja JAXB-a, izvršit ćemo ovaj dodatak jednostavnom izradom projekta:

mvn sastaviti

Zanimljivo, ovdje su generirani artefakti isti kao i oni stvoreni za uslugu.

Nabrojimo one koje ćemo koristiti:

  • Zemlja.java i Valuta.java - POJO-i koji predstavljaju model podataka
  • GetCountryRequest.java - vrsta zahtjeva
  • GetCountryResponse.java - vrsta odgovora

Usluga se može implementirati bilo gdje u svijetu, a samo sa svojim WSDL-om uspjeli smo generirati iste klase na kraju klijenta kao i poslužitelj!

3.2. CountryClient

Dalje, moramo proširiti Proljeće WebServiceGatewaySupport za interakciju s web uslugom.

Nazvat ćemo ovaj razred CountryClient:

javna klasa CountryClient proširuje WebServiceGatewaySupport {public GetCountryResponse getCountry (Niz države) {GetCountryRequest zahtjev = novi GetCountryRequest (); request.setName (zemlja); GetCountryResponse odgovor = (GetCountryResponse) getWebServiceTemplate () .marshalSendAndReceive (zahtjev); odgovor na povratak; }}

Ovdje smo definirali jednu metodu getCountry, što odgovara operaciji koju je web usluga izložila. U metodi smo stvorili a GetCountryRequest instance i pozvao web uslugu da bi dobio GetCountryResponse. Drugim riječima, ovdje smo izvršili razmjenu SOAP-a.

Kao što vidimo, Spring je svojim pozivima napravio prilično jednostavan poziv WebServiceTemplate. Koristili smo metodu predloška marshalSendAndReceive za obavljanje razmjene SOAP-a.

XML pretvorbe obrađuju se ovdje putem priključenog kabela Marshaller.

Pogledajmo sada konfiguraciju gdje je ovo Marshaller dolazi iz.

3.3. CountryClientConfig

Sve što nam treba za konfiguriranje našeg Spring WS klijenta su dva graha.

Prvo, a Jaxb2Marshaller za pretvaranje poruka u i iz XML-a, i drugo, naše CountryClient, koji će se spojiti na maršale grah:

@Configuration javna klasa CountryClientConfig {@Bean public Jaxb2Marshaller marshaller () {Jaxb2Marshaller marshaller = novi Jaxb2Marshaller (); marshaller.setContextPath ("com.baeldung.springsoap.client.gen"); maršal za povratak; } @Bean public CountryClient countryClient (Jaxb2Marshaller marshaller) {CountryClient client = novi CountryClient (); client.setDefaultUri ("// localhost: 8080 / ws"); client.setMarshaller (marshaller); client.setUnmarshaller (marshaller); povratni klijent; }} 

Ovdje moramo voditi računa o tome maršalePut konteksta je isti kao generirajte paket naveden u konfiguraciji dodatka našeg pom.xml.

Ovdje također primijetite zadani URI za klijenta. Postavljeno je kao sapun: adresa mjesto navedeno u WSDL-u.

4. Testiranje klijenta

Zatim ćemo napisati JUnit test kako bismo provjerili funkcionira li naš klijent kako se očekivalo:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = CountryClientConfig.class, loader = AnnotationConfigContextLoader.class) javna klasa ClientLiveTest {@Autowired CountryClient client; @Test javna praznina givenCountryService_whenCountryPoland_thenCapitalIsWarsaw () {GetCountryResponse response = client.getCountry ("Poljska"); assertEquals ("Varšava", response.getCountry (). getCapital ()); } @Test javna praznina givenCountryService_whenCountrySpain_thenCurrencyEUR () {GetCountryResponse odgovor = client.getCountry ("Španjolska"); assertEquals (Currency.EUR, response.getCountry (). getCurrency ()); }} 

Kao što vidimo, ožičili smo u CountryClient grah definiran u našem CountryClientConfig. Zatim smo koristili njegov getCountry za pozivanje udaljene usluge kako je prethodno opisano.

Štoviše, uspjeli smo izvući podatke potrebne za naše tvrdnje pomoću generiranih POJO modela podataka, Zemlja, i Valuta.

5. Zaključak

U ovom vodiču, vidjeli smo osnove kako pozvati SOAP web uslugu pomoću Spring WS-a.

Jednostavno smo ogrebali površinu onoga što Spring nudi na području web usluga SOAP; ima puno toga za istražiti.

Kao i uvijek, izvorni kod dostupan je na GitHub-u.


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