在Oracle 12c上部署OSGi bundle会引发NPE

时间:2016-04-20 01:24:20

标签: osgi weblogic12c apache-felix

在Weblogic 12.2.1上,我尝试使用管理控制台将一个简单的OSGi Bundle部署为war文件,但会向NPE注入以下日志。

Caused by: java.lang.NullPointerException:

        at org.apache.felix.framework.cache.JarRevision.getMainAttributes(JarRevision.java:210)

        at org.apache.felix.framework.cache.JarRevision.getManifestHeader(JarRevision.java:104)

        at org.apache.felix.framework.BundleImpl.createRevision(BundleImpl.java:1235)

        at org.apache.felix.framework.BundleImpl.<init>(BundleImpl.java:112)

        at org.apache.felix.framework.Felix.installBundle(Felix.java:2905)

        at org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:165)

作为先决条件,我基于Apache Felix创建了OSGi Framework(Services-&gt; OSGi Frameworks)。 My Bundle是一个API项目,包含很少的接口,我将其包装在WAR文件中。战争文件的结构如下:

myapi-project.war
   - META-INF
   - WEB-INF
          - classes
          - lib
          - osgi-lib
               - api-project.jar
          - weblogic.xml

Weblogic.xml内容为:

   <wls:osgi-framework-reference>
   <wls:name>CPS-OSGi</wls:name>
   <wls:application-bundle-version>1.0</wls:application-bundle-version>
   <wls:application-bundle-symbolic-name>cpsservices.approval</wls:application-    bundle-symbolic-name>
   <wls:bundles-directory>osgi-lib</wls:bundles-directory>

API项目MENIFEST.MF内容:

  Manifest-Version: 1.0
  Implementation-Vendor: BAML
  Implementation-Title: CPS API 
  Implementation-Version: 1.0.0
  Bundle-ManifestVersion: 2
  Bundle-SymbolicName: cpsservices.api
  Bundle-Name: cpsservices api bundle 
  Bundle-Vendor: BAML
  Bundle-Version: 1.0.0
  Export-Package: com.bofa.cp.core, com.bofa.cp.services
  Bundle-Activator: com.bofa.cp.core.Activator

我尝试过添加其他MENIFEST属性,但这并没有解决问题。最近2天我被困在这一点上。任何帮助表示赞赏。 感谢。

更新:以下是appg服务器Oracle 12.2.1附带的org.apache.felix.org.apache.felix.main.jar v4.4中JarRevision类的屏幕截图 - enter image description here

由于某些原因,这个Felix无法读取MENIFEST.MF文件的可能原因。为了证实这一点,我更改了文件中的Bundle Symbolic名称,但这并没有改变异常。 猜我很接近......

1 个答案:

答案 0 :(得分:0)

解决了这个问题。猜猜 - 在MANIFEST.MF文件名中输入错误(创建文件名为mEnifest.mf)。我需要休息一下:))