2012-04-05 2 views
1

PropertyPlaceholderConfigurer를 사용하여 속성 파일에있는 일부 변수를로드하려고하는데 작동하지 않습니다. 인터넷상의 일부 사이트는 spring aop이 classpath에 없을 때 문제가 발생한다고 제안했지만 Aop 프레임 워크가 내 프로젝트에 있음을 확인했습니다. 여기 내 springContext.xml입니다 :PropertyPlaceholderConfigurer가 ClassPathXmlApplicationContext와 작동하지 않습니다.

<!-- Register all placeholder locations --> 
<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" > 
    <property name="order" value="0" /> 
    <property name="ignoreUnresolvablePlaceholders" value="true" /> 
    <property name="locations"> 
     <list> 
      <value>file:/mypath/file.properties</value>    
     </list> 
    </property> 
</bean> 

<!-- Register all placeholder locations --> 
<password-decrypter order="10" id="passwordConfigurer"> 
<decrypter algorithm="PBEWithSHAAnd128BitRC4" key="${Encryption.key}" /> 
    <decryption-entries> 
     <decryption-entry bean-ref="ds" properties="password" /> 
    </decryption-entries> 
</password-decrypter> 

는 그리고 여기에 오류 던지고있다 :

Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'password-decrypter'. 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318) 
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:417) 
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3182) 
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1927) 
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:705) 
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235) 
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284) 
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:351) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:280) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:131) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:147) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:173) 
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:112) 
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:79) 
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:101) 
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:389) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:324) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65) 

이 ClassPathXmlApplicationContext와 PropertyPlaceholderConfigurer와를 사용하는 컨테이너 외부에서 프로그램을 실행할 때 나는 뭔가 다른 일을해야합니까?

+2

XML 스키마 헤더 정의 란 무엇입니까? XML 용으로 구성된 스키마는 무엇입니까? 예외는 스프링 빈의 XML 설정을 파싱하는 것에 대해 불평하고있다. – nobeh

+0

당신의 bean을위한 password-decrypter 태그가 있습니까? 나는 봄과 그 하위 모듈에서 그런 것을 발견하지 못했다. – Luciano

+0

NetBeans를 사용하는 경우 : xml 코드 편집기> XML 유효성 검사를 마우스 오른쪽 단추로 클릭하십시오. – JMelnik

답변

0

대체 방법이 있습니다. 아래에 언급 된대로 시도해 볼 수 있습니다.

applicationContext.xml 대신에 PropertyPlaceholderConfigurer와를 정의,

PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer(); 
    ResourceLoader resourceLoader = new DefaultResourceLoader(); 
    Resource resource = resourceLoader.getResource("classpath:localDB.properties"); 

    configurer.setLocation(resource); 
    configurer.postProcessBeanFactory(beanFactory); 

ServletContextListener

그것을 정의 아래의 코드를 사용하는 것은 다음의 BeanFactory ClassPathResource가은을 사용하여 만든 은 XmlBeanFactory이다.

속성 파일 localDB.properties이 충당 값을 포함 할 수 있으며이 $ {Encryption.key}로 applicationContext.xml에서 사용할 수 있습니다, 여기에 Encryption.key는 속성

파일에서 키의 하나입니다
관련 문제