【问题标题】:How do you debug CXF endpoint publishing?您如何调试 CXF 端点发布?
【发布时间】:2011-11-08 16:08:25
【问题描述】:

鉴于 fuse 源的 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/) 可见。 karaf 日志中没有错误。如何调试这种行为?

【问题讨论】:

  • 更新:使用 Blueprint XML 而不是 Spring XML 发布包可以使 CXF 正常工作。我很确定这不是 127.0.0.0 vs 0.0.0.0 的问题。我将增加日志记录并升级到 cxf 2.4.4

标签: cxf apache-karaf apache-servicemix


【解决方案1】:

值得调高日志级别 - 您可以在 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 实例,通过一些策略性放置的断点,您应该能够掌握正在发生的事情。

【讨论】:

  • 不幸的是,我没有 IDE 来进行逐步调试,并且更新日志并没有提供任何有用的信息。
【解决方案2】:

尝试更改为 Equinox 而不是默认的 Felix。 2.4.3 中有一个错误,它不能很好地与 Felix 一起使用。或者,现在可以使用 CXF 2.4.4 来修复它。

【讨论】:

    【解决方案3】:

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

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

    我做了两个解决方法:1)在短期内,只是在启动顺序的后面移动我自己的 jar(我使用 Karaf 功能),这样 Spring 和 CXF 在我的 beans.xml 被读取之前完全加载;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 引用)并修复了我的启动竞争条件。

    【讨论】:

      猜你喜欢
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      相关资源
      最近更新 更多