web-dev-qa-db-fra.com

Impossible d'ouvrir la ressource ServletContext

C'est une question assez similaire à une plus ancienne mais la solution n'a pas fonctionné pour moi.

J'ai un package WAR.

Dans web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application-context.xml</param-value>
</context-param>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

Dans application-context.xml

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>classpath:social.properties</value>
    </property>
</bean>

Mais obtenir ceci:

org.springframework.beans.factory.BeanInitializationException: impossible de charger les propriétés; l'exception imbriquée est Java.io.FileNotFoundException: impossible d'ouvrir la ressource ServletContext [/social.properties]

J'ai vérifié le package WAR - .xml et .properties les fichiers sont tous les deux dans /WEB-INF/classes

.properties le fichier est dans src/main/resources et .xml dans src/main/Java (dans le package par défaut) et maven les transporte (je pense) correctement dans le package par défaut de WEB-INF/classes

Est-ce que quelqu'un sait pourquoi je pourrais obtenir cette exception? Merci.

EDIT: Je veux juste ajouter que les tests JUnit se passent correctement (je veux dire qu'ils chargent ce qu'ils devraient à partir de social.properties) mais lors de l'exécution de l'application, il ignore mon classpath: préfixe

33
kuncajs

N'utilisez pas classpath. Cela peut entraîner des problèmes avec différents ClassLoaders (conteneur ou application). WEB-INF est toujours le meilleur choix.

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>

et

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="location">
         <value>/WEB-INF/social.properties</value>
     </property>
</bean>
32
kromit

Mettez les choses comme /src/main/resources/foo/bar.properties, puis référencez-les comme classpath:/foo/bar.properties.

13
pkopac

Essayez d'utiliser classpath*: préfixe à la place.

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-classpath-wildcards

Essayez également de déployer la guerre éclatée pour vous assurer que tous les fichiers sont là.

5
Ivan.Latysh

essayez avec ce code ...

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
         <property name="ignoreUnresolvablePlaceholders" value="true"/>
             <property name="locations">
              <list>                        
                    <value>/social.properties</value>               
              </list>
         </property>         
        </bean>
0
jaleel

Assurez-vous que le fichier de propriétés est dans "/ WEB-INF/classes", essayez d'utiliser

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>/WEB-INF/classes/social.properties</value>
    </property>
</bean>
0
totoland

Demandez-vous à Tomcat de décompresser le fichier WAR? Il semble que les fichiers soient introuvables sur le chemin de classe lorsqu'un fichier WAR est chargé et qu'il est pas en cours de décompression.

0
Michiel Verkaik

Je pense qu'actuellement le fichier application-context.xml est dans src/main/resources ET le fichier social.properties est dans src/main/Java ... donc quand vous empaquetez (paquet mvn) ou quand vous exécutez Tomcat (mvn Tomcat: run) vos social.properties ont disparu (je sais que vous avez dit quand vous avez vérifié dans le .war que les fichiers sont ici ... mais votre exception dit le contraire).

La solution consiste simplement à mettre tous vos fichiers de configuration (application-context.xml et social.properties) dans src/main/resources pour suivre la structure standard de maven.

0
equesada

J'ai eu la même erreur.

Mon nom de fichier était jpaContext.xml et il a été placé dans src/main/resources. J'ai spécifié param value="classpath:/jpaContext.xml".

Enfin, j'ai renommé le fichier en applicationContext.xml et l'a déplacé vers le répertoire WEB-INF et a changé la valeur de paramètre en /WEB-INF/applicationContext.xml, alors ça a marché!

0
Himanshu Shukla