Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not resolve Spring property placeholder

Tags:

spring

I have my config:

<context:property-placeholder location="classpath:idm.properties" />  <bean id="idmPropertyHolder" class="fi.utu.resurssitilaus.idm.IdmPropertyHolder">    <property name="url" value="${idm.url}" />      <property name="user" value="${idm.user}" />     <property name="password" value="${idm.password}" />     <property name="proxyHost" value="${http.proxyHost}" />     <property name="proxyPort" value="${http.proxyPort}" /> </bean> 

I get the error

    SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener     org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'idmPropertyHolder' defined in ServletContext resource [/WEB-INF/idm-config.xml]: Could not resolve placeholder 'idm.url'             at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:272)             at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:75)             at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:640)             at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:615)             at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:405)             at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)             at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)             at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)             at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)             at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)             at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)             at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)             at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)             at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)             at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:514)             at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1288)             at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)             at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)             at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)             at java.lang.reflect.Method.invoke(Method.java:597)             at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)             at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)             at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)             at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1473)             at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:824)             at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:350)             at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)             at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)             at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:196)             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)             at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)             at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)             at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)             at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)             at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)             at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)             at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)             at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)             at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)             at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)             at java.lang.Thread.run(Thread.java:619)     24.1.2011 9:19:05 org.apache.catalina.core.ApplicationContext log     INFO: Closing Spring root WebApplicationContext     24.1.2011 9:19:05 org.apache.catalina.core.ApplicationContext log     INFO: Shutting down log4j 

I know this could be missing properties file, but I have it in my classpath just right. What is missing?

My web.xml:

<context-param>     <param-name>contextConfigLocation</param-name>     <param-value>       /WEB-INF/base-config.xml       /WEB-INF/idm-config.xml       /WEB-INF/ldap-config.xml       /WEB-INF/sec-config.xml      </param-value>   </context-param>    <!-- Reads request input using UTF-8 encoding -->   <filter>     <filter-name>characterEncodingFilter</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>     <filter-name>springSecurityFilterChain</filter-name>     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>   </filter>    <filter-mapping>     <filter-name>characterEncodingFilter</filter-name>     <url-pattern>/*</url-pattern>   </filter-mapping>     <filter-mapping>     <filter-name>springSecurityFilterChain</filter-name>     <url-pattern>/*</url-pattern>   </filter-mapping>    <listener>     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>   </listener>     <listener>     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   </listener>    <listener>     <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>   </listener>    <!-- Handles all requests into the application -->   <servlet>     <servlet-name>dispatcher</servlet-name>     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     <init-param>       <param-name>contextConfigLocation</param-name>       <param-value>         /WEB-INF/app-config.xml        </param-value>     </init-param>     <load-on-startup>1</load-on-startup>   </servlet>    <servlet>     <servlet-name>tiles</servlet-name>     <servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>     <init-param>       <param-name>         org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG       </param-name>       <param-value>         /WEB-INF/tiles-config.xml       </param-value>     </init-param>     <load-on-startup>2</load-on-startup>   </servlet>    <servlet-mapping>     <servlet-name>dispatcher</servlet-name>     <url-pattern>*.html</url-pattern>   </servlet-mapping>    <session-config>     <session-timeout>       30     </session-timeout>   </session-config>    <welcome-file-list>     <welcome-file>redirect.jsp</welcome-file>   </welcome-file-list> </web-app> 
like image 743
mjgirl Avatar asked Jan 24 '11 07:01

mjgirl


People also ask

How do I fix placeholder Cannot resolve?

IllegalArgumentException: Could not resolve placeholder Error You just need to add this lines in your pom. xml file under the <resources> section. Now, your error might be solved. Second solution is Just try to Rebuild Project with Build -> Rebuild Project, Now your error should be fixed.

What is a Propertysourcesplaceholderconfigurer used for?

PropertyPlaceholderConfigurer is used to resolve ${...} placeholders against a property. It can be local properties or system properties or environment variables. We can use PropertyPlaceholderConfigurer using XML as well as annotation. PropertyPlaceholderConfigurer externalizes the property configuration.

What is context property placeholder?

The context:property-placeholder tag is used to externalize properties in a separate file. It automatically configures PropertyPlaceholderConfigurer , which replaces the ${} placeholders, which are resolved against a specified properties file (as a Spring resource location).

What is application properties in spring boot?

Properties File Properties files are used to keep 'N' number of properties in a single file to run the application in a different environment. In Spring Boot, properties are kept in the application. properties file under the classpath. The application.properties file is located in the src/main/resources directory.


2 Answers

You may have more than one org.springframework.beans.factory.config.PropertyPlaceholderConfigurer in your application. Try setting a breakpoint on the setLocations method of the superclass and see if it's called more than once at application startup. If there is more than one org.springframework.beans.factory.config.PropertyPlaceholderConfigurer, you might need to look at configuring the ignoreUnresolvablePlaceholders property so that your application will start up cleanly.

like image 135
jabley Avatar answered Oct 24 '22 23:10

jabley


Your property file location is classpath:idm.properties

This is rather unusual, it means that idm.properties must be located either at the top level of WEB-INF/classes or at the top-level of one of the jars inside WEB-INF/lib. Usually it's good practice to either use a dedicated folder for properties or keep them close to the context files that use them.

So my suggestion is this: Is your properties file perhaps next to your context file? If so, it's not on the classpath (see this question: Is WEB-INF in the CLASSPATH?).

The classpath: prefix maps to a ClassPathResource, but you probably need a ServletContextResource, and you'll get that from a WebApplicationContext using the syntax without prefix:

<context:property-placeholder location="idm.properties" /> 

Reference:

like image 38
Sean Patrick Floyd Avatar answered Oct 24 '22 22:10

Sean Patrick Floyd