14-10. Introduction to contract first SOAP Web Services

Spring Guides

mvn spring-boot:run

Producing a SOAP web service

WebServiceConfig
package com.example.producingwebservice;

import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;
import org.springframework.xml.xsd.SimpleXsdSchema;
import org.springframework.xml.xsd.XsdSchema;

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
        @Bean
        public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext applicationContext) {
                MessageDispatcherServlet servlet = new MessageDispatcherServlet();
                servlet.setApplicationContext(applicationContext);
                servlet.setTransformWsdlLocations(true);
                return new ServletRegistrationBean<>(servlet, "/ws/*");
        }

        @Bean(name = "countries")
        public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) {
                DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
                wsdl11Definition.setPortTypeName("CountriesPort");
                wsdl11Definition.setLocationUri("/ws");
                wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service");
                wsdl11Definition.setSchema(countriesSchema);
                return wsdl11Definition;
        }

        @Bean
        public XsdSchema countriesSchema() {
                return new SimpleXsdSchema(new ClassPathResource("countries.xsd"));
        }
}
curl --header "content-type: text/xml" -d @request.xml http://localhost:8080/ws
request.xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                                  xmlns:gs="http://spring.io/guides/gs-producing-web-service">
   <soapenv:Header/>
   <soapenv:Body>
      <gs:getCountryRequest>
         <gs:name>Spain</gs:name>
      </gs:getCountryRequest>
   </soapenv:Body>
</soapenv:Envelope>