Весенняя проблема ресурса Osgi ClassPath
Вопрос
Я пытаюсь развернуть пружинный пакет в OSGI (Fuse ESB). На мой взгляд, проект Maven позаботится о том, чтобы любой файл, доступный в папке ресурсов, будет доступен в Project 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
Я пробовал разные комбинации, но Осги, похоже, не распознает этот файл. Любой указатель будет оценен.
-Спасибо
Решение
Я нашел эту проблему наконец. ObjectContainerFactoryBean полагается на OsgiresourceBundle для загрузки ресурса в качестве объекта файла. Хотя osgiresourcebundle обнаруживает метод, называемый getFile (), он не работает так, как задумано в среде OSGI. Он всегда ожидает протокола файла, тогда как ресурс, возвращаемый в виде URI, имеет протокол «пакет». Отсутствует исключение. Обходной путь - это использовать входные или geturl. Поскольку у меня не было исходного кода ObjectContainerFactoryBean, мне пришлось расширить этот класс, чтобы предоставить мою собственную реализацию, которая загружает файл в качестве входного потока.