Wie Sie access-Datei, in der statische Ressourcen(WEB-INF-Ordner) aus der Referenzierung von java-Projekt?
Ich habe eine web-Anwendung, enthält ein Konfigurations-xml-Datei für meine Anwendung services, die ausgesetzt ist als spring-bean.
Auch ich habe eine standalone-java-Anwendung(die Verweise meine web-app-Projekt aus dem pom.xml) in dem gleichen Arbeitsbereich, führt tests mit Spring TestContext framework und einer der tests überprüft, die Konfiguration der XML-Datei.
Jedoch habe ich ein problem mit dem Zugriff auf diese xml-Datei von der standalone-app:
Vor der Einrichtung testen, in meiner vorherigen Konfiguration, die Datei zugegriffen wurde durch ServletContext und befand sich in WEB-INF/ Ordner. Allerdings machen es zugänglich von dem test-Projekt hatte ich, um es zu Quelle/ Ordner und laden Sie es mit getClassLoader().getResourceAsStream () - Methode statt, die von ServletContext. Aber es macht die Bearbeitung der Datei umständlich, da jedes mal die app neu implementiert werden.
Ist es möglich zu halten Sie die Datei in WEB-INF/ Ordner, sondern laden Sie es aus dem verweisenden Projekts während der Testläufe?
P. S. Momentan ist es ein STS-Projekt mit Tomcat-server.
InformationsquelleAutor Boris Treukhov | 2012-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jeden Fall halten Sie die Datei unter WEB-INF/Ordner, wenn das ist, wo es soll, um zu Leben.
Für Ihren test-Klassen, die ausgeführt werden, von der Befehlszeile aus. Ihr können getClassLoader().getResource() auf eine Datei, die Sie wissen, ist in der Wurzel des klassenpfades (z.B. Antrag.properties-Datei). Von dort kennen Sie die Struktur Ihres Projekts, und wo Sie zu finden WEB-INF/relativ zu den Eigenschaften der Datei. Da gibt es eine URL, die Sie können es verwenden, um herauszufinden, einen Weg, um die XML-Dateien, die Sie suchen.
Ich hoffe, Sie finden diese nützlich. Ich habe zu Annahmen darüber, wie Sie Ihren test-Klassen sind runing etc.
Werfen Sie einen Blick auf die File-Klasse und es ist getPath(), getAbsolutePath () und getParent () - Methoden, die konnte sein von nutzen für Sie.
Ja, Sie sind richtig, denn Sie haben eine web-app, es sollten die standard ServletContext Zugriff auf Dateien im WEB-INF-Ordner. Dann nur noch die Implementierung dieses jiggery-pokery für Ihre test-code.
InformationsquelleAutor Brad
Landete ich mit Frühling MockServletContext Klasse und injizieren es direkt an meine service-bean, bevor der test ausgeführt wird, als mein Dienst implementiert
ServletContextAware
:Wenn ich mehrere Klassen mit Hilfe der Servlet-Kontext, dann die bessere Lösung wäre die Verwendung WebApplicationContext stattdessen wird der Standardwert (derzeit von DelegatingSmartContextLoader), aber es würde das implementieren benutzerdefinierter ContextLoader Klasse und Weitergabe seiner Klasse name @ContextConfiguration annotation.
alternative und etwas sauberere Lösung, das später kam, mein Geist ist zu überarbeiten der Dienst-und injizieren
ServletContext
über@Autowired
anstelle von messing mitServletContextAware
, und geben Sie die Bohnen der entsprechenden Art(effektiv einMockServletContext
Instanz).Möglicherweise, in Zukunft auch die direkte Unterstützung vonMockServletContext
von der test-Klassen werden Hinzugefügt, um den Frühling zu sehen SPR-5399 und SPR-5243.UPDATE FÜR DAS FRÜHJAHR 3.2
Im Frühjahr 3.2 Initialisierung des servlet-Kontext wurde so einfach wie das hinzufügen einer
@WebAppConfiguration
Anmerkung:details finden Sie in der der Artikel
InformationsquelleAutor Boris Treukhov
In einem Maven-Projekt hatte ich das gleiche problem. Ich hatte keine servletContext und konnte nicht auf statische Datei in
WEB-INF-Verzeichnis.
Ich stieß auf eine Lösung durch hinzufügen von Eintrag zu pom.xml das gab mir den Zugriff auf das Verzeichnis. Es gehört eben auch, dass dieser Pfad dem classpath.
PS: ich war mit Tomcat-container
InformationsquelleAutor a.valchev
Es ist ein classpath-Ressource, so legte es auf den Klassenpfad ein: $webapp/WEB-INF/classes
Maven-Projekten wird, kopieren Dinge in $Modul/src/main/resources zu dieser Position, wenn die Verpackung der webapp.
(die erstere ist eine sourcepath, die letzten WEB-INF/classes - immer auf dem Klassenpfad der servlet-container, pro spec.)
Sie möchten möglicherweise verwenden Sie das jetty-plugin und führen Sie Ihre webapp 'loser'... das sollte helfen: wiki.eclipse.org/Jetty/Feature/...
+1 für die interessante jetty link, aber jetzt sind meine Prüfungen laufen auch sehr gut ohne einen webserver(mit Hilfe des Spring-Test-Kontext-Rahmen)
InformationsquelleAutor ianpojman