Vyvolanie webovej služby SOAP na jar

1. Prehľad

Predtým sme videli, ako vytvoriť webovú službu SOAP s programom Spring.

V tomto tutoriále sa dozvieme, ako vytvoriť klienta založeného na jarnom prostredí, ktorý bude využívať túto webovú službu.

Pri vyvolaní webovej služby SOAP v Jave sme urobili to isté pomocou JAX-WS RI.

2. Jarná webová služba SOAP - rýchle zhrnutie

Predtým sme na jar vytvorili webovú službu na načítanie údajov o krajine, ktorá sa volá. Predtým, ako sa pustíme do implementácie klienta, urobme si krátku rekapituláciu toho, ako sme to urobili.

V súlade s prístupom založeným na kontrakte sme najskôr napísali súbor schémy XML definujúci doménu. Potom sme tento XSD použili na generovanie tried pre požiadavku, odpoveď a dátový model pomocou jaxb2-maven-plugin.

Potom sme kódovali štyri triedy:

  • CountryEndpoint - koncový bod, ktorý odpovedá na žiadosť
  • CountryRepository - úložisko na backende na dodanie údajov o krajine
  • WebServiceConfig - konfigurácia definujúca požadované fazule
  • Aplikácia - aplikácia Spring Boot, ktorá sprístupňuje naše služby na spotrebu

Nakoniec sme to otestovali cez cURL zaslaním žiadosti SOAP.

Teraz spustíme server spustením vyššie uvedenej aplikácie Boot a prejdeme k ďalšiemu kroku.

3. Klient

Tu ideme zostavte klienta Spring na vyvolanie a otestovanie vyššie uvedenej webovej služby.

Teraz sa pozrime krok za krokom, čo všetko musíme urobiť, aby sme vytvorili klienta.

3.1. Generovať kód klienta

Najskôr vygenerujeme niekoľko tried pomocou WSDL dostupného na //localhost:8080/ws/countries.wsdl. Stiahneme a uložíme do nášho src / main / resources priečinok.

Ak chcete vygenerovať kód pomocou nástroja Maven, pridáme maven-jaxb2-plugin k nášmu pom.xml:

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

V konfigurácii doplnku sme definovali najmä:

  • generovať adresár - priečinok, kam sa uložia vygenerované artefakty
  • generovať balíček - názov balíka, ktorý budú artefakty používať
  • schemaDirectory a schemaIncludes - adresár a názov súboru pre WSDL

Na vykonanie procesu generovania JAXB vykonáme tento plugin jednoduchým vytvorením projektu:

mvn zostaviť

Je zaujímavé, že artefakty tu vygenerované sú rovnaké ako artefakty vygenerované pre službu.

Uveďme zoznam tých, ktoré budeme používať:

  • Country.java a Mena.java - POJO predstavujúce dátový model
  • GetCountryRequest.java - typ žiadosti
  • GetCountryResponse.java - typ odpovede

Túto službu je možné nasadiť kdekoľvek na svete a iba s jej WSDL sme boli schopní vygenerovať rovnaké triedy na konci klienta ako server!

3.2. CountryClient

Ďalej musíme rozšíriť Jarné WebServiceGatewaySupport komunikovať s webovou službou.

Zavoláme túto triedu CountryClient:

public class CountryClient extend WebServiceGatewaySupport {public GetCountryResponse getCountry (krajina reťazca) {GetCountryRequest request = new GetCountryRequest (); request.setName (krajina); GetCountryResponse response = (GetCountryResponse) getWebServiceTemplate () .marshalSendAndReceive (požiadavka); spätná odozva; }}

Tu sme definovali jednu metódu getCountry, zodpovedajúce operácii, ktorú webová služba odhalila. V metóde sme vytvorili a GetCountryRequest inštancie a vyvolala webovú službu, aby získala GetCountryResponse. Inými slovami, tu sme vykonali výmenu SOAP.

Ako vidíme, Spring urobila vyvolanie pekne priamym spôsobom WebServiceTemplate. Použili sme metódu šablóny marshalSendAndReceive vykonať výmenu SOAP.

Konverzie XML sa tu spracúvajú prostredníctvom zásuvného modulu Marshaller.

Pozrime sa teraz na konfiguráciu Marshaller pochádza z.

3.3. CountryClientConfig

Všetko, čo potrebujeme na konfiguráciu nášho klienta Spring WS, sú dve fazule.

Najskôr a Jaxb2Marshaller prevádzať správy do az XML a za druhé, naše CountryClient, ktorá bude drôtovaná v zoraďovateľ fazuľa:

@Configuration verejná trieda CountryClientConfig {@Bean public Jaxb2Marshaller marshaller () {Jaxb2Marshaller marshaller = nový Jaxb2Marshaller (); marshaller.setContextPath ("com.baeldung.springsoap.client.gen"); návratový radič; } @Bean public CountryClient countryClient (Jaxb2Marshaller marshaller) {CountryClient client = new CountryClient (); client.setDefaultUri ("// localhost: 8080 / ws"); client.setMarshaller (zriaďovateľ); client.setUnmarshaller (zriaďovateľ); návratný klient; }} 

Tu sa musíme postarať o to, aby zoraďovateľKontextová cesta je rovnaká ako generovať balíček uvedené v konfigurácii pluginu našej pom.xml.

Tu si tiež všimnite predvolený identifikátor URI klienta. Je nastavený ako mydlo: adresa umiestnenie zadané vo WSDL.

4. Testovanie klienta

Ďalej napíšeme test JUnit, aby sme overili, či náš klient funguje podľa očakávania:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = CountryClientConfig.class, loader = AnnotationConfigContextLoader.class) verejná trieda ClientLiveTest {@Autowired CountryClient client; @Test public void givenCountryService_whenCountryPoland_thenCapitalIsWarsaw () {GetCountryResponse response = client.getCountry ("Poľsko"); assertEquals ("Varšava", response.getCountry (). getCapital ()); } @Test public void givenCountryService_whenCountrySpain_thenCurrencyEUR () {GetCountryResponse response = client.getCountry ("Španielsko"); assertEquals (Currency.EUR, response.getCountry (). getCurrency ()); }} 

Ako vidíme, zapojili sme drôt CountryClient fazuľa definovaná v našom CountryClientConfig. Potom sme použili jeho getCountry vyvolať vzdialenú službu, ako je opísané vyššie.

Ďalej sme boli schopní extrahovať informácie, ktoré sme potrebovali pre naše tvrdenia, pomocou generovaného dátového modelu POJO, Krajina, a Mena.

5. Záver

V tomto návode videli sme základy toho, ako vyvolať webovú službu SOAP pomocou Spring WS.

Iba sme poškriabali povrch toho, čo Spring ponúka v oblasti webových služieb SOAP; je toho veľa na preskúmanie.

Ako vždy, zdrojový kód je k dispozícii na GitHub.