SOAP webszolgáltatás meghívása tavasszal
1. Áttekintés
Korábban láttuk, hogyan lehet SOAP webszolgáltatást létrehozni a Spring segítségével.
Ebben az oktatóanyagban megtudhatjuk, hogyan lehet létrehozni egy Spring-alapú klienst a webes szolgáltatás fogyasztására.
A Java Java SOAP webszolgáltatásának meghívásakor ugyanezt tettük a JAX-WS RI használatával.
2. A tavaszi SOAP webszolgáltatás - gyors áttekintés
Korábban tavasszal hoztunk létre egy webszolgáltatást az ország nevének megadásához. Mielőtt elmélyülnénk az ügyfél megvalósításában, készítsünk egy gyors áttekintést arról, hogyan tettük ezt.
A szerződés-első megközelítést követve először egy XML sémafájlt írtunk, amely meghatározta a tartományt. Ezután ezt az XSD-t használtuk osztályok előállítására a kérés, válasz és adatmodell számára a jaxb2-maven-plugin.
Ezt követően négy osztályt kódoltunk:
- OrszágEndpoint - a kérésre válaszoló végpont
- OrszágRepository - a háttér-tároló az országadatok megadásához
- WebServiceConfig - a szükséges babot meghatározó konfiguráció
- Alkalmazás - a Spring Boot App, hogy szolgáltatásunkat fogyasztás céljából elérhetővé tegyük
Végül a cURL-en keresztül teszteltük SOAP-kérelem küldésével.
Indítsuk el a szervert a fenti Boot alkalmazás futtatásával, és lépjünk a következő lépésre.
3. Az Ügyfél
Itt leszünk hozzon létre egy Spring klienst a fenti webszolgáltatás meghívására és tesztelésére.
Most lépésről lépésre lássuk, mit kell tennünk az ügyfél létrehozása érdekében.
3.1. Kliens kód generálása
Először generálunk néhány osztályt a WSDL címen //localhost:8080/ws/countries.wsdl. Ezt letöltjük és elmentjük a mappánkba src / main / resources mappába.
A kód előállításához a Maven használatával hozzáadjuk a maven-jaxb2-plugin a miénknek pom.xml:
org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.14.0 WSDL létrehozása $ {project.basedir} / src / main / java com.baeldung.springsoap.client.gen $ {project.basedir} / src / main / resources országok.wsdl
Különösen a beépülő modul konfigurációjában definiáltuk:
- generatorDirectory - a mappa, ahová a létrehozott műtermékeket menteni fogja
- generatorPackage - a csomag neve, amelyet a műtermékek használni fognak
- schemaDirectory és schemaBe foglalja - a WSDL könyvtárát és fájlnevét
A JAXB generációs folyamat végrehajtásához ezt a bővítményt a projekt egyszerű felépítésével hajtjuk végre:
mvn össze
Érdekes módon, az itt előállított műtermékek megegyeznek a szolgáltatáshoz létrehozottakkal.
Soroljuk fel azokat, amelyeket használni fogunk:
- Ország.java és Pénznem.java - az adatmodellt képviselő POJO-k
- GetCountryRequest.java - a kérés típusa
- GetCountryResponse.java - a válasz típusa
A szolgáltatást a világ bármely pontján telepíthetik, és csak a WSDL-jével ugyanazokat az osztályokat tudtuk létrehozni az ügyfél végén, mint a szerver!
3.2. CountryClient
Ezután ki kell terjesztenünk a tavaszi programot WebServiceGatewaySupport kölcsönhatásba lépni a webszolgáltatással.
Hívjuk ezt az osztályt CountryClient:
a public class CountryClient kiterjeszti a WebServiceGatewaySupport {public GetCountryResponse getCountry (String ország) {GetCountryRequest kérés = új GetCountryRequest (); request.setName (ország); GetCountryResponse response = (GetCountryResponse) getWebServiceTemplate () .marshalSendAndReceive (kérés); visszatérési válasz; }}
Itt egyetlen módszert definiáltunk getCountry, amely megfelel a webszolgáltatás által kitett műveletnek. A módszerben létrehoztunk egy GetCountryRequest példányt, és a webszolgáltatást hívta meg a GetCountryResponse. Más szavakkal, itt hajtottuk végre a SOAP cserét.
Amint láthatjuk, Spring meglehetősen egyértelművé tette az invokációt WebServiceTemplate. A sablon módszerét használtuk marsallSendAndReceive hogy elvégezzék a SOAP cserét.
Az XML konverziókat itt egy plug-in segítségével kezeljük Marshaller.
Most nézzük meg a konfigurációt, ahol ez Marshaller származik.
3.3. CountryClientConfig
A Spring WS kliens konfigurálásához mindössze két bab kell.
Először a Jaxb2Marshaller üzenetek konvertálása XML-be és onnan, másodsorban pedig a mi CountryClient, amely bekapcsolja a rendező bab:
@Configuration public class CountryClientConfig {@Bean public Jaxb2Marshaller marshaller () {Jaxb2Marshaller marshaller = new Jaxb2Marshaller (); marshaller.setContextPath ("com.baeldung.springsoap.client.gen"); visszatérő rendező; } @Bean public CountryClient countryClient (Jaxb2Marshaller marshaller) {CountryClient ügyfél = új CountryClient (); client.setDefaultUri ("// localhost: 8080 / ws"); client.setMarshaller (marshaller); client.setUnmarshaller (marshaller); visszatérő ügyfél; }}
Itt arra kell vigyáznunk, hogy a rendező’Kontextusútja megegyezik a generatorPackage a plugin konfigurációban megadva pom.xml.
Kérjük, itt vegye figyelembe az ügyfél alapértelmezett URI-ját is. Be van állítva szappan: cím a WSDL-ben megadott hely.
4. Az ügyfél tesztelése
Ezután írunk egy JUnit tesztet annak ellenőrzésére, hogy ügyfelünk a várt módon működik-e:
@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (class = CountryClientConfig.class, loader = AnnotationConfigContextLoader.class) public class ClientLiveTest {@Autowired CountryClient client; @Test public void givenCountryService_whenCountryPoland_thenCapitalIsWarsaw () {GetCountryResponse response = client.getCountry ("Lengyelország"); assertEquals ("Varsó", response.getCountry (). getCapital ()); } @Test public void givenCountryService_whenCountrySpain_thenCurrencyEUR () {GetCountryResponse response = client.getCountry ("Spanyolország"); assertEquals (Pénznem.EUR, response.getCountry (). getCurrency ()); }}
Mint láthatjuk, bekötöttük a CountryClient bab definiálva a mi CountryClientConfig. Aztán használtuk getCountry hogy a korábban leírt módon hívja meg a távoli szolgáltatást.
Sőt, a POJO-k által generált adatmodell segítségével ki tudtuk vonni az állításokhoz szükséges információkat, Ország, és Valuta.
5. Következtetés
Ebben az oktatóanyagban láttuk az alapokat, hogyan lehet a SOAP webszolgáltatást meghívni a Spring WS segítségével.
Csupán megvakartuk a Spring kínálatának felületét a SOAP webszolgáltatások területén; rengeteg felfedeznivaló van.
Mint mindig, a forráskód is elérhető a GitHubon.