2011-11-08 55 views
3

鉴于来自保险丝源的apache-servicemix-4.4.1-fuse-00-08的“cxf-osgi”示例,使用maven 3.0.3构建,当将其部署到apache karaf 2.2.4和CXF 2.4.3时,web服务从不发布,并且CXF servlet永远不可见(http:// localhost:8181/cxf /)。卡拉夫日志中没有错误。如何去调试这种行为?如何调试CXF端点发布?

+0

更新:使用Blueprint XML而不是Spring XML发布包可使CXF正常工作。我敢肯定,这不是一个127.0.0.0和0.0.0.0的问题。我将增加日志记录并升级到cxf 2.4.4 – chugadie

回答

3

这是值得关注的日志级别 - 您可以在etc/org.ops4j.pax.logging.cfg或在控制台log:set TRACE org.apache.cxf - IIRC永久性地执行此操作 - 这将显示一些有用的信息。

还要检查它是否在本地主机/ 127.0.0.1上发布 - 它可能会在另一个接口上发布,即本地网络的IP,但不是本地主机的IP。尝试使用0.0.0.0作为地址,这样它将绑定到所有可用的接口。

当您使用maven时,您可以下载CXF源代码(在Eclipse中很容易),并将远程调试器连接到Karaf实例,通过一些战略性布局的断点,您应该能够掌握正在发生的事情。

+0

不幸的是,我没有一个IDE来进行逐步调试,并且增加了日志记录没有提供任何有用的信息。 – chugadie

2

尝试更改为Equinox而不是Felix的默认值。 2.4.3中有一个错误,它与Felix不兼容。或者,CXF 2.4.4现在也可以修复它。

0

看看这个问题,我在本周提交:https://issues.apache.org/jira/browse/CXF-4058

我发现那是什么,如果我的beans.xml是CXF包JAR之前加载,那么端点与CXF注册,但不与OSGi http服务。所以从日志中看起来一切都很好,但终端永远不可访问。这是一个竞赛条件。

我做了两个解决方法:1)在短期内,稍后在引导顺序(我使用Karaf功能)中移动我自己的罐子,以便Spring和CXF在我的beans.xml被读取前完全加载并且2)放弃春推出这种方法基于松散的我自己绑定代码:http://eclipsesource.com/blogs/2012/01/23/an-osgi-jax-rs-connector-part-1-publishing-rest-services/

我刚刚实施的解决方案#2昨天我已经与它非常高兴。它解决了我所有的类加载器问题(之前我不得不手动添加大量的Import-Package行,因为BND没有看到beans.xml引用)并修复了我的引导竞争条件。