OSGI未能启动捆绑包缺失要求'使用javax.ws.rs

时间:2017-04-28 02:21:26

标签: java rest osgi bnd bndtools

我一直试图制作OSGI REST套装。我把它编成了一个人为的最小化示例,其中包含一个使用一些注释的单个类工作区。当我通过Eclipse运行bundle时,我得到了解析javax.ws.rs包的错误。我已将javax.ws.rs-api 2.0.1添加到cnf项目中,并将javax.ws.rs-api-2.0.1.jar添加到我的bundle的构建路径中。

当我运行捆绑包时,我收到以下错误:

  

!无法解析捆绑包:[myprovider-1.0.0.201704280130 org.osgi.framework.BundleException:无法解析myprovider [1](R 1.0):缺少需求[myprovider [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package = javax.ws.rs)(版本> = 2.0.0)(!(版本> = 3.0.0)))未解决的要求:[[myprovider [1](R 1.0)] osgi.wiring.package; (及(osgi.wiring.package = javax.ws.rs)(版本> = 2.0.0)((版本>!= 3.0.0)))]   ]   !无法启动捆绑myprovider-1.0.0.201704280130,异常无法解析myprovider [1](R 1.0):缺少需求[myprovider [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package = javax.ws.rs)(版本> = 2.0.0)(!(版本> = 3.0.0)))未解决的要求:[[myprovider [1](R 1.0)] osgi.wiring.package; (及(osgi.wiring.package = javax.ws.rs)(版本> = 2.0.0)((版本>!= 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文件中解决了该问题。

1 个答案:

答案 0 :(得分:0)

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

  1. bnd.bnd定义构建单个包的规则。所以buildpath以及像Import-Packages这样的调整设置都属于那里。

  2. app.bndrun或类似的。您至少需要在那里定义索引和运行需求。运行需求应包括您的用户包。

  3. 要使您的软件包至少解决,您还需要在索引中添加jaxrs api软件包。但这还不够。您还需要一个jaxrs实现,您还需要发布您的休息服务。有一些方法可以实现这一目标。其中一次是CXF-DOSGi

    使用bnd构建捆绑包有REST example

    还有an indexbndrun file。 bndrun还包括其余示例,即使它是在soap示例中。