我正在将某些应用程序从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

对此解决方案的任何反馈表示赞赏。

07-24 09:34