我正在致力于将一些应用程序从 Spring 迁移到 Spring Boot。某些应用程序在应用程序的根 url ( /
) 上提供 SOAP Web 服务,这对于 Spring 应用程序来说没问题。但在 Spring Boot 上,这会导致一些问题,因为设置 servlet 来监听 /
将覆盖默认的调度程序 servlet,导致执行器端点被覆盖。不过,我不想更改 wsdl 的 url,因为这将导致更新该服务的所有客户端。
有没有办法让 Spring Boot 在 /
上提供 JAX-WS/CXF Web 服务,而不覆盖默认的servlet?有没有办法让默认的 servlet 提供 Web 服务,而不需要额外的 CXFServlet
?
最佳答案
通过将 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
。
欢迎对此解决方案提供任何反馈。
关于java - Spring Boot + JAX-WS 无需额外的 servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58318757/