【发布时间】:2017-09-28 13:49:33
【问题描述】:
我正在尝试使用 osgi-jax-rs-connector、jersey 和 bndtools 让一个简单的 osgi rest 端点工作。
我将 publisher-5.3.1.jar 包和 jersey-all-2.22.2.jar 包(均由 osgi-jax-rs-connector 提供)打包到我自己的单独包中。我有另一个我自己的包,它使用注释提供其余端点。
我能够使用 bndrun 文件在 Apache Felix 中解析和运行它,并在 gogo shell 中验证我自己的 rest 端点已注册为 com.eclipsesource.jaxrs.publisher 使用的 osgi 服务。
应用启动时会记录:
org.glassfish.hk2.utilities.reflection.Logger warning
WARNING: Cannot find a default implementation of the HK2 ServiceLocatorGenerator
当我尝试从浏览器访问我的 api 时,我得到:
HTTP ERROR: 503
Problem accessing /services/my-service. Reason:
Jersey is not ready yet!
Powered by Jetty://
我的包装球衣/出版商 bnd.bnd 文件是:
Bundle-Version: 2.22.2.${tstamp}
javac.source: 1.8
javac.target: 1.8
-includeresource: OSGI-OPT/src=@libsrc/jersey-publisher.jar
-classpath: lib/jersey-all-2.22.2.jar, lib/publisher-5.3.1.jar
-sources: true
Export-Package: javax.ws.rs*;version=2.0,\
org.jvnet.hk2.annotations;version="1.0",\
org.jvnet.hk2.component;version="1.0",\
org.jvnet.hk2.external.generator;version="1.0",\
org.jvnet.hk2.external.runtime;version="1.0";uses:="org.jvnet.hk2.annotations",\
org.jvnet.hk2.internal;version="1.0";uses:="org.jvnet.hk2.external.runtime",\
org.jvnet.mimepull;version="1.0",\
org.jvnet.tiger_types;version="1.0"
-privatepackage: *
Import-Package: !jersey.repackaged.com.google.common.cache.LocalCache.jersey.repackaged.*,\
!jersey.repackaged.com.google.common.collect.AbstractMapBasedMultimap.jersey.repackaged.*,\
!jersey.repackaged.com.google.common.collect.AbstractMultimap.jersey.repackaged.*,\
!jersey.repackaged.com.google.common.collect.FilteredKeyMultimap.jersey.repackaged.*,\
!jersey.repackaged.com.google.common.collect.ImmutableMultimap.jersey.repackaged.*,\
!jersey.repackaged.com.google.common.collect.MapMakerInternalMap.jersey.repackaged.*\
*
我可以看到 org.jvnet.hk2.external.generator.ServiceLocatorGeneratorImpl 是一个实现 ServiceLocatorGenerator 接口的类,该接口包含在活动 jersey-all 捆绑 jar 文件以及我生成的包装它的包装捆绑 jar 中。
【问题讨论】:
标签: jersey osgi apache-felix bndtools