Estoy usando el conjunto de herramientas aQute Bnd para crear un paquete OSGi y he empaquetado con algunos archivos dependientes de 'recursos'. Esto incluye archivos * .css y * .xsd en un directorio de recursos que he creado.Cómo hacer referencia a un archivo incluido en el paquete OSGi al ejecutar java.io.File o FileInputStream
he incluido lo siguiente en el bundle.bnd archivo:
Include-Resource: resources/=resources/
y cuando lo haga la acumulación, la generada * .jar tiene las Css * * y archivos en el .xsd directorio de recursos en el directorio superior del archivo del paquete jar.
Sin embargo, en el código real Tengo dificultades al tratar de hacer referencia a esto como parte de mi trayectoria de la clase:
He intentado lo siguiente:
new File("resources/example.css");
También he intentado:
URL cssFile = this.getClass().getResource("resources/example.css");
try
{
file = new File(cssFile.toURI()));
}
catch(Exception e)
{
e.printStackTrace();
}
O bien obtengo un error NullPointException o no se puede encontrar un archivo Error IOException (dependiendo de cuál use). Recibo este error al ejecutar tanto en Eclipse Equinox en modo de configuración de depuración como en Apache Felix (que estamos utilizando para nuestra implementación). Tenga en cuenta que estoy tratando de hacer esto en clases de Java fuera del BundleActivator.
¿Necesito siempre referirme al contexto del BundleActivator, por ejemplo?
/*
* (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"));
}
creo que lo anterior va a funcionar, pero significará que tendrá que pasar la referencia cssFile alrededor de la cual no parece ser elegante.
¿Hay alguna manera de referirse a la ruta del directorio 'resources' que se incluye en el archivo jar del paquete en cualquier clase Java dada que es parte del paquete/archivo .jar? Si se trata de BundleContext, ¿hay alguna manera de hacer referencia a esto en cualquier clase de Java?
Cualquier ayuda será muy apreciada.
he tenido un vistazo a y Including additional resources with OSGi bundles pero parece que necesita el BundleContext.
que podría haber encontrado una posible solución a este: http://www.vogella.de/blog/tag/plugin/
Parece que Vogella tiene un código de ejemplo para esto:
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();
}
¿Alguien sabe si este camino es el mismo si no es un complemento y si estoy usando diferentes entornos OSGi, por ejemplo. Equinox Eclipse vs. Apache Felix? p. url = new URL("platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt");
¿Hay alguna forma de acceder a él fuera del contexto de la BundleActivator? Supongo que se refiere a hacer algo como esto: public void start (contexto BundleContext) { Paquete de paquetes = context.getBundle(); InputStream in = bundle.getEntry ("/ resource/example.css"). OpenStream(); }. Sin embargo, estoy buscando una solución (si la hay) para acceder a ella fuera del BundleActivator. He echado un vistazo a http://www.eclipsezone.com/eclipse/forums/t101557.html pero todavía estoy confundido – herbyme
¿Has visto una forma de obtener un objeto Bundle del ID del paquete? –
Puedo obtener la entrada, pero el problema es que getEntry() solo proporciona la ruta relativa, y no la ruta completa (raíz) del paquete: http://www.techinfopad.com/spring/101600333-getting-root -path-of-a-bundle.html. – herbyme