Comment accéder à un fichier dans un bundle OSGi?
Je suis nouveau sur OSGi et créé un OSGi bundle qui, je suis à court d'Apache Felix OSGi-conteneur.
Il y a un fichier de ressources contenues dans le bundle, j'ai besoin de passer à une méthode comme une java.io.File
. Pour instancier un objet de Fichier, soit une URI dans le "fichier"-régime ou le chemin d'accès comme une chaîne de caractères est nécessaire. Comment puis-je récupérer l'un de ceux de manière propre?
J'ai essayé d'utiliser la
context.getBundle().getResource("/myfile")
(où le contexte est de type org.osgi.framework.BundleContext
) qui retourne l'URI bundle://6.0:0/myfile
.
Mais cette URI ne peut pas être converti en Fichier-exemple à l'aide de la File(URI uri)
constructeur car il a le "bundle"-régime.
On pourrait essayer de construire un chemin d'accès à l'emplacement de connaître le répertoire de travail et l'exploitation de l'élément bundleid de mon paquet, mais je doute que cela soit la meilleure pratique.
Des idées?
source d'informationauteur mtsz
Vous devez vous connecter pour publier un commentaire.
Puisque le fichier est à l'intérieur de votre bundle, il n'existe aucun moyen pour vous d'obtenir à l'aide d'un standard
File
. LeURL
vous obtenez à partir deBundle.getResource()
est la bonne manière d'obtenir ces ressources, depuis la OSGi Api sont destinés à travailler sur les systèmes sans réel du système de fichiers. Je serais toujours essayer de coller à l'OSGi API au lieu d'utiliser un cadre de solutions spécifiques.Donc, si vous avez le contrôle sur la méthode, je voudrais le mettre à jour afin de prendre un
URL
ou peut-être même unInputStream
(puisque vous avez probablement juste envie de lire). Pour plus de commodité, vous pouvez toujours fournir une méthode d'assistance que ne prendre unFile
.Si vous n'avez pas de contrôle sur la méthode, vous aurez à rédiger certains de la méthode d'assistance que prend la
URL
des flux dans un fichier (par exemple,Fichier.createTempFile()
fera sûrement l'affaire.Peut-être que l'API est confondus, mais Vous pouvez accéder à un fichier à l'intérieur d'un bundle OSGI comme ceci:
getResource
trouverez la ressource à travers l'ensemble du conteneur OSGI comme OSGI chargeur de classe de la théorie.getEntry
trouverez la ressource locale bundle. et l'url de retour pourrait se convertir à un fichier, mais inputStream.Ici est une question de même avec ceci: Pas d'accès à l'Bundle de Ressources/File (OSGi)
Espérons que cela vous aide.
Ce que j'utilise est getClassLoader().getResourceAsStream():
Cette façon, le fichier sera chargé à partir de votre ressource dir. Nom de fichier doit contenir le chemin d'accès après "src/main/resources".
Exemple complet ici: