Påkalle en SOAP-nettjeneste om våren

1. Oversikt

Tidligere så vi hvordan vi skulle lage en SOAP-nettjeneste med Spring.

I denne opplæringen lærer vi hvordan du oppretter en vårbasert klient for å konsumere denne nettjenesten.

Ved å påkalle en SOAP-nettjeneste i Java, gjorde vi det samme ved hjelp av JAX-WS RI.

2. Vårens SOAP-nettjeneste - et raskt sammendrag

Tidligere hadde vi opprettet en nettjeneste om våren for å hente dataene til et land, gitt navnet. Før vi går inn i klientimplementeringen, la oss gjøre et raskt sammendrag av hvordan vi hadde gjort det.

Etter kontrakt-første tilnærmingen skrev vi først en XML-skjemafil som definerer domenet. Vi brukte deretter denne XSD til å generere klasser for forespørsel, svar og datamodell ved hjelp av jaxb2-maven-plugin.

Etter det kodet vi fire klasser:

  • CountryEndpoint - sluttpunktet som svarer på forespørselen
  • CountryRepository - depotet på baksiden for å levere landsdata
  • WebServiceConfig - konfigurasjonen som definerer de nødvendige bønnene
  • applikasjon - Spring Boot App for å gjøre tjenesten vår tilgjengelig for forbruk

Til slutt testet vi det via cURL ved å sende en SOAP-forespørsel.

La oss nå starte serveren ved å kjøre ovennevnte Boot-app og gå videre til neste trinn.

3. Kunden

Her skal vi bygge en vårklient for å påkalle og teste ovennevnte nettjeneste.

La oss nå se trinnvis hva vi trenger å gjøre for å opprette en klient.

3.1. Generer klientkode

Først genererer vi noen få klasser ved hjelp av WSDL tilgjengelig på //localhost:8080/ws/countries.wsdl. Vi laster ned og lagrer dette i vår src / main / resources mappe.

For å generere kode ved hjelp av Maven, vi legger til maven-jaxb2-plugin til vår pom.xml:

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

Spesielt i plugin-konfigurasjonen definerte vi:

  • generere katalog - mappen der de genererte gjenstandene lagres
  • genererePakke - pakkenavnet som gjenstandene vil bruke
  • schemaDirectory og schemaInkluderer - katalogen og filnavnet for WSDL

For å utføre JAXB-generasjonsprosessen, vil vi utføre dette pluginet ved å bygge prosjektet:

mvn kompilere

Interessant, gjenstandene som genereres her er de samme som de som genereres for tjenesten.

La oss liste opp de vi skal bruke:

  • Country.java og Valuta.java - POJOer som representerer datamodellen
  • GetCountryRequest.java - forespørselstypen
  • GetCountryResponse.java - svarstypen

Tjenesten kan distribueres hvor som helst i verden, og med bare WSDL, klarte vi å generere de samme klassene i klientenden som serveren!

3.2. CountryClient

Deretter må vi utvide vårens WebServiceGatewaySupport å samhandle med nettjenesten.

Vi vil kalle denne klassen CountryClient:

offentlig klasse CountryClient utvider WebServiceGatewaySupport {public GetCountryResponse getCountry (String country) {GetCountryRequest request = new GetCountryRequest (); request.setName (land); GetCountryResponse respons = (GetCountryResponse) getWebServiceTemplate () .marshalSendAndReceive (forespørsel); returrespons; }}

Her definerte vi en enkelt metode getCountry, tilsvarende den operasjonen som nettjenesten hadde eksponert. I metoden opprettet vi en GetCountryRequest forekomst og påkalte nettjenesten for å få en GetCountryResponse. Med andre ord, her utførte vi SOAP-utvekslingen.

Som vi kan se, gjorde Spring påkallelsen ganske grei med sin WebServiceTemplate. Vi brukte malens metode marshalSendAndReceive å utføre SOAP-utveksling.

XML-konverteringene håndteres her via en plug-in Marshaller.

La oss nå se på konfigurasjonen der dette Marshaller kommer fra.

3.3. CountryClientConfig

Alt vi trenger for å konfigurere vår WS-klient er to bønner.

Først, a Jaxb2Marshaller for å konvertere meldinger til og fra XML, og for det andre vår CountryClient, som vil koble inn marshaller bønne:

@Configuration public class CountryClientConfig {@Bean public Jaxb2Marshaller marshaller () {Jaxb2Marshaller marshaller = new Jaxb2Marshaller (); marshaller.setContextPath ("com.baeldung.springsoap.client.gen"); retur marshaller; } @Bean public CountryClient countryClient (Jaxb2Marshaller marshaller) {CountryClient client = new CountryClient (); client.setDefaultUri ("// localhost: 8080 / ws"); client.setMarshaller (marshaller); client.setUnmarshaller (marshaller); retur klient; }} 

Her må vi passe på at marshaller’S kontekstbane er den samme som genererePakke spesifisert i plugin-konfigurasjonen til vår pom.xml.

Vær også oppmerksom på standard URI for klienten her. Det er satt som såpe: adresse stedet spesifisert i WSDL.

4. Testing av klienten

Deretter skriver vi en JUnit-test for å bekrefte at klienten vår fungerer som forventet:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = CountryClientConfig.class, loader = AnnotationConfigContextLoader.class) public class ClientLiveTest {@Autowired CountryClient client; @Test offentlig ugyldig givenCountryService_whenCountryPoland_thenCapitalIsWarsaw () {GetCountryResponse respons = client.getCountry ("Polen"); assertEquals ("Warszawa", respons.getCountry (). getCapital ()); } @Test offentlig ugyldig givenCountryService_whenCountrySpain_thenCurrencyEUR () {GetCountryResponse respons = client.getCountry ("Spania"); assertEquals (Currency.EUR, response.getCountry (). getCurrency ()); }} 

Som vi kan se, koblet vi oss til CountryClient bønne definert i vår CountryClientConfig. Så brukte vi den getCountry å påkalle fjerntjenesten som beskrevet tidligere.

Videre var vi i stand til å hente ut informasjonen vi trengte for våre påstander ved hjelp av den genererte datamodellen POJOs, Land, og Valuta.

5. Konklusjon

I denne veiledningen, vi så det grunnleggende om hvordan man kan påberope en SOAP-nettjeneste ved hjelp av Spring WS.

Vi skrapte bare overflaten av det Spring har å tilby i SOAPs webtjenesteområde; det er mye å utforske.

Som alltid er kildekoden tilgjengelig på GitHub.


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