Como referenciar um arquivo incluído no pacote configurável OSGi ao executar java.io.File ou FileInputStream

Estou usando o conjunto de ferramentas aQute Bnd para criar um pacote OSGi e empacotado com alguns arquivos de 'recursos' dependentes. Isso inclui arquivos * .css e arquivos * .xsd em um diretório de recursos que eu criei.

Eu incluí o seguinte nobundle.bnd Arquivo:

Include-Resource: resources/=resources/ 

e quando eu construo, o arquivo * .jar gerado possui os arquivos * .css e * .xsd no diretório de recursos no diretório superior do arquivo de pacote configurável jar.

No entanto, no código real, estou tendo dificuldade em tentar me referir a isso como parte do meu caminho de classe:

Eu tentei o seguinte:

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

Eu também tentei:

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

Eu recebo um erro NullPointException ou um erro de IOException de arquivo não pode ser encontrado (dependendo de qual uso). Eu recebo esse erro ao executar no Eclipse Equinox no modo Debug Configuration e no Apache Felix (que estamos usando para nossa implementação). Observe que estou tentando fazer isso nas classes Java fora do BundleActivator.

Preciso sempre me referir ao contexto do BundleActivator, por exemplo?

 /*
 * (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")); 
 }

Eu acho que o acima funcionará, mas significa que terei que passar a referência cssFile em torno da qual não parece elegante.

Existe alguma maneira de se referir ao caminho do diretório 'resources' incluído no arquivo jar do pacote configurável em qualquer classe Java específica que faz parte do arquivo bundle / .jar? Se envolver o BundleContext, existe alguma maneira de fazer referência a isso em qualquer classe Java?

Qualquer ajuda será muito apreciada.

Eu dei uma olhada eIncluindo recursos adicionais com pacotes configuráveis OSGi mas parece que você precisa do BundleContext.

Eu poderia ter encontrado uma solução possível para isso:http://www.vogella.de/blog/tag/plugin/

Parece que Vogella tem algum código de exemplo para isso:

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();
}

Alguém sabe se esse caminho é o mesmo se não for um plug-in e se eu estiver usando ambientes OSGi diferentes, por exemplo. Equinócio Eclipse vs. Apache Felix? por exemplo.url = new URL("platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt");

questionAnswers(3)

yourAnswerToTheQuestion