java - Spring Boot + JAX-WS 无需额外的 servlet?

标签 java spring-boot cxf jax-ws

我正在致力于将一些应用程序从 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/

相关文章:

java - JAXB,CXF : There's no ObjectFactory with an @XmlElementDecl for the element . ..与

java - 如何在java代码中获取guvnor规则的输出结果

java - 使用resteasy/jax-rs从请求有效负载接收两种类型的数据

java - 在 JAXB 中自动添加根元素

java - 抛出操作数的子句中的 Spring JPA 应包含 1 列

带有 tomcat 和 cxf-servlet 的 spring-boot

java - Apache Camel HTTP 超时

JavaFX 应用程序更新无需管理员权限

java - 浏览器无法在 gmail api 中打开

spring-boot - 微服务和去中心化应用程序有什么区别