Java-config对应的wss:binding?

时间:2016-04-18 15:43:56

标签: java spring jax-ws

好的,所以我在谷歌搜索了几个小时并没有成功......最后我只能希望一些Spring-magician读取并回答这个问题。 :)

我将旧的Web应用程序(基于Spring 2.x)升级到Spring 4.2.x,在添加新功能时,我决定完全摆脱基于XML的配置。 (再说一遍:我不想在项目中拥有任何Spring XML文件!)

我已经转换了很多东西,但我无法解决的最后一件事就是找到正确的Java-config对应物:

<ws:service id="MySoapService" bean="#ServiceImpl" />
<wss:binding service="#MySoapService" url="/1.0/soap" />

ws / wss名称空间来自:

xmlns:ws="http://jax-ws.dev.java.net/spring/core"
xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"

所以我试图做的是导出@WebService带注释的类,但使用Java-config而不是XML。

其他信息:

  • 我尝试过使用SimpleJaxWsServiceExporter,但是那个留下了一个&#34; java.net.BindException:地址已经在使用:bind&#34;,无论端口是什么我正在使用......

  • 该应用程序有两个servlet:一个是用于新REST API的普通Spring MVC Dispatcher,另一个是应该使上述JAX-WS服务可用的com.sun.xml.ws.transport.http.servlet.WSSpringServlet

  • 我试图用纯JAX-WS RI,没有CXF或任何其他库来解决问题。应用程序已经足够庞大...... :(

2 个答案:

答案 0 :(得分:1)

显然没有解决方案(但是?) - 经过几个小时的谷歌搜索后,我发现只有这张票:

https://java.net/jira/browse/JAX_WS_COMMONS-134

看看它的日期和状态(并注意到开发人员甚至没有回应它,甚至一年过去了),我认为JAX-WS Commons春天是安全的在可预见的未来,集成将不支持Java配置。

答案 1 :(得分:1)

您可以通过注入端点和以下帮助器方法来实现此目的(请注意,我的方法为每个端点使用基类BaseEndpoint):

@Configuration
public WebserviceConfiguration {

    @Inject
    private FooEndpoint fooEndpoint;

    @Bean    
    public SpringBinding fooEndpoint() throws Exception {
        return bind(fooEndpoint, "ws/bar");
    }

    private SpringBinding bind(BaseEndpoint endpoint, String url) throws Exception {
        SpringService springService = new SpringService();
        springService.setBean(endpoint);
        SpringBinding binding = new SpringBinding();
        binding.setService(springService.getObject());
        binding.setUrl(url);
        return binding;
    }

}