Spring Boot SOAP Web Services.Объединить @EnableWs и @WebService? - PullRequest
0 голосов
/ 16 ноября 2018

Я переносу приложение устаревших веб-служб (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, поскольку это также уже работает. Есть ли простой способ добиться этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...