2.5.2.4. Laden der Testdaten durch den ClasspathResourceLoader

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>