CXF和Google Guice使用JAX-RS + JAX-WS

时间:2011-06-07 09:26:08

标签: jax-ws cxf jax-rs guice

我想将CXF与Google Guice集成。我已经在我的项目中使用Guice了,我想避免添加额外的依赖项。

CXF是我的选择,因为其中一个要求是能够为服务的用户提供XML,JSON,JSONP和SOAP接口,而不需要重复的代码(现在我们有特定于SOAP的类,对于我们使用的XML) Struts和JSON我们编写了自己的解析器,我知道,我也觉得很脏。

无论如何, afaik ,CXF可以满足这个要求,所以我似乎被CXF困住了。

关于如何将Guice与CXF集成的任何想法,指示或建议?我想扩展CXFNonSpringJaxrsServlet类并将Guice归入其中,但它看起来好像我会做其他人已经做过的事情。

3 个答案:

答案 0 :(得分:4)

使用CXF 2.4.x,CXF不再使用Spring进行内部配置。因此,没有Spring你几乎可以做任何事情。

配置部件肯定是个问题。但是,所有弹簧配置都只是CXF API上的薄包装。因此,您可以通过API配置几乎所有内容。你可能只需要多挖一点。

作为一个例子,使用CXF 2.4,我们现在已经开始支持在OSGi中使用Blueprint而不是Spring。蓝图支持不需要任何Spring的东西,但是从它建模。

答案 1 :(得分:3)

这是我一直在使用的(cxf-2.5.0)。

@Singleton
public class WebServiceServlet extends CXFNonSpringServlet {
    private static final long serialVersionUID = 1L;
    private final SamaService samaService;

    @Inject
    public WebServiceServlet(SamaService samaService) {
        this.samaService = samaService;
    }

    @Override
    protected void loadBus(ServletConfig sc) {
        super.loadBus(sc);
        BusFactory.setDefaultBus(getBus());
        Endpoint.publish("/Data.asmx", samaService);
    }
}

答案 2 :(得分:1)

你遇到了问题。 CXF完全依赖于Spring,因为它由Spring内部配置并且使用Spring的设备相当广泛。因此,我认为尝试从Spring中获取CXF是不切实际的,因此您可以使用Guice;在 minimum ,您必须使用自定义Guice提供程序复制所有配置,但它仍然无法工作(部分CXF使用Spring的Web层)。

您可以尝试使用Spring的JavaConfig样式代替代码。那个大部分类似于Guice所做的各种事情(据我所知)。或者我想你可以尝试在同一个应用程序中使用两个独立的DI框架......虽然这对我来说就像是一个“搞笑”失败的机会。