Frage

Ich versuche, ein federbasiertes Bundle in OSGI (Fuse ESB) bereitzustellen. In einem Spring -Kontext beziehe ich mich auf eine DB4O -Datei, die sich im Ordner mit dem Ressourcen befindet. Nach meinem Verständnis stellt ein Maven -Projekt sicher, dass jede Datei, die im Ressourcenordner verfügbar ist, in Project ClassPath verfügbar sein wird. Ich habe die Datei unter Ressourcen/Meta-inf/fing/repo/test.db4o aufbewahrt.

Hier ist der Eintrag im Frühlingskontext.


<bean id="objectContainer" class="org.springmodules.db4o.ObjectContainerFactoryBean">
    <property name="databaseFile" value="classpath:META-INF/spring/repo/test.db4o" />
</bean>

Sobald ich installiert und versuche, die Anwendung zu starten, erhalte ich die folgende Ausnahme.


java.io.FileNotFoundException: OSGi resource[classpath:META-INF/spring/repo/test.db4o|bnd.id=258|bnd.sym=taxonomydaoimplbundle] cannot be resolved to absolute file path because it does not reside in the file system: bundle://258.0:1/META-INF/spring/repo/test.db4o

Ich habe verschiedene Kombinationen ausprobiert, aber OSGI scheint diese Datei nicht zu erkennen. Jeder Zeiger wird geschätzt.

-Vielen Dank

War es hilfreich?

Lösung

Ich fand das Problem schließlich. ObjectContainerFactoryBean stützt sich auf OsgireSourcebundle, um die Ressource als Dateiobjekt zu laden. Obwohl OsgireSourcebundle eine Methode namens GetFile () enthüllt, funktioniert sie nicht wie in einer OSGI -Umgebung beabsichtigt. Es wird immer ein Dateiprotokoll erwartet, während die als URI zurückgegebene Ressource ein Protokoll "Bündel" hat. Daher wird die Ausnahme ausgelöst. Die Problemumgehung besteht darin, einen Inputstream oder Geturl zu verwenden. Da ich nicht den Quellcode von ObjectContainerFactoryBean hatte, musste ich diese Klasse erweitern, um meine eigene Implementierung bereitzustellen, die die Datei als Eingabestream lädt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top