Spring OSGi类路径资源问题

时间:2011-06-12 21:26:32

标签: osgi fuseesb jbossfuse

我正在尝试在osgi(fuse esb)中部署基于spring的bundle。在spring上下文中,我指的是db4o文件,它位于resources文件夹中。根据我的理解,maven项目将确保资源文件夹下的任何文件都可以在项目类路径中使用。我把文件保存在资源/ META-INF / spring / repo / test.db4o。

这是春天语境中的条目。


<bean id="objectContainer" class="org.springmodules.db4o.ObjectContainerFactoryBean">
    <property name="databaseFile" value="classpath:META-INF/spring/repo/test.db4o" />
</bean>

安装并尝试启动应用程序后,我遇到以下异常。


java.io.FileNotFoundException: OSGi resource[classpath:META-INF/spring/repo/test.db4o|bnd.id=258|bnd.sym=taxonomydaoimplbundle] cannot be resolved to absolute file path because it does not reside in the file system: bundle://258.0:1/META-INF/spring/repo/test.db4o

我尝试了不同的组合,但OSGi似乎没有识别出这个文件。任何指针都将受到赞赏。

-Thanks

1 个答案:

答案 0 :(得分:0)

我终于找到了问题。 ObjectContainerFactoryBean依靠OSGiResourceBundle将资源作为文件对象加载。虽然OSGiResourceBundle公开了一个名为getFile()的方法,但它在OSGi环境中无法正常工作。它总是需要一个文件协议,而作为URI返回的资源有一个协议“bundle”.Hence,抛出异常。解决方法是使用inputstream或getUrl。由于我没有ObjectContainerFactoryBean的源代码,我不得不扩展这个类来提供我自己的实现,它将文件作为输入流加载。