【问题标题】:How to make Axis2 run in an OSGi environment?如何让 Axis2 在 OSGi 环境中运行?
【发布时间】:2011-05-13 15:39:38
【问题描述】:

我需要访问 OSGi 环境 (Equinox) 中的 Web 服务。我已经有了将 Web 服务用作独立应用程序的代码。

示例代码使用 Axis2 这似乎是一个问题,因为我需要将所有必需的库添加为单独的包。这不适用于 Axis2,因为项目提供的 jar 文件不是为 OSGi 准备的。

我尝试通过 BND “捆绑” JAR 文件,但最终捆绑不起作用,因为“包使用冲突错误:org.apache.axis2.addressing”

如何让 Axis2 支持 OSGi?

或者 - 在 Equinox(普通而不是 Eclipse)中访问(soap)Web 服务的简单且万无一失的变体是什么?我已经尝试过失败的 Apache CXF,因为它看起来试图在运行时生成代码,而 Axis2 也非常困难,正如我的帖子所示。

【问题讨论】:

  • 能否手动捆绑Axis2依赖并添加手写清单文件? org.apache.axis2.addressing 究竟与什么冲突?
  • 祝你好运——axis2 需要大约十个不同的 jar,并且有几十个包需要导出。欢迎来到 OSGi 捆绑地狱 :( 关于包使用冲突,我不知道它是什么原因。因为 OSGi 通常会遇到可能由不同原因引起的错误消息,OSGi 调试真的很痛苦。
  • 关于使用冲突看看thisthis博客条目(只是为了理解-很难解决!)。
  • 我知道这两篇文章——我的问题是,对于相关的包,Import-Package 部分有大约 60 行,其中声明了几十个包。此外,每 80 个字符的硬换行使阅读这样的清单变得非常困难。如果没有支持这项工作的工具,这几乎是不可能的。

标签: osgi axis2 equinox


【解决方案1】:

您应该考虑将 Axis2 库(和依赖项)嵌入到您的包中。在这种情况下,Axis2 不会被部署为自己的包 - 而是将类/jar 复制到您的包中。

如果您使用 maven 构建捆绑包,您应该查看 maven-bundle-pluginEmbedding dependencies 部分。


如果周围没有启用 OSGi 的 Axis2 库,我还建议仔细查看(我不使用它,所以我不知道它,但在 org.apache.axis2.osgi 中快速搜索结果)。

【讨论】:

  • maven-bundle-plugin 使用内部 BND,我直接尝试从 jar 文件生成包 - 它没有像我在问题中写的那样工作。
  • @Robert 我并不是要将每个 jar 包到一个 OSGi 包中,而是将所有 Axis2 jar(和依赖项)嵌入到您的包中(或至少)到单个 Axis2-all 包中。关于Ìmport-Package 声明,请尝试使用resolution:=optional,这将让捆绑包安装并解析正在使用的包(所以如果运气好的话,您将不需要无法解析的包)。尽管如此,这些都是肮脏的建议,如果不从头开始支持,将很难完成。我设法用不太复杂的库走这条路。
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2013-06-28
  • 2014-11-06
  • 2012-10-16
  • 1970-01-01
相关资源
最近更新 更多