Pas d'accès à l'Bundle de Ressources/File (OSGi)
à l'instant, je suis l'élaboration d'un OSGi en fonction d'une WebApp avec ponton et Équinoxe (voir: http://wiki.eclipse.org/Jetty/Tutorial/EclipseRT-Jetty-Starter-Kit).
Tout ist amende jusqu'à présent, mais je ne pouvez pas obtenir l'accès à certains fichiers/ressources de mon bundle.
Le chemin est "configuration/data/config.csv" et "configuration/data/data.zip".
J'ai tout testé:
context.getBundleContext().getBundle().getEntry("config.csv");
context.getBundleContext().getBundle().getResource("config.csv");
this.getClass().getClassLoader().getResource("config.csv");
context.getBundleContext().getDataFile("config.csv");
Et bien sûr tous les chemins possibles variantes comme: "configuration/data/config.csv", "/configuration/data/config.csv", "\configuration/data/config.csv", "/config.csv".
En plus, j'ai ajouté les dossiers de l'OSGi classpath (dans le MANIFESTE.MF):
Bundle-ClassPath: .,
configuration/data/
L'URL ressemble toujours à quelque chose comme ceci (ou null): "configuration/CBR-Data/config.csv" et quand je transfert un Fichier objet "D:\configuration\CBR-Data\config.csv".
Mais ce que je ne comprends vraiment pas, c'est que le fichier de propriétés pour un de mes DS est chargé parfaitement:
<properties entry="configuration/dsconfig.properties"/>
Quelqu'un a une idée/astuce ou quelque chose d'autre? Je suis fou...
Vous avez raison, je suis désolé. La sortie de
URL configURL = context.getBundleContext().getBundle().getEntry("configuration/data/confid.csv");
est "bundleentry://6.fwk33311724/configuration/data/config.csv". J'essaie de transformer l'URL d'un Fichier via: File configFile = new File(configURL.getPath());
. Le chemin de sortie configFile.getAbsolutePath();
est que: "D:\configuration\data\config.csv"OriginalL'auteur Zitzit | 2011-06-05
Vous devez vous connecter pour publier un commentaire.
Vous êtes correctement la récupération de la ressource dans le bundle. Je vous suggère de vous familiariser avec la différence entre getEntry(), getResource() et getDataFile().
Parce que les méthodes vous renvoie Url correcte, cela signifie que les ressources sont correctement situé, et que le problème est dans la façon de les lire.
Les deux façons de les utiliser sont:
InputStream
de laURL
directement:URL
àFile
. Cette approche n'est pas recommandée, car elle fait l'hypothèse que le Bundle est déployé dans le répertoire (et non pas dans l'archive). Il est cependant utile si vous devez traiter avec les anciens des bibliothèques qui vous oblige à utiliserFile
objets. Pour convertir à un Fichier, vous ne pouvez pas utiliserURL.getPath()
méthode, parce que l'Équinoxe a son propre format de l'Url. Vous devez utiliserorg.eclipse.core.runtime.FileLocator
classe pour résoudre unFile
. LeFileLocator.getBundleFile(Bundle)
fait exactement ce que vous voulez.Je ne sais pas à propos de ces guides, je suis en se basant principalement sur la OSGi API javadoc (osgi.org/javadoc/r4v43), où il est thorougly expliqué de chaque méthode. Pourquoi voulez-vous pousser certains répertoires sous osgi-répertoire de configuration (qui je suppose est l'Équinoxe de configuration/ dossier)? Ce dossier est spécifique à l'Équinoxe, de sorte que son utilisation devrait être limitée, sinon vous devenez dépendant de l'Equinox.
OriginalL'auteur Danail Nachev
Résolu!!!
Grâce à Danail Nachev (voir le commentaire) qui m'a amené à le droit chemin! Après quelques recherches après "bundleentry://xyz" et "bundleresource://" j'ai trouvé cette liste de diffusion post: http://www.mail-archive.com/[email protected]/msg02410.html
Donc la réponse est la suivante (Usging (Équinoxe) FileLocator):
Mais (également demandé à cette liste de diffusion), il serait intéressant si il en existe d'autres solutionss qui ne sont pas seulement applicables pour l'Équinoxe?
stackoverflow.com/questions/4538898/... Voici un bon exemple de la façon de modifier votre question, de sorte qu'il est plus facile de trouver la solution.
Je me demandais pourquoi vous pensez que. blog.stackoverflow.com/2011/07/... explicitement dit que de répondre à votre question vous-même est la bonne chose à faire.
OriginalL'auteur Zitzit