Я переносу приложение устаревших веб-служб (SOAP) в Spring Boot 2.x. Я получаю приложение для успешного запуска, загружаю контекст, но ни одна из моих (существующих) конечных точек SOAP не отображается.
Приложение имеет множество различных служб SOAP, определенных с помощью аннотаций @WebService
и @WebMethod
. В настоящее время отображение определено в sun-jaxws.xml
и web.xml
, но в Spring Boot я бы хотел обходиться без какого-либо XML и использовать только Java и аннотации .
В качестве примера рассмотрим следующее IndexingService
в его текущей унаследованной реализации:
sun-jaxws.xml
:
<endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
<endpoint implementation="com.myapp.soap.IndexingService" name="indexingService" url-pattern="/soap/indexing"/>
...
</endpoints>
web.xml
<!-- jax-ws web service servlet context listener -->
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<!-- jax-ws web services servlet -->
<servlet>
<servlet-name>myWSServlet</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myWSServlet</servlet-name>
<url-pattern>/soap/indexing</url-pattern>
</servlet-mapping>
IndexingService.java
:
@WebService
public class IndexingService {
@WebMethod(operationName = "add")
public void add(@WebParam(name = "document") String document) {
...
}
}
Я включил spring-boot-starter-web-services
стартер и создал WsConfigurerAdapter
реализацию:
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext context) {
MessageDispatcherServlet messageDispatcherServlet = new MessageDispatcherServlet();
messageDispatcherServlet.setApplicationContext(context);
messageDispatcherServlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean<>(messageDispatcherServlet, "/soap/*");
}
}
Однако после этого я застрял. Как мне сопоставить IndexingService
, отмеченный javax.jws.WebService
, с этим messageDispatcherServlet
? Возможно ли это даже без XML в Spring Boot?
Я бы не хотел переписывать все службы SOAP на компоненты Spring Boot, если это возможно, поскольку это будет значительным объемом работы для всех служб.
Наконец, я также хотел бы представить (сгенерированный) WSDL для этих сервисов SOAP, поскольку это также уже работает. Есть ли простой способ добиться этого?