SOAP webszolgáltatás létrehozása tavasszal
1. Áttekintés
Ebben az oktatóanyagban megtudhatjuk, hogyan hozhat létre a SOAP-alapú webszolgáltatás a Spring Boot Starter webszolgáltatásokkal.
2. SOAP webszolgáltatások
A webszolgáltatás röviden egy gép-gép közötti, platformtól független szolgáltatás, amely lehetővé teszi a hálózaton keresztüli kommunikációt.
A SOAP egy üzenetküldési protokoll. Az üzenetek (kérések és válaszok) XML-dokumentumok HTTP-n keresztül. Az XML szerződést a WSDL határozza meg (Web Services Description Language). Szabályokat tartalmaz, amelyek meghatározzák az üzeneteket, összerendeléseket, műveleteket és a szolgáltatás helyét.
A SOAP-ban használt XML rendkívül összetetté válhat. Ezért a legjobb, ha a SOAP-ot olyan keretrendszerrel használja, mint a JAX-WS vagy a Spring, amint ezt az oktatóanyagban láthatjuk.
3. A szerződés első fejlesztési stílusa
A webszolgáltatás létrehozásakor kétféle megközelítés lehetséges: a Contract-Last és a Contract-First. Amikor a szerződés-utolsó megközelítést alkalmazzuk, akkor a Java kóddal indulunk, és az osztályokból generáljuk a webszolgáltatási szerződést (WSDL). A szerződés-első használatakor a WSDL szerződéssel indulunk, amelyből a Java osztályokat generáljuk.
A Spring-WS csak a szerződés első fejlesztési stílusát támogatja.
4. A tavaszi rendszerindító projekt beállítása
Létrehozunk egy Spring Boot projektet, ahol meghatározzuk a SOAP WS szerverünket.
4.1. Maven-függőségek
Kezdjük azzal, hogy hozzáadjuk a tavasz-bakancs-induló-szülő projektünkhöz:
org.springframework.boot spring-boot-starter-parent 2.2.6.KÖZLEMÉNY
Ezután tegyük hozzá a tavasz-boot-starter-web-szolgáltatások és wsdl4j függőségek:
org.springframework.boot spring-boot-starter-web-services wsdl4j wsdl4j
4.2. Az XSD fájl
A szerződés-első megközelítés megköveteli, hogy először hozzuk létre a domainünket (módszereket és paramétereket) a szolgáltatásunkhoz. XML sémafájlt (XSD) fogunk használni, amelyet a Spring-WS automatikusan exportál WSDL-ként:
Ebben a fájlban látjuk a getCountryRequest webszolgáltatási kérelem. Meghatározzuk, hogy elfogadja a típus egy paraméterét húr.
Ezután meghatározzuk a válasz formátumát, amely egy típusú objektumot tartalmaz ország.
Végre látjuk a valuta objektum, amelyet a ország tárgy.
4.3. Generálja a tartomány Java osztályokat
Most létrehozzuk a Java osztályokat az előző szakaszban meghatározott XSD fájlból. A jaxb2-maven-plugin ezt automatikusan elkészíti a készítés ideje alatt. A beépülő modul az XJC eszközt használja kódgeneráló motorként. Az XJC az XSD séma fájlt teljesen kommentált Java osztályokba fordítja.
Adjuk hozzá és konfiguráljuk a bővítményt a pom.xml fájlban:
org.codehaus.mojo jaxb2-maven-plugin 1.6 xjc xjc $ {project.basedir} / src / main / resources / $ {project.basedir} / src / main / java false
Itt két fontos konfigurációt észlelünk:
- $ {project.basedir} / src / main / resources - Az XSD fájl helye
- $ {project.basedir} / src / main / java - Ahol azt akarjuk, hogy a Java kódunkat generálják
A Java osztályok előállításához egyszerűen használhatjuk a Java telepítésünkből származó xjc eszközt. Bár a Maven projektünkben a dolgok még egyszerűbbek, mint az osztályok automatikusan generálódnak a szokásos Maven-összeállítás során:
mvn össze
4.4. Adja hozzá a SOAP webszolgáltatás végpontot
A SOAP webszolgáltatás végpont osztály kezeli a szolgáltatás összes beérkező kérését. Megkezdi a feldolgozást és visszaküldi a választ.
Ennek meghatározása előtt létrehozzuk a Ország adattárnak a webszolgáltatás számára történő adatszolgáltatása érdekében.
@Component public class CountryRepository {private static final Map countries = new HashMap (); @PostConstruct public void initData () {// inicializálja az országok térképét} public Country findCountry (String name) {return countries.get (name); }}
Ezután konfiguráljuk a végpontot:
@Endpoint public class CountryEndpoint {private static final String NAMESPACE_URI = "//www.baeldung.com/springsoap/gen"; privát CountryRepository countryRepository; @Autowired public CountryEndpoint (CountryRepository countryRepository) {this.countryRepository = countryRepository; } @PayloadRoot (névtér = NAMESPACE_URI, localPart = "getCountryRequest") @ResponsePayload public GetCountryResponse getCountry (@RequestPayload GetCountryRequest kérés) {GetCountryResponse válasz = új GetCountryResponse (); response.setCountry (countryRepository.findCountry (request.getName ())); visszatérési válasz; }}
Íme néhány részlet, amelyet észre kell venni:
- @Endpoint - regisztrálja az osztályt a Spring WS szolgáltatással, mint webszolgáltatás végpontot
- @PayloadRoot – szerint határozza meg a kezelő módszert névtér és localPart attribútumokat
- @ResponsePayload - azt jelzi, hogy ez a módszer egy értéket ad vissza a válasz hasznos terheléséhez
- @RequestPayload - azt jelzi, hogy ez a módszer elfogad egy paramétert, amelyet leképeznek a bejövő kérésből
4.5. A SOAP webszolgáltatás konfigurációs komponensei
Most hozzunk létre egy osztályt a Spring üzenet diszpécser kiszolgáló konfigurálásához a kérés fogadására:
@EnableWs @Configuration nyilvános osztály A WebServiceConfig kiterjeszti a WsConfigurerAdapter {// babdefiníciókat}
@EnableWs engedélyezi a SOAP Web Service szolgáltatásait ebben a Spring Boot alkalmazásban. A WebServiceConfig osztály kiterjeszti a WsConfigurerAdapter alaposztály, amely az annotáció-vezérelt Spring-WS programozási modellt konfigurálja.
Hozzunk létre egy MessageDispatcherServlet amelyet a SOAP kérések kezelésére használnak:
@Bean public ServletRegistrationBean messageDispatcherServlet (ApplicationContext applicationContext) {MessageDispatcherServlet servlet = new MessageDispatcherServlet (); servlet.setApplicationContext (applicationContext); servlet.setTransformWsdlLocations (true); return new ServletRegistrationBean (szervlet, "/ ws / *"); }
Beállítottuk az injekciót ApplicationContext tárgya servlet hogy a Spring-WS találjon más tavaszi babot.
Engedélyezzük a WSDL helykiszolgáló kisalkalmazás átalakítását is. Ez átalakítja a szappan: cím úgy, hogy az tükrözze a bejövő kérés URL-jét.
Végül hozzunk létre egy DefaultWsdl11Definition tárgy. Ez egy szabványos WSDL 1.1-et tesz ki XsdSchema használatával. A WSDL név megegyezik a bab nevével.
@Bean (név = "országok") public DefaultWsdl11Definition defaultWsdl11Definition (XsdSchema countriesSchema) {DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition (); wsdl11Definition.setPortTypeName ("CountriesPort"); wsdl11Definition.setLocationUri ("/ ws"); wsdl11Definition.setTargetNamespace ("// www.baeldung.com/springsoap/gen"); wsdl11Definition.setSchema (országokSchema); return wsdl11Definition; } @Bean public XsdSchema countriesSchema () {return new SimpleXsdSchema (new ClassPathResource ("countries.xsd")); }
5. A SOAP projekt tesztelése
Miután a projekt konfigurálása befejeződött, készen állunk a tesztelésre.
5.1. Építsd és futtasd a projektet
Lehetséges lenne WAR fájl létrehozása és külső alkalmazáskiszolgálóra történő telepítése. Ehelyett a Spring Boot programot fogjuk használni, amely gyorsabb és egyszerűbb módja az alkalmazás futtatásának.
Először a következő osztályt adjuk hozzá, hogy az alkalmazás futtatható legyen:
@SpringBootApplication public class Application {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}
Vegye figyelembe, hogy nem használunk XML fájlokat (például web.xml) az alkalmazás létrehozásához. Ez mind tiszta Java.
Most készen állunk az alkalmazás felépítésére és futtatására:
mvn spring-boot: fut
Annak ellenőrzéséhez, hogy az alkalmazás megfelelően működik-e, megnyithatjuk a WSDL-t az URL-en keresztül: //localhost:8080/ws/countries.wsdl
5.2. Teszteljen egy SOAP kérést
A kérelem teszteléséhez létrehozzuk a következő fájlt, és elnevezzük a request.xml fájlnak:
Spanyolország
A kérés elküldéséhez tesztkiszolgálónknak olyan külső eszközöket használhatunk, mint a SoapUI vagy a Google Chrome kiterjesztésű Wizdler. Egy másik módszer a következő parancs futtatása a shellünkben:
curl --header "content-type: text / xml" -d @ request.xml // localhost: 8080 / ws
Az eredményül kapott válasz behúzás vagy sortörés nélkül nem biztos, hogy könnyen olvasható.
A formázás megtekintéséhez átmásolhatjuk az IDE-be vagy egy másik eszközbe. Ha telepítettük az xmllib2 fájlt, akkor a curl parancs kimenetét átirányíthatjuk xmllint:
curl [parancssori opciók] | xmllint --format -
A válasznak tartalmaznia kell Spanyolországra vonatkozó információkat:
Spanyolország 46704314 Madrid EUR
6. Következtetés
Ebben a cikkben megtanultuk, hogyan hozhatunk létre SOAP webszolgáltatást a Spring Boot használatával. Megtanultuk azt is, hogyan lehet Java kódot létrehozni egy XSD fájlból, és láttuk, hogyan kell konfigurálni a SOAP kérések feldolgozásához szükséges Spring babot.
A teljes forráskód elérhető a GitHub oldalon.