Bei der Durchführung von Tests mit checkerberry db werden die
XML-Testdaten aus dem Klassenpfad geladen. Das Laden der XML-Testdaten
aus dem Klassenpfad erfolgt über die Implementierung des Interfaces
ClasspathResourceLoader
. Das Interface ist im
folgenden Code-Beispiel dargestellt.
Beispiel 2.71. Interface ClasspathResourceLoader
/** * Resource-Loader, der die zu ladenden Dateien im Classpath sucht. */ public interface ClasspathResourceLoader { /** * Liefert die URL zum angegebenen Dateinamen zurück. * * @param filename * Dateiname relativ zum Classpath. * @return URL der Datei aus dem Classpath oder <code>null</code>, wenn * eine solche Datei nicht existiert. * @throws java.io.IOException * wenn ein Fehler beim Zugriff auf die Datei aufgetreten * ist. */ URL getUrl(String filename) throws IOException; }
Dem Resource-Loader wird ein relativer Dateiname übergeben. Die Datei wird dann im Klassenpfad gesucht und als URL zurückgeliefert.
Wenn keine spezifische Implementierung von
ClasspathResourceLoader
angegeben wurde, wird der
CoreClassLoader
als Default verwendet.
In Spring-Umgebungen existiert in dem Projekt
checkerberry-db-spring3-bridge
mit der Klasse
SpringClasspathResourceLoader
eine weitere
Basisimplementierung dieses Interfaces. Die Klasse implementiert das
Spring-Interface
org.springframework.context.ResourceLoaderAware
,
was zum Setzen eines Spring-Resource-Loaders
(org.springframework.core.io.ResourceLoader
)
führt. Über diesen Resource-Loader wird die gesuchte Datei
geladen.
Damit der Spring-Resource-Loader durch Spring in die Klasse
SpringClasspathResourceLoader
injiziert wird, muss
die Klasse über Spring erzeugt werden. Anderenfalls wird das Interface
ResourceLoaderAware
nicht ausgewertet und der
Resource-Loader wird nicht gesetzt. Es ist somit wichtig, dass der
SpringClasspathResourceLoader
, wie im folgenden
Code-Beispiel gezeigt, in dem ApplicationContext von Spring definiert
wird.
Beispiel 2.72. SpringClasspathResourceLoader in ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> … <!- Resourceloader für Testdaten im Classpath: Immer easy, wenn Spring im Spiel ist. --> <bean name="resourceLoader" class="de.conceptpeople.checkerberry.db.\\ spring.bridge.hibernate.resource.SpringClasspathResourceLoader"/> … </beans>