我正在尝试使用OSGI-JAX-RS-Connector,Jersey和Bndtools获得一个简单的OSGI REST端点。
我将Publisher-5.3.1.Jar Bundle和Jersey-all-2.22.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.1. bundles(由OSGI-JAX-RS-Connector提供(。我有另一个自己的捆绑包,可以使用注释提供休息端点。
我能够使用BNDRUN文件在Apache Felix中解决并运行它,并在Gogo Shell中验证我自己的REST端点被注册为Com.eclipsesource.jaxrs.jaxrs.publisher。
当应用启动时,它会登录:
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接口,其中包含在Active Jersey-All Bundle Jar file中,以及我的生成的包装捆绑的bundle jar以包装它。
hk2 servicelocatorGenerator错误是指以下事实:Jersey-All JAR包含与类Java.util.serviceloader.serviceloader.serviceloader.serviceloader Simple Service相关的几个提供商 - 封装文件(请参阅HTTPS:HTTPS:HTTPS:https::https:://docs.oracle.com/javase/8/docs/api/java/util/serviceloader.html(。
这些服务最初存在于hk2-locator jar文件中,这是泽西依的依赖。
这是通过让我的包装捆绑包在泽西 - all.jar中的meta-inf/services/org.glass.hk2.hk2.hk2.hk2.hk2.hk2.hk2.servicelocatorgenerator中固定的。完成这项工作的BND声明是
-includeresource: @lib/jersey-all-2.22.2.jar!/META-INF/services/org.glassfish.hk2.extension.ServiceLocatorGenerator
这完全解决了问题,并使我的休息端点成功工作。
有趣的是,当我让BND声明其他元I-Inf/services/*文件包含在生成的捆绑包中时,结果是更多错误,但只需将其限制到ServiceLocatorGenerator中。
<</p> <。/div>