Как ссылаться на включенный файл в комплекте OSGi при выполнении java.io.File или FileInputStream

Я использую набор инструментов aQute Bnd для создания OSGi-пакета и упаковал его с некоторыми зависимыми файлами ресурсов. Это включает в себя файлы * .css и * .xsd в каталоге ресурсов, который я создал.

Я включил следующее вbundle.bnd файл:

Include-Resource: resources/=resources/ 

и когда я делаю сборку, сгенерированный файл * .jar содержит файлы * .css и * .xsd в каталоге ресурсов в верхнем каталоге файла комплекта jar.

Тем не менее, в реальном коде я испытываю трудности при попытке сослаться на это как часть моего пути к классу:

Я пробовал следующее:

new File("resources/example.css");

Я также попробовал:

URL cssFile = this.getClass().getResource("resources/example.css");
try
{
   file = new File(cssFile.toURI()));
}
catch(Exception e)
{
   e.printStackTrace();  
}

Я либо получаю ошибку NullPointException, либо файл не может быть найден IOException error (в зависимости от того, какой из них я использую). Я получаю эту ошибку при работе как в Eclipse Equinox в режиме отладочной конфигурации, так и в Apache Felix (который мы используем для нашего развертывания). Обратите внимание, я пытаюсь сделать это в классах Java за пределами BundleActivator.

Нужно ли мне всегда ссылаться на контекст BundleActivator, например?

 /*
 * (non-Javadoc)
 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
 */
 @Override
 public void start(BundleContext context) throws Exception 
 {   
     /* Service to host the Bundle interface. */
     ServletContainerService service = new ServletContainerService();
     service.addServlet(new ServletContainer(new AxisServlet(), true));
     this.serverReg = context.registerService(ServletContainerService.class.getName(), service, null);

     cssFile = new File(context.getClass.getResource("resource/example.css")); 
 }

Я думаю, что вышеупомянутое сработает, но будет означать, что мне придется передать ссылку на cssFile, которая не выглядит элегантной.

Есть ли способ сослаться на путь к каталогу 'resources', который включен в jar-файл комплекта в любом данном Java-классе, который является частью файла bundle / .jar? Если это включает BundleContext, есть ли способ ссылаться на это в любом классе Java?

Любая помощь будет высоко ценится.

Я посмотрел иВключая дополнительные ресурсы с комплектами OSGi но похоже, что вам нужен BundleContext.

Я мог бы найти возможное решение этого:http://www.vogella.de/blog/tag/plugin/

Похоже, у Vogella есть пример кода для этого:

URL url;
try {
        url = new URL("platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt");
    InputStream inputStream = url.openConnection().getInputStream();
    BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
    String inputLine;

    while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
    }

    in.close();

} catch (IOException e) {
    e.printStackTrace();
}

Кто-нибудь знает, является ли этот путь тем же, если это не плагин и если я использую различные среды OSGi, например. Равноденствие Затмение против Апача Феликса? напримерurl = new URL("platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt");

Ответы на вопрос(3)

Ваш ответ на вопрос