2012-04-05 3 views
1

Я пытаюсь использовать PropertyPlaceholderConfigurer для загрузки некоторых переменных, находящихся в файлах свойств, но он не работает. Некоторые сайты в Интернете предположили, что проблема возникает, когда Spring AOP не находится в classpath, но я гарантировал, что aop framework находится в моем проекте. Вот мой 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) 

мне нужно сделать что-то другое при запуске программы вне контейнера для использования PropertyPlaceholderConfigurer с ClassPathXmlApplicationContext ли?

+2

Каковы определения заголовков XML-схем? Каковы схемы, настроенные для XML? Исключением является жалоба на разбор XML-конфигурации Spring beans. – nobeh

+0

Является ли тег паролей для вашего бобов? Я не нашел ничего подобного весной и ее подмодулям. – Luciano

+0

Если вы используете NetBeans: щелкните правой кнопкой мыши на редакторе XML-кода> Validate XML. – JMelnik

ответ

0

Существует альтернативный подход к этому. вы можете попробовать это, как указано ниже.

Вместо определения в PropertyPlaceholderConfigurer в applicationContext.xml, используйте следующий код, чтобы определить его контекста сервлета

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

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

Здесь BeanFactory является XmlBeanFactory создана при ClassPathResource.

Файл свойств localDB.properties может содержать присвоенные значения, и они могут быть использованы в качестве applicationContext.xml $ {} Encryption.key, здесь Encryption.key является одним из ключевых из файла свойств

Смежные вопросы