Ne pouvez pas Importer des applicationContext dans la classe de test
mon applicationContext.xml,webmvc-config.xml sont dans WEB-INF/spring/applicationContext.xml
quand j'ai essayer le suivant, il ne charge pas, et je reçois java.io.FileNotFoundException
@ContextConfiguration(locations = { "classpath:WEB-INF/spring/applicationContext.xml" })
je suis en utilisant le printemps 3, junit 4.7.
il fonctionne avec le sale contournement par la copie applicationContext.xml dans le dossier de ressources, il est donc double.
et j'ai changé le chargement:
@ContextConfiguration(locations = { "classpath:/applicationContext.xml" })
mon web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<!-- start up and shut down Spring's root WebApplicationContext (Interface to provide configuration for a web application) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Central dispatcher for HTTP request handlers/controllers: take an incoming URI and find the right combination of handlers (generally methods on Controller classes)
and views (generally JSPs) that combine to form the page or resource that's supposed to be found at that location. -->
<servlet>
<servlet-name>p</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/webmvc-config.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>p</servlet-name>
<url-pattern>/p/*</url-pattern>
</servlet-mapping>
<!-- allows one to specify a character encoding for requests.
This is useful because current browsers typically do not set a character encoding even if specified in the HTML page or form -->
<filter>
<filter-name>encoding-filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/applicationContext.xml
</param-value>
</context-param>
<!--
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<!-- Based on the popular and very useful mod_rewrite for apache, UrlRewriteFilter is a Java Web Filter for any J2EE
compliant web application server (such as Resin or Tomcat), which allows you to rewrite URLs before they get to your
code. It is a very powerful tool just like Apache's mod_rewrite. -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
veuillez indiquer une meilleure solution.
Qu'est-ce que votre classpath de l'endroit? Si c'est une servlet, il est normalement
WEB-INF/classes
cela signifie que vous avez à garder votre applicationContext fichier dans WEB-INF/classes/spring/applicationContext.xml
et l'utilisation de la configuration que @ContextConfiguration(locations = { "classpath:spring/applicationContext.xml" })
OriginalL'auteur Mahmoud Saleh | 2011-09-14
Vous devez vous connecter pour publier un commentaire.
Le classpath de l'application web est composé de
Donc, si vous souhaitez charger le fichier de contexte depuis le chemin de la classe, vous en avez besoin dans un de ces endroits. Mettre dans
WEB-INF/classes/spring
et de le charger à l'aide declasspath:spring/applicationContext.xml
par exemple.EDIT: je viens de réaliser que vous avez un problème lors du chargement du fichier de contexte à partir d'un test JUnit. La réponse est similaire, bien qu'. Le répertoire contenant
WEB-INF
n'est certainement pas dans le classpath de votre unité de test runner. L'unité de test runner devrait utiliser plus ou moins de la même classpath de l'application serveur, le fichier doit être dans un endroit qui la fait passer pour un POT de fichier ou un répertoire qui est dans le classpath de l'essai après la construction. Si vous utilisez Maven, lasrc/main/resources
répertoire est normalement l'un d'eux: tout dans ce répertoire va de latarget/classes
répertoire, qui est dans le classpath de l'unité de test runner.target/classes est le répertoire où Maven compile les classes et les copies des ressources. Après la compilation, votre build probablement génère un fichier war, ou éclaté la guerre de fichier. Ce fichier war ou explosé guerre de fichier est utilisé par le serveur d'application pour exécuter votre application web. Et le serveur d'application ne se soucie pas de la façon dont vos sources sont organisées et qui créent de l'outil que vous utilisez pour construire la guerre. Ce qui est important, c'est la structure de la guerre de fichier, qui doit respecter le JEE spec. Donc, mettez le fichier là où il doit être, de sorte que, après la construction, il est situé dans WEB-INF/classes/printemps dans la guerre.
Si vous utilisez Maven, en le mettant dans le répertoire src/ressources/printemps répertoire devrait le faire aller sur le WEB-INF/classes/printemps après la construction. Mais ça dépend peut-être de votre pom.xml.
eh bien, quand je l'ai fait, j'ai été en mesure d'exécuter le test avec succès, mais n'était pas en mesure d'exécuter l'application, j'obtiens exception: java.io.FileNotFoundException: impossible d'ouvrir le ServletContext de ressources [/resources/spring/applicationContext.xml]
Je pense que @JB est droit, il Vous suffit d'ajouter le (classpath*:context.xml dans votre web.xml que doit résoudre le problème, je garde mon fichier de contexte dans le répertoire des ressources pour y accéder à partir de mes tests
OriginalL'auteur JB Nizet
bien, j'ai finalement réussi à le faire comme suit (sur la base spring roo application générée):
j'ai mis mon applicationContex.xml fichier dans le répertoire:
et dans le web.xml:
et dans l'unité de la classe de test:
OriginalL'auteur Mahmoud Saleh
- Je garder mon contexte de l'application fichiers (src/main/resources) et ajouter la classe suffixe de chemin d'accès de test ou web.xml
Pour accéder au fichier de contexte qui se trouve dans src/main/resources de (web.xml), ajouter cette config pour votre web.xml
C'est comment mon test de config ressemble
je veux dire que je devrais faire de même pour mvc config : <servlet> <servlet-name>p</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:webmvc-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
Je fais ça pour eux, mais je pense que cela a à voir avec ma préférence personnelle de garder tous mes fichiers de configuration dans le répertoire src/main/resources répertoire. Je laisse à vous où vous voulez mvc/sécurité/servlet fichiers de configuration si
coz quand j'ai fait le semblable à webmvc-config.xml comme ci-dessus, l'application ne s'exécute pas, et je ne trouve aucune des exceptions, il construit et commence avec aucune erreur, mais rien ne s'affiche juste 404.
J'ai une application qui fonctionne de cette config, juste pour vérifier qu'il est en fait de trouver le fichier au lieu de webmvc-config.xml donner un faux nom, Vous devriez obtenir un fichier non trouvé exception. Si vous obtenez au moins ça prouve bien que la config n'est pas le problème. Aussi pouvez-vous mis de l'exploitation forestière, du printemps à l'info dans votre log4j pour obtenir plus d'informations possibles comme conteneur des bottes haut.
OriginalL'auteur Prasanna Talakanti
Une autre solution est d'ajouter l'applicationContext à main/src/ressources.
Également ajouter (une seconde) le contexte de l'application (pour la servlet) META-INF, avec une seule ligne, ce qui importe le premier contexte depuis le classpath
Vous pouvez ensuite importer le premier dans le test, et il n'y a pas de dupliquer les définitions.
OriginalL'auteur csviri