Spring Boot SOAP Web服务。结合@EnableWs和@WebService?

时间:2018-11-16 10:30:55

标签: java spring web-services spring-boot soap

我正在将旧版Web服务(SOAP)应用程序迁移到Spring Boot2.x。我使应用程序成功启动,加载了上下文,但是没有映射我的(现有)SOAP端点。

应用程序具有使用@WebService@WebMethod批注定义的许多不同的SOAP服务。映射当前是在sun-jaxws.xmlweb.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的{​​{1}}映射到此javax.jws.WebService?在Spring Boot上没有XML甚至有可能吗?

如果可能的话,我希望避免将所有SOAP服务重写为Spring Boot组件,因为这对于所有服务来说都是相当大的工作。

最后,我也想在这些SOAP服务上公开(生成的)WSDL,因为它也已经可以工作了。有一个简单的方法可以做到这一点吗?

0 个答案:

没有答案