【问题标题】:OSGi SOAP web service clientOSGi SOAP Web 服务客户端
【发布时间】:2011-10-11 09:05:36
【问题描述】:

我正在尝试让一个从 OSGi 工作的 Web 服务客户端,我使用 Felix 作为我的容器。

到目前为止,我已经尝试过使用 Apache CXF。这不适用于我的 Web 服务,因为它是 RPC/编码的,并且在我尝试生成存根时不受支持。我使用 apache Axis 来生成我的存根,现在我在我的包中遇到了与依赖项有关的问题。当我的包被部署时,我得到了 apache 包的依赖项。

我在构建中使用了 maven,并使用了具有 bundleall 目标的 maven-bundle-plugin 来获取依赖包,但仍然遇到包依赖项的问题。我真的很想使用 osgi,因为通过 bundles 的可插拔特性正是我所需要的,但是我花了很多时间来追踪 bundle 依赖项。

有没有使用 OSGi 的 SOAP Web 服务的明确示例,包括如何解决依赖关系?

【问题讨论】:

    标签: java web-services soap osgi apache-karaf


    【解决方案1】:

    maven-bundle-plugin 的 bundleall 目标将为您的所有依赖项生成捆绑包。但是,它不会显示为解决依赖项而必须安装它们的顺序。一个在处理依赖关系方面做得很好的 OSGi 实现是Virgo Web Server from the Eclipse Foundation。使用 Virgo,您可以简单地将 bundleall 目标生成的所有包直接复制到 repository/usr 文件夹中,将您的服务放入pickup文件夹中,运行时将为您处理依赖项解析。我过去曾成功地使用过这个过程。

    在相关说明中,除非您有一些不常见的依赖项,否则您应该考虑从 SrpingSource Enterprise Bundle Repository 添加依赖项。

    【讨论】:

      【解决方案2】:

      为了让您的生活更轻松,您可能想尝试使用 fuse esb (apache servicemix) 或 karaf。 Felix 是一个最小的 OSGi 容器,而 Karaf 是 Felix,已经部署了许多最重要的包。 Fuse(也称为 servicemix)是具有更多捆绑包的 karaf。 Fuse 自带 cxf,所以你不必乱用它。

      如果您真的更喜欢使用 felix,请发布您的 maven bundle 插件配置以及在 felix 中运行的 bundle 列表。我在 Felix/Karaf 中使用 CXF 服务 JAX-RS Web 服务已经有一段时间了,它是一个非常强大的解决方案。

      【讨论】:

      • 感谢您提供的信息,我尝试了很多事情并记得我实际上必须使用轴来生成我的存根,因为我使用的 wsdls 是 RPC/编码的。所以我遇到了解决围绕 apache 的捆绑包的问题。我正在尝试解决的当前捆绑包是包 org.apache.axiom.om
      • 好的,我已经搬到了 karaf,一切都变得更好了。我实际上可以安装我的捆绑包。但是,当我实际尝试在我的捆绑激活器中调用 web 服务调用进行测试时,我得到 noClassDefFoundError。下面是堆栈跟踪,但是有没有办法查看类路径是如何为包加载的?或者追踪这个问题的最佳方法是什么?我在捆绑包中提供了该类,但是它没有正确加载。
      • Stacktrace java.lang.NoClassDefFoundError: javax/xml/stream/util/StreamReaderDelegate at java.lang.ClassLoader.defineClass1(Native Method) 原因:java.lang.ClassNotFoundException: javax.xml.stream org.apache.ws.commons.axiom.axiom-api [138] 在 org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787) 找不到 .util.StreamReaderDelegate
      • 在 Karaf 控制台中,您可以使用命令headers <bundle ID> 来查看清单中说明包应该导入的内容,如果 OSGi 找不到该包,它会显示为红色。您如何生成要导入的包列表?您是在 maven-bundle-plugin 中手动指定它还是让 BND 处理它?通常 NoClassDef 问题是因为您(或 BND)没有在清单中指定类。 headers 命令应该让您了解正在发生的事情。
      • 我检查了我的包的头文件和抛出错误的 axiom-api 包。他们俩都表明他们正在解决所有依赖关系。并且安装了一个具有依赖关系的捆绑包,但在类路径中似乎存在一些错误,具有分辨率。关于如何追踪此问题的任何其他想法?
      猜你喜欢
      • 1970-01-01
      • 2010-12-23
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2016-02-19
      相关资源
      最近更新 更多