我想将CXF与Google Guice集成。我已经在我的项目中使用Guice了,我想避免添加额外的依赖项。
CXF是我的选择,因为其中一个要求是能够为服务的用户提供XML,JSON,JSONP和SOAP接口,而不需要重复的代码(现在我们有特定于SOAP的类,对于我们使用的XML) Struts和JSON我们编写了自己的解析器,我知道,我也觉得很脏。
无论如何, afaik ,CXF可以满足这个要求,所以我似乎被CXF困住了。
关于如何将Guice与CXF集成的任何想法,指示或建议?我想扩展CXFNonSpringJaxrsServlet
类并将Guice归入其中,但它看起来好像我会做其他人已经做过的事情。
答案 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框架......虽然这对我来说就像是一个“搞笑”失败的机会。