我们正面临一个关于EhCache和Spring的问题,当我们将ehcache.xml中的XSD文件指向http://ehcache.org/ehcache.xsd时,一切正常,我们的应用程序可以启动正确。 但是我们的服务器无法访问外部网站,因此我们将XSD位置更改为本地,如下所示,但是应用程序无法启动以下异常(已将ehcache.xsd复制到classes文件夹,与ehcache.xml相同)。 我用谷歌搜索了许多解决方案,但它仍然无法修复。我需要你的帮助。非常感谢你。
春天:3.1.0 EhCache:2.4.2 服务器:Tomcat 6.0 Java:1.6
配置:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false" monitoring="autodetect" dynamicConfig="true">
例外:
2012-11-07 16:54:42,003 WARN [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - <Ignored XML validation warning>
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'ehcache.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:96)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:380)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2440)
... more
2012-11-07 16:54:42,007 ERROR [org.springframework.web.context.ContextLoader] - <Context initialization failed>
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 3 in XML document from ServletContext resource [/WEB-INF/classes/META-INF/ehcache.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ehcache'.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
... more
Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ehcache'.
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)
... more
答案 0 :(得分:11)
下载ehcache.xsd,将其放在config xml文件所在的文件夹中。 像下面一样修改xml头,注意 classpath 前缀:
<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="classpath:ehcache.xsd">
这将适用于开发和生产环境。
答案 1 :(得分:7)
通常我设置xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
,但这在离线环境中无效。
答案 2 :(得分:1)
我的解决方法是将此xsd文件添加到绝对路径,例如:c:/ehcache.xsd并指向ehcache.xml中的此位置。 希望这能帮助那些面临同样问题的人。
仍然期待找到其他解决方案。
感谢。
答案 3 :(得分:0)
就我而言,只需将文件从http://ehcache.org/ehcache.xsd下载到src/main/resources
就可以解决问题
cd src/main/resources
wget http://ehcache.org/ehcache.xsd