2011-01-24 20 views
41

tengo mi config:no pudo resolver la propiedad primavera marcador de posición

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

consigo el 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 

sé este archivo de propiedades podría faltar, pero lo tengo en mi ruta de clase justo . ¿Lo que falta?

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

Respuesta

3

todavía creen que su que ver con los apoyos archivo no está ubicados en la primavera. Haz una prueba rápida pasando los params como jvm params. es decir -Didm.url = ....

+0

No estoy familiarizado con params JVM – mjgirl

+0

@mjgirl no es tan difícil: '-Dkey = valor' medios de ajuste de la "llave" sistema de propiedad de "valor" –

+0

HAC significa que escribo para presentar propiedades – mjgirl

13

Su ubicación del archivo de la propiedad es classpath:idm.properties

Esto es bastante inusual, significa que idm.properties tiene que estar o en el nivel superior de WEB-INF/classes o en la parte superior- nivel de uno de los frascos dentro de WEB-INF/lib. Por lo general, es una buena práctica utilizar una carpeta dedicada para las propiedades o mantenerlas cerca de los archivos de contexto que las utilizan.

Así que mi sugerencia es esta: ¿Es su archivo de propiedades tal vez al lado de su archivo de contexto? Si es así, no está en el classpath (vea esta pregunta: Is WEB-INF in the CLASSPATH?).

Los mapas classpath: prefijo a un ClassPathResource, pero es probable que tenga un ServletContextResource, y obtendrá que desde un WebApplicationContext utilizando la sintaxis sin prefijo:

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

Referencia:

+6

En el ejemplo de la semana infantil de Spring, ponen propiedades en src/main/resources y luego las referencian a través de classpath: app.properties. – blahdiblah

11

Definitivamente no es un problema con propeties archivo no se encuentra, ya que en ese caso se lanza otra excepción.

Asegúrese de que realmente tiene un valor con la clave idm.url en su idm.properties.

+0

He copiado las opciones de VM de mi secuencia de comandos de inicio, por lo que todas fueron precedidas por "-D". No se me había ocurrido comprobar algo tan obvio ... ¡Gracias! – delucasvb

95

Puede tener más de un org.springframework.beans.factory.config.PropertyPlaceholderConfigurer en su aplicación. Intente establecer un punto de interrupción en el método setLocations de la superclase y vea si se llama más de una vez al inicio de la aplicación. Si hay más de un org.springframework.beans.factory.config.PropertyPlaceholderConfigurer, es posible que necesite ver la configuración de la propiedad ignoreUnresolvablePlaceholders para que su aplicación se inicie limpiamente.

+7

Importé un contexto de aplicación de otro y cada uno de ellos tenía su propio titular de posición de propiedad. Me tomó horas tratar de resolverlo (tenía la misma excepción) y establecer el valor de ignoreUnresolvablePlaceholders en true en el contexto de la aplicación superior fue el truco. ¡Gracias por escribir esta respuesta! – forhas

+0

El mismo problema aquí solo en mi caso, tuve un ppc en el xml y al parecer estaba creando otro utilizando la anotación @PropertySource en otro lugar. Me deshice de la anotación y pasé ambos archivos de utilería al frijol ppc en el xml y la viola. gracias por el consejo. – dev

+0

¡Tan simple, pero tan poderosa solución para resolver todos los problemas con las configuraciones de marcador de posición! – Cherry

-6

Asegurar 'idm.url' se establece en el archivo de propiedades y el archivo de propiedades se carga

1

asegúrese de que el archivo de propiedades existe en el directorio ruta de clase, pero no en la subcarpeta del directorio de ruta de clases. si existe en la subcarpeta, escriba como sigue classpath: subfolder/idm.propiedades

Cuestiones relacionadas