Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not open ServletContext resource

This is quite similar question to one older but the solution did not work for me.

I have a WAR package.

In 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>

In application-context.xml

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

But getting this:

org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/social.properties]

I checked the WAR package - .xml and .properties files are both in /WEB-INF/classes

.properties file is in src/main/resources and .xml in src/main/java (in default package both) and maven transports them (I think) correctly in the default package of WEB-INF/classes

Does anyone know why i could get this exception? Thank you.

EDIT: I just want to add that JUnit tests goes correctly (i mean they load what they should from social.properties) but when running the app it ignores my classpath: prefix

like image 854
kuncajs Avatar asked May 17 '11 18:05

kuncajs


3 Answers

Do not use classpath. This may cause problems with different ClassLoaders (container vs. application). WEB-INF is always the better choice.

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

and

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="location">
         <value>/WEB-INF/social.properties</value>
     </property>
</bean>
like image 153
Roman K Avatar answered Nov 11 '22 12:11

Roman K


Put the things like /src/main/resources/foo/bar.properties and then reference them as classpath:/foo/bar.properties.

like image 27
pkopac Avatar answered Nov 11 '22 13:11

pkopac


Try to use classpath*: prefix instead.

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

Also please try to deploy exploded war, to ensure that all files are there.

like image 8
Ivan.Latysh Avatar answered Nov 11 '22 13:11

Ivan.Latysh