【问题标题】:Spring Boot + JAX-WS without an extra servlet?Spring Boot + JAX-WS 没有额外的 servlet?
【发布时间】:2019-10-10 08:39:18
【问题描述】:
我正在将一些应用程序从 Spring 迁移到 Spring Boot。一些应用程序在应用程序的根 url (/) 上提供 SOAP Web 服务,这对于 Spring 应用程序来说很好。但是在 Spring Boot 上,这会导致一些问题,因为设置一个 servlet 来监听 / 会覆盖默认的 dispatcher-servlet,例如导致执行器端点被覆盖。不过,我不想将 url 更改为我的 wsdl,因为这将导致更新服务的所有客户端。
有没有办法让 Spring Boot 在/ 上提供 JAX-WS/CXF Web 服务,而不覆盖默认的 servlet?有没有办法让默认 servlet 提供 Web 服务,而不需要额外的 CXFServlet?
【问题讨论】:
标签:
java
spring-boot
cxf
jax-ws
【解决方案1】:
通过将CXFServlet 公开为过滤器而不是 servlet,至少可以访问 wsdl:
@Bean
public Endpoint endpoint(final SpringBus springBus, final MyServiceImpl myService) {
final EndpointImpl endpoint = new EndpointImpl(springBus, myService);
endpoint.publish("/MyService");
return endpoint;
}
@Bean
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public FilterRegistrationBean<CXFServlet> cxfServletFilter(final SpringBus springBus) {
final CXFServlet cxfServlet = new CXFServlet();
cxfServlet.setBus(springBus);
final FilterRegistrationBean<CXFServlet> filterRegistrationBean = new FilterRegistrationBean<>(cxfServlet);
filterRegistrationBean.setOrder(2);
return filterRegistrationBean;
}
我还从我的 pom.xml 中删除了 cxf-spring-boot-starter-jaxws。
感谢您对此解决方案的任何反馈。