我正在将某些应用程序从Spring迁移到Spring Boot。某些应用程序在应用程序的根URL(/
)上提供SOAP Web服务,这对于Spring应用程序来说很好。但是在Spring Boot上,这会引起一些问题,因为设置servlet以监听/
会覆盖默认的dispatcher-servlet,例如,导致执行器端点被覆盖。尽管如此,我还是不想将URL更改为wsdl,因为这将导致更新服务的所有客户端。
有没有办法让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
。对此解决方案的任何反馈表示赞赏。