JBoss 6 + Spring 3.0.5 + JAX-WS/CXF

Yur*_*ras 2 spring dependency-injection cxf jax-ws jboss6.x

我们已经使用Spring 3.0.5在JBoss 6上运行我们的项目.一切顺利,直到我们尝试使用JAX-WS实现一些Web服务.如果我尝试做一些简单的WS(比如添加2个数字),它就可以了 - 我将注释添加到注释类并添加注释类作为servlet.但是如果我试图让我的JAX-WS类填充依赖项,事情就变得越来越困难.

这是我的代码:

@WebService(name = "principal")
public class PrincipalWebService extends SpringBeanAutowiringSupport {

    @Autowired
    private PrincipalManager manager;

    @WebMethod
    public int add(int a, int b) {
        return a + b;
    }

    @WebMethod
    public Principal getById(int i) {
            return manager.getById(i);
    }

}
Run Code Online (Sandbox Code Playgroud)

添加方法有效,但getById因NPE而失败.我一直在调试SpringBeanAutowiringSupport,它看起来像ContextLoader.getCurrentWebApplicationContext()返回null.这意味着在初始化上下文之前调用SpringBeanAutowiringSupport构造函数.

我一直在尝试使用Spring运行应用程序的CXF说明.我现在没有这个代码,但是我已经将PrincipalWebService注册为bean,创建了spring文件来配置CXF并通过它的ID作为端点添加了这个bean.它在Jetty上表现不错,但在JBoss上失败了.我一直在接收不同类型的异常,具体取决于我如何配置CXF,但根本原因是相同的 - JBoss 6 CXF版本是针对Spring 2.5编译的,所以我们有库不一致.

有没有人有任何想法让IoC为JBoss 6上的Jax-ws服务工作?

Yur*_*ras 9

好的,我找到了一个解决方法.我们需要做的就是将依赖注入移动到@PostConstruct方法:

@PostConstruct
public void init() {
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
Run Code Online (Sandbox Code Playgroud)