Osgi ServiceMix捆绑包状态为;主动的;即使捆绑部署失败

Osgi ServiceMix捆绑包状态为;主动的;即使捆绑部署失败,osgi,apache-karaf,osgi-bundle,apache-servicemix,Osgi,Apache Karaf,Osgi Bundle,Apache Servicemix,我有一个包(故意创建了一个测试CI设置的情况)没有正确配置所有依赖项。当我部署时,部署失败并出现异常,这应该是: 2014-02-07 09:17:15,738 | ERROR | rint Extender: 3 | BlueprintCamelContext | 103 - org.apache.camel.camel-blueprint - 2.10.7 | Error occurred during starting Camel: CamelContext(ura)

我有一个包(故意创建了一个测试CI设置的情况)没有正确配置所有依赖项。当我部署时,部署失败并出现异常,这应该是:

2014-02-07 09:17:15,738 | ERROR | rint Extender: 3 | BlueprintCamelContext            | 103 - org.apache.camel.camel-blueprint - 2.10.7 | Error occurred during starting Camel: CamelContext(ura) due "org.xmlsoap.schemas.soap.envelope" doesnt contain ObjectFactory.class or jaxb.index
javax.xml.bind.JAXBException: "org.xmlsoap.schemas.soap.envelope" doesnt contain ObjectFactory.class or jaxb.index
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:197)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601)[:1.7.0_11]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:143)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:310)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:412)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:375)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:279)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at org.apache.camel.dataformat.soap.SoapJaxbDataFormat.createContext(SoapJaxbDataFormat.java:303)[206:org.apache.camel.camel-soap:2.10.7]
    at org.apache.camel.converter.jaxb.JaxbDataFormat.doStart(JaxbDataFormat.java:254)[187:org.apache.camel.camel-jaxb:2.10.7]
    at org.apache.camel.dataformat.soap.SoapJaxbDataFormat.doStart(SoapJaxbDataFormat.java:101)[206:org.apache.camel.camel-soap:2.10.7]
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)[100:org.apache.camel.camel-core:2.10.7]
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62)
问题是捆绑状态仍然是“活动”。为什么?


我想将我的CI构建设置为它们使用检测失败的捆绑包。这个想法失败了,因为捆绑状态始终是“活动的”。

您需要确保所有依赖项都是必需的,并且版本正确。 在这种情况下,您导入的包可能存在于错误的版本中。 或者更好的做法是,您是否确保仅导入带有[2,3.0]的包的正确版本。尤其是堆栈跟踪使我怀疑您使用的导入没有版本范围,因此确实导入了JRE jaxb类,这些类通常具有版本0.0.0

要检查哪些捆绑包实际用于shell中的导入日志并执行捆绑包:header[bundleID]

该捆绑包处于活动状态,因为它已被激活。这是正常的。如果捆绑包中的某些代码出现错误,则与OSGi活动状态无关


因此,您需要找到某种方法来报告内部故障,以便CI构建能够检测到。我建议使用OSGi LogService。

我认为您误解了。问题不是部署失败,而是故意的。问题是ServiceMix认为捆绑包是“活动的”尽管部署失败且捆绑包未运行。如果OSGi框架说捆绑包处于活动状态,则所有依赖项都已解决。因此,您的导入包缺少版本范围,因此捆绑包的使用失败。
karaf@root> osgi:list 
START LEVEL 100 , List Threshold: 50
   ID   State         Blueprint      Spring    Level  Name
[ 242] [Active     ] [Created     ] [       ] [   80] integraatiot-foo (1.0.0.SNAPSHOT)