osgi (bndtools) 中的 Restlet 包无法启动。激活程序错误 com/sun/net/httpserver/HttpHandler

Posted

技术标签:

【中文标题】osgi (bndtools) 中的 Restlet 包无法启动。激活程序错误 com/sun/net/httpserver/HttpHandler【英文标题】:Restlet bundle in osgi (bndtools) fails to start. Activator error com/sun/net/httpserver/HttpHandler 【发布时间】:2015-08-06 13:59:06 【问题描述】:

我正在迁移到 bndtools 一些我创建并在标准 Eclipse 环境中工作的 osgi 插件。我添加了 Felix Web 控制台Jetty HTTP 服务,并用 Felix 替换了一些 Equinox 捆绑包等价物。

当我运行一个需要 org.restlet.jar 的特定包时,该包会解析但不会激活。控制台输出为:

____________________________ 欢迎使用 Apache Felix Gogo

g! 2015-05-25 00:06:33.471:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT 2015-05-25 00:06:33.545:INFO:oejsh.ContextHandler:started o.e.j.s.ServletContextHandler/,null 2015-05-25 00:06:33.620:INFO:oejs.AbstractConnector:开始 选择ChannelConnector@0.0.0.0:8080 !无法启动捆绑包 org.restlet-2.3.2.v20150501-1520,异常激活器错误 com/sun/net/httpserver/HttpHandler 来自: org.restlet.engine.Engine:registerDefaultConnectors#839

我已经尝试过基于其他问题的解决方案,即 this one 建议设置运行属性 org.osgi.framework.system.packages.extra = com.sun.net.httpserver(大概在我的 bndtools .bnd 文件中),另一个建议激活 Restlet 使用框架侦听器的应用程序——但这些对我不起作用,并且控制台输出是相同的。

我仍在学习中,我将不胜感激任何有关解决方案的帮助,或 bndtoolsEclipse 可能提供的任何方法或功能的提示以帮助我追根溯源。

顺便说一句,Felix Web Console 正在工作,作为同一个插件的必需捆绑包。

这是我的 bndtools 配置:

Bundle-Version: 0.0.0.$tstamp
Service-Component:  \
    *
-runfw: org.apache.felix.framework;version='[4,5)'
-runee: JavaSE-1.7
-runsystemcapabilities: $native_capability

-resolve.effective: active;skip:="osgi.service"


-buildpath:  \
    osgi.core,\
    osgi.cmpn,\
    biz.aQute.bnd.annotation,\
    org.apache.felix.log,\
    com.fiscio.api;version=latest,\
    osgi.enterprise,\
    org.restlet,\
    org.restlet.ext.json,\
    org.json

-runbundles:  \
    com.fiscio.api;version=latest,\
    org.apache.felix.configadmin;version='[1.8.0,1.8.1)',\
    org.apache.felix.gogo.command;version='[0.14.0,0.14.1)',\
    org.apache.felix.gogo.runtime;version='[0.16.2,0.16.3)',\
    org.apache.felix.gogo.shell;version='[0.10.0,0.10.1)',\
    org.apache.felix.http.jetty;version='[2.2.2,2.2.3)',\
    org.apache.felix.log;version='[1.0.1,1.0.2)',\
    org.apache.felix.metatype;version='[1.0.10,1.0.11)',\
    org.apache.felix.scr;version='[1.8.2,1.8.3)',\
    org.apache.felix.webconsole;version='[4.2.2,4.2.3)',\
    org.json;version='[1.0.0,1.0.1)',\
    org.restlet;version='[2.3.2,2.3.3)',\
    org.restlet.ext.json;version='[2.3.2,2.3.3)',\
    osgi.cmpn;version='[5.0.0,5.0.1)',\
    osgi.enterprise;version='[4.2.0,4.2.1)'

-runrequires:  \
    osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)',\
    osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)',\
    osgi.identity;filter:='(osgi.identity=org.apache.felix.webconsole)',\
    osgi.identity;filter:='(osgi.identity=org.apache.felix.configadmin)',\
    osgi.identity;filter:='(osgi.identity=org.apache.felix.metatype)',\
    osgi.identity;filter:='(osgi.identity=org.apache.felix.log)',\
    osgi.identity;filter:='(&(osgi.identity=osgi.cmpn)(version>=4.2))',\
    osgi.identity;filter:='(&(osgi.identity=org.apache.felix.scr)(version>=1.6.0))',\
    osgi.identity;filter:='(osgi.identity=org.apache.felix.http.jetty)',\
    osgi.identity;filter:='(osgi.identity=com.fiscio.api)',\
    osgi.identity;filter:='(osgi.identity=org.json)',\
    osgi.identity;filter:='(osgi.identity=org.restlet.ext.json)',\
    osgi.identity;filter:='(osgi.identity=org.restlet)'

## Uncomment if you need to change the HTTP port
-runproperties: org.osgi.framework.system.packages.extra = com.sun.net.httpserver

Private-Package:  \
    com.fiscio.rest,\
    com.fiscio.rest.resources

【问题讨论】:

【参考方案1】:

事实证明,***.com 上针对此问题给出的其他答案(例如 this one)是正确的,除了设置 -runproperties: org.osgi.framework.system.packages.extra = com.sun.net.httpserverbndtools 启动配置中没有达到预期的结果。 bndtools FAQ 提出以下建议,解决了我的问题:

请注意,使用 -runsystempackages 指令等效于 设置 OSGi 属性 org.osgi.framework.system.packages.extra; 但是最好使用 -runsystempackages 因为然后运行 Bndtools 中的需求解析器将考虑 解决期间这些软件包的可用性。

【讨论】:

以上是关于osgi (bndtools) 中的 Restlet 包无法启动。激活程序错误 com/sun/net/httpserver/HttpHandler的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 bndtools 通过 Scala 创建 OSGi 包?

BndTools,如何添加非 OSGi JAR?

OSGi Felix 和 BndTools - 按名称加载类

BndTools,如何添加非 OSGi JAR?使用普通 JAR 会破坏整个项目。缺少要求接线包

Liferay7 BPM门户开发之38: OSGi Bndtools开发入门

bndtools教程