Osgi ApacheKaraf中JAXB的配置-无法解析javax.xml.namespace

Osgi ApacheKaraf中JAXB的配置-无法解析javax.xml.namespace,osgi,apache-karaf,Osgi,Apache Karaf,我正在尝试将一个简单的功能部署到品牌Karaf 4.0.2中,它带来了一个带有JAXB规范的捆绑包: mvn:org.apache.geronimo.specs/geronimo-jaxb_2.2_spec/1.0.1 它失败,并显示以下错误消息: 2015-12-22 13:38:07,218 | ERROR | a0a-abc5141ad81f | FeatureDeploymentListener | 43 - org.apache.karaf

我正在尝试将一个简单的功能部署到品牌Karaf 4.0.2中,它带来了一个带有JAXB规范的捆绑包:


mvn:org.apache.geronimo.specs/geronimo-jaxb_2.2_spec/1.0.1
它失败,并显示以下错误消息:

2015-12-22 13:38:07,218 | ERROR | a0a-abc5141ad81f | FeatureDeploymentListener        
             | 43 - org.apache.karaf.deployer.features - 4.0.2 | Unable to install features

org.osgi.service.resolver.ResolutionException: Unable to resolve root:
missing requirement [root] osgi.identity; osgi.identity=my-javaee-api; type=karaf.feature; version="[6.0.0.5,6.0.0.5]";
filter:="(&(osgi.identity=my-javaee-api)(type=karaf.feature)(version>=6.0.0.5)(version<=6.0.0.5))"
[
    caused by: Unable to resolve my-javaee-api/6.0.0.5:
    missing requirement [my-javaee-api/6.0.0.5] osgi.identity; osgi.identity=org.apache.geronimo.specs.geronimo-jaxb_2.2_spec;
    type=osgi.bundle; version="[1.0.1,1.0.1]"; resolution:=mandatory
    [
        caused by: Unable to resolve org.apache.geronimo.specs.geronimo-jaxb_2.2_spec/1.0.1:
        missing requirement [org.apache.geronimo.specs.geronimo-jaxb_2.2_spec/1.0.1] osgi.wiring.package;
        filter:="(&(osgi.wiring.package=javax.xml.namespace)(version>=1.0.0))"
    ]
]
瞧,这是问题的根源——版本。为了进行比较,我检查了它在库存卡拉夫上的外观:

它使用Felix,有一个合适的版本1.4.0。我的第一个想法是品牌karaf使用Equinox作为默认OSGi框架,将其切换到Felix将解决这一问题。但是,查看一下karaf/etc/config.properties内部,就可以证明这种想法是错误的(它看起来和股票一模一样):

现在我陷入了僵局,不知道如何解决我的问题。有什么想法吗


不幸的是,我现在无法联系那些给卡拉夫打上烙印的人,因为他们已经在过圣诞节了\_(ツ)_/“

来自OSGi框架的导出由配置属性
org.OSGi.Framework.system.packages
org.OSGi.Framework.system.packages.extra
控制。这些属性在运行时附加以形成系统包导出


似乎在你的“库存”版本的Karaf中(不确定这意味着什么,但我只使用你的术语)有人向其中一个配置属性添加了
javax.xml.namespace;version=1.4.0
。如果您能够在另一个版本的Karaf中执行相同的操作,那么一切都应该正常。

请确保您的自定义发行版不会更改
config.properties
。 如果确实如此,请确保org.osgi.framework.system.packages.extra 包含
javax.xml.namespace;version=1.4,

通常,如果要覆盖Karaf的某些属性,可以将这些更改放入
custom.properties

admin@root()>package:exports | grep javax.xml.namespace
javax.xml.namespace | 0.0.0      | 0  | org.eclipse.osgi
karaf@root()> package:exports | grep javax.xml.namespace
javax.xml.namespace | 0.0.0   | 0  | org.apache.felix.framework
javax.xml.namespace | 1.4.0   | 0  | org.apache.felix.framework
karaf.framework=felix
karaf.framework.equinox=mvn\:org.eclipse.birt.runtime/org.eclipse.osgi/3.10.2.v20150203-1939
karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/5.2.0