Vytvorenie webovej služby SOAP s jarom

1. Prehľad

V tomto návode uvidíme, ako vytvoriť Webová služba založená na SOAP s webovými službami Spring Boot Starter.

2. SOAP webové služby

Webová služba je skrátka služba nezávislá na stroji, nezávislá od platformy, ktorá umožňuje komunikáciu cez sieť.

SOAP je protokol správ. Správy (žiadosti a odpovede) sú XML dokumenty cez HTTP. Kontrakt XML je definovaný WSDL (Jazyk popisu webových služieb). Poskytuje sadu pravidiel na definovanie správ, väzieb, operácií a umiestnenia služby.

XML používaný v SOAP môže byť extrémne zložitý. Z tohto dôvodu je najlepšie použiť SOAP s rámcom ako JAX-WS alebo Spring, ako uvidíme v tomto návode.

3. Štýl vývoja na základe zmluvy

Pri vytváraní webovej služby existujú dva možné prístupy: Zmluva-posledná a Zmluva-prvá. Keď použijeme prístup na základe zmluvy, začneme kódom Java a z tried vygenerujeme zmluvu o webových službách (WSDL). Pri prvom použití zmluvy začíname kontraktom WSDL, z ktorého generujeme triedy Java.

Spring-WS podporuje iba vývojový štýl založený na zmluve.

4. Nastavenie projektu Spring Boot

Chystáme sa vytvoriť projekt Spring Boot, kde definujeme náš server SOAP WS.

4.1. Maven závislosti

Začnime pridaním pružina-štartér-štartér-rodič do nášho projektu:

 org.springframework.boot spring-boot-starter-parent 2.2.6.RELEASE 

Ďalej pridajme spring-boot-starter-web-services a wsdl4j závislosti:

 org.springframework.boot spring-boot-starter-web-services wsdl4j wsdl4j 

4.2. Súbor XSD

Prístup na základe zmluvy vyžaduje, aby sme najskôr vytvorili doménu (metódy a parametre) pre našu službu. Použijeme súbor schémy XML (XSD), ktorý Spring-WS automaticky exportuje ako WSDL:

V tomto súbore vidíme formát súboru getCountryRequest požiadavka webovej služby. Definujeme ho tak, aby akceptoval jeden parameter typu povrázok.

Ďalej definujeme formát odpovede, ktorý obsahuje objekt typu krajina.

Nakoniec uvidíme mena objekt, používaný v rámci krajina objekt.

4.3. Vytvorte doménové triedy Java

Teraz vygenerujeme triedy Java zo súboru XSD definovaného v predchádzajúcej časti. The jaxb2-maven-plugin to urobí automaticky počas zostavovania. Plugin používa ako generátor kódu nástroj XJC. XJC kompiluje súbor schémy XSD do plne anotovaných tried Java.

Pridajme a nakonfigurujeme doplnok v našom pom.xml:

 org.codehaus.mojo jaxb2-maven-plugin 1.6 xjc xjc $ {project.basedir} / src / main / resources / $ {project.basedir} / src / main / java false 

Tu si všimneme dve dôležité konfigurácie:

  • $ {project.basedir} / src / main / resources - Umiestnenie súboru XSD
  • $ {project.basedir} / src / main / java - Kam chceme, aby sa generoval náš kód Java

Na vygenerovanie tried Java sme mohli jednoducho použiť nástroj xjc z našej inštalácie Java. Aj keď v našom projekte Maven sú veci ešte jednoduchšie, ako triedy sa vygenerujú automaticky počas obvyklého zostavenia Maven:

mvn zostaviť

4.4. Pridajte koncový bod webovej služby SOAP

Trieda koncového bodu webovej služby SOAP spracuje všetky prichádzajúce požiadavky na službu. Spustí spracovanie a odošle odpoveď späť.

Predtým, ako to definujeme, vytvoríme a Krajina úložisko za účelom poskytovania údajov webovej službe.

@ Komponenta verejná trieda CountryRepository {súkromná statická konečná Mapa krajín = nový HashMap (); @PostConstruct public void initData () {// inicializovať mapu krajín} public Country findCountry (názov reťazca) {return countries.get (name); }} 

Ďalej nakonfigurujme koncový bod:

@Endpoint verejná trieda CountryEndpoint {private static final String NAMESPACE_URI = "//www.baeldung.com/springsoap/gen"; súkromné ​​CountryRepository countryRepository; @Autowired public CountryEndpoint (CountryRepository countryRepository) {this.countryRepository = countryRepository; } @PayloadRoot (namespace = NAMESPACE_URI, localPart = "getCountryRequest") @ResponsePayload public GetCountryResponse getCountry (požiadavka @RequestPayload GetCountryRequest) {GetCountryResponse response = nový GetCountryResponse (); response.setCountry (countryRepository.findCountry (request.getName ())); spätná odozva; }} 

Uvádzame niekoľko podrobností:

  • @Endpoint - zaregistruje triedu s Spring WS ako koncový bod webovej služby
  • @PayloadRootdefinuje metódu obsluhy podľa menný priestor a localPart atribúty
  • @ResponsePayload - označuje, že táto metóda vracia hodnotu, ktorá sa má namapovať na užitočné zaťaženie odpovede
  • @RequestPayload - označuje, že táto metóda prijíma parameter, ktorý sa má mapovať z prichádzajúcej požiadavky

4.5. Fazuľa konfigurácie webovej služby SOAP

Poďme teraz vytvoriť triedu na konfiguráciu servletu jarných dispečerov na prijímanie požiadaviek:

@EnableWs @Configuration verejná trieda WebServiceConfig rozširuje WsConfigurerAdapter {// definície fazule}

@EnableWs aktivuje funkcie webovej služby SOAP v tejto aplikácii Spring Boot. The WebServiceConfig trieda rozširuje WsConfigurerAdapter základná trieda, ktorá konfiguruje anotačný programovací model Spring-WS.

Vytvorme a MessageDispatcherServlet ktorý sa používa na spracovanie požiadaviek SOAP:

@Bean public ServletRegistrationBean messageDispatcherServlet (ApplicationContext applicationContext) {MessageDispatcherServlet servlet = nový MessageDispatcherServlet (); servlet.setApplicationContext (applicationContext); servlet.setTransformWsdlLocations (true); vrátiť nový ServletRegistrationBean (servlet, "/ ws / *"); } 

Nastavili sme injekciu ApplicationContext predmet servlet aby Spring-WS mohla nájsť ďalšie jarné bôby.

Tiež povolíme transformáciu servletu umiestnenia WSDL. Týmto sa transformuje atribút umiestnenia mydlo: adresa vo WSDL tak, aby odrážal URL prichádzajúcej požiadavky.

Nakoniec vytvoríme a DefaultWsdl11Definition objekt. Toto vystavuje štandardný WSDL 1.1 pomocou XsdSchema. Názov WSDL bude rovnaký ako názov fazule.

@Bean (name = "countries") public DefaultWsdl11Definition defaultWsdl11Definition (XsdSchema countriesSchema) {DefaultWsdl11Definition wsdl11Definition = nový DefaultWsdl11Definition (); wsdl11Definition.setPortTypeName ("CountriesPort"); wsdl11Definition.setLocationUri ("/ ws"); wsdl11Definition.setTargetNamespace ("// www.baeldung.com/springsoap/gen"); wsdl11Definition.setSchema (countriesSchema); návrat wsdl11Definition; } @Bean public XsdSchema countriesSchema () {return new SimpleXsdSchema (new ClassPathResource ("countries.xsd")); } 

5. Testovanie projektu SOAP

Po dokončení konfigurácie projektu sme pripravení ho otestovať.

5.1. Vytvorte a spustite projekt

Bolo by možné vytvoriť súbor WAR a nasadiť ho na externý aplikačný server. Namiesto toho použijeme Spring Boot, čo je rýchlejší a ľahší spôsob uvedenia aplikácie do prevádzky.

Najskôr pridáme nasledujúcu triedu, aby bola aplikácia spustiteľná:

@SpringBootApplication verejná trieda Aplikácia {public static void main (String [] args) {SpringApplication.run (Application.class, args); }} 

Upozorňujeme, že na vytvorenie tejto aplikácie nepoužívame žiadne súbory XML (napríklad web.xml). Všetko je to čistá Java.

Teraz sme pripravení vytvoriť a spustiť aplikáciu:

mvn spring-boot: spustiť

Ak chcete skontrolovať, či aplikácia správne funguje, môžeme otvoriť WSDL prostredníctvom adresy URL: //localhost:8080/ws/countries.wsdl

5.2. Vyskúšajte požiadavku SOAP

Na otestovanie požiadavky vytvoríme nasledujúci súbor a pomenujeme ho request.xml:

    Španielsko 

Na odoslanie žiadosti na náš testovací server sme mohli použiť externé nástroje, ako je SoapUI alebo rozšírenie Google Chrome Wizdler. Ďalším spôsobom je spustenie nasledujúceho príkazu v našom prostredí:

curl --header "content-type: text / xml" -d @ request.xml // localhost: 8080 / ws

Výsledná odpoveď nemusí byť ľahko čitateľná bez odsadenia alebo zalomenia riadkov.

Ak ho chcete vidieť naformátovaný, môžeme ho skopírovať a vložiť do nášho IDE alebo iného nástroja. Ak sme nainštalovali xmllib2, môžeme výstup nášho príkazu curl prepojiť s xmllint:

zvlnenie [možnosti príkazového riadku] | xmllint --formát -

Odpoveď by mala obsahovať informácie o Španielsku:

     Španielsko 46704314 Madrid EUR 

6. Záver

V tomto článku sme sa naučili, ako vytvoriť webovú službu SOAP pomocou Spring Boot. Naučili sme sa tiež, ako vygenerovať kód Java zo súboru XSD, a videli sme, ako nakonfigurovať jarné bôby potrebné na spracovanie požiadaviek SOAP.

Celý zdrojový kód je k dispozícii na GitHub.


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