Для работы с WSDL SOAP в Spring, вы можете использовать библиотеку Spring Web Services. Spring Web Services предоставляет простой способ создания SOAP-совместимых веб-сервисов и клиентов на основе WSDL.
Вот шаги, которые вам необходимо следовать для работы с WSDL SOAP в Spring:
1. Добавьте зависимость в ваш файл pom.xml для использования Spring Web Services:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency>
2. Создайте класс-контроллер, который будет обрабатывать запросы SOAP. Для этого можно использовать аннотации @Endpoint
и @PayloadRoot
:
@Endpoint public class SOAPController { private static final String NAMESPACE_URI = "http://yournamespace.com"; @PayloadRoot(namespace = NAMESPACE_URI, localPart = "yourRequest") @ResponsePayload public YourResponse handleRequest(@RequestPayload YourRequest request) { // обработка запроса и возвращение ответа } }
3. Создайте конфигурационный класс, где вы настраиваете ваш WSDL и создаете DefaultWsdl11Definition
:
@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 = "yourService") public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema yourSchema) { DefaultWsdl11Definition definition = new DefaultWsdl11Definition(); definition.setPortTypeName("YourServicePort"); definition.setTargetNamespace("http://yournamespace.com"); definition.setLocationUri("/ws"); definition.setSchema(yourSchema); return definition; } @Bean public XsdSchema yourSchema() { return new SimpleXsdSchema(new ClassPathResource("your-schema.xsd")); } }
4. Создайте файл your-schema.xsd, в котором вы определяете структуру вашего SOAP-сообщения:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://yournamespace.com" elementFormDefault="qualified"> <xs:element name="yourRequest"> <xs:complexType> <!-- определение полей запроса --> </xs:complexType> </xs:element> <xs:element name="yourResponse"> <xs:complexType> <!-- определение полей ответа --> </xs:complexType> </xs:element> </xs:schema>
5. Запустите ваше приложение и обратитесь к WSDL-схеме по адресу http://localhost:8080/ws/yourService.wsdl
. Вы должны увидеть сгенерированную WSDL-схему.
6. Для создания клиента на основе WSDL, вы можете использовать классы, сгенерированные с помощью утилиты wsimport.
Но иногда целесообразно использовать технологию Spring Web Services и для создания SOAP-клиента. В этом случае вы можете использовать классы WebServiceTemplate
и Jaxb2Marshaller
:
@Configuration public class SOAPClientConfig { @Bean public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) { WebServiceTemplate template = new WebServiceTemplate(); template.setDefaultUri("http://localhost:8080/ws/yourService"); template.setMarshaller(marshaller); template.setUnmarshaller(marshaller); return template; } @Bean public Jaxb2Marshaller marshaller() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); marshaller.setContextPath("package.with.generated.classes"); return marshaller; } }
Теперь у вас есть основа для работы с WSDL SOAP в Spring. Вы можете создавать SOAP-совместимые веб-сервисы и клиенты, опираясь на сгенерированную WSDL-схему.