【问题标题】: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

    感谢您对此解决方案的任何反馈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-29
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2013-06-01
      • 2011-04-03
      相关资源
      最近更新 更多