您如何调试CXF端点发布?

时间:2011-11-08 16:08:26

标签: cxf apache-karaf apache-servicemix

鉴于" cxf-osgi"例如,来自fuse source的apache-servicemix-4.4.1-fuse-00-08,使用maven 3.0.3构建,当它部署到apache karaf 2.2.4和CXF 2.4.3时,Web服务从未发布,从不对CXF servlet可见(http:// localhost:8181 / cxf /)。 karaf日志中没有错误。如何调试这种行为?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

我发现如果我的beans.xml是在cxf bundle jar之前加载的,那么端点是用CXF注册的,而不是用OSGi http服务注册的。所以从日志中看起来一切都很好,但端点永远不可访问。这是竞争条件。

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

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