Проблема с ресурсом classPath в Spring OSGi - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь развернуть комплект на основе Spring в osgi (fuse esb). В контексте Spring я имею в виду файл db4o, который находится внутри папки ресурсов. Насколько я понимаю, проект maven будет гарантировать, что любой файл, доступный в папке ресурсов, будет доступен в classpath проекта. Я сохранил файл в ресурсах / 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, похоже, не распознает этот файл. Любой указатель будет оценен.

-Спасибо

1 Ответ

0 голосов
/ 17 июня 2011

Я наконец нашел проблему. ObjectContainerFactoryBean использует OSGiResourceBundle для загрузки ресурса в виде файлового объекта. Хотя OSGiResourceBundle предоставляет метод getFile (), он не работает должным образом в среде OSGi. Он всегда ожидает файловый протокол, в то время как ресурс, возвращаемый как URI, имеет «пакет» протокола. Таким образом, создается исключение. Обходной путь должен использовать inputtream или getUrl. Поскольку у меня не было исходного кода ObjectContainerFactoryBean, мне пришлось расширить этот класс, чтобы обеспечить собственную реализацию, которая загружает файл в качестве входного потока.

...