java - OSGI 无法使用 javax.ws.rs 启动 bundle 'missing requirement'

标签 java rest osgi bnd bndtools

我一直在尝试制作 OSGI REST bundle 。我将其简化为一个人为的最小化示例,其中包含单个捆绑工作区和使用一些注释的单个类。当我通过 Eclipse 运行该包时,在解析 javax.ws.rs 包时出现错误。我已将 javax.ws.rs-api 2.0.1 添加到 cnf 项目,并将 javax.ws.rs-api-2.0.1.jar 添加到我的包的构建路径中。

当我运行该 bundle 时,出现以下错误:

! could not resolve the bundles: [myprovider-1.0.0.201704280130 org.osgi.framework.BundleException: Unable to resolve myprovider [1](R 1.0): missing requirement [myprovider [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=javax.ws.rs)(version>=2.0.0)(!(version>=3.0.0))) Unresolved requirements: [[myprovider [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=javax.ws.rs)(version>=2.0.0)(!(version>=3.0.0)))] ] ! Failed to start bundle myprovider-1.0.0.201704280130, exception Unable to resolve myprovider [1](R 1.0): missing requirement [myprovider [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=javax.ws.rs)(version>=2.0.0)(!(version>=3.0.0))) Unresolved requirements: [[myprovider [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=javax.ws.rs)(version>=2.0.0)(!(version>=3.0.0)))]

我的包的 bnd.bnd 是:

-buildpath: \
    javax.ws.rs-api;version=2.0,\
    osgi.cmpn,\
    osgi.core
-runrequires: \
osgi.identity; filter:='(osgi.identity=org.apache.felix.gogo.command)',\
osgi.identity; filter:='(osgi.identity=org.apache.felix.gogo.runtime)',\
osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)'
-runfw: org.apache.felix.framework;version='[5.4.0,5.4.0]'
-runee: JavaSE-1.8
Export-Package: myprovider

我最初想做的与这个问题几乎相同:

Error implementing a OSGI REST: `OSGi bundle not started : missing requirement`

但是,该问题的解决方案已经存在于我的 bnd 文件中。

最佳答案

您应该将 bnd.bnd 文件拆分为两个文件。

  1. bnd.bnd 定义构建单个 bundle 的规则。因此构建路径以及像导入包这样的调整设置都属于那里。

  2. app.bndrun 或类似的。您至少需要在那里定义一个索引和 runrequires 。 runrequires 应包含您的用户包。

为了使您的 bundle 至少能够解析,您还需要将 jaxrs api bundle 添加到索引中。但这还不够。您还需要一个 jaxrs 实现,并且还需要发布您的休息服务。有一些方法可以实现这一目标。其中一个是CXF-DOSGi .

有一个REST example使用 bnd 构建 bundle 。

还有an index和一个bndrun file 。 bndrun 还包括其余示例,即使它位于肥皂示例中。

关于java - OSGI 无法使用 javax.ws.rs 启动 bundle 'missing requirement',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43670929/

相关文章:

osgi - 从 OSGi 包获取资源

java - 如何让 OSGi ScriptEngineManager 运行

eclipse - Eclipse 3.5可以发现插件目录中的所有包吗?

java - 如何将其转换为方法/类以便可以重用?

java - 存储来自 System.out.print(output) 的数据

rest - RESTful API 上搜索资源的缓存控制策略

javascript - 如何将 FB javascript API 与我的后端集成?

Java:Web 应用程序中的 hibernate - 无法实例化默认 tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]

java - Java 中的双端队列

java - 如何强制Spring Security更新XSRF-TOKEN cookie?