如何将本地xsd用于带Spring的EhCache

如何将本地xsd用于带Spring的EhCache,spring,ehcache,Spring,Ehcache,我们正面临一个关于EhCache和Spring的问题,当我们将EhCache.xml中的XSD文件指向时,一切正常,我们的应用程序可以正确启动。 但我们的服务器无法访问外部网站,因此我们将XSD位置更改为本地,如下所示,但应用程序无法启动,出现以下异常(已将ehcache.XSD复制到classes文件夹,与ehcache.xml相同)。 我在谷歌上搜索了很多解决方案,但仍然无法修复。我需要你的帮助。多谢各位 春季:3.1.0 EhCache:2.4.2 服务器:Tomcat 6.0 Java:

我们正面临一个关于EhCache和Spring的问题,当我们将EhCache.xml中的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
2012-11-07 16:54:42003警告[org.springframework.beans.factory.xml.XmlBeanDefinitionReader]-
org.xml.sax.SAXParseException:schema_reference.4:未能读取架构文档“ehcache.xsd”,因为1)找不到该文档;2) 文件无法读取;3) 文档的根元素不是。
位于com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
位于com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:96)
请访问com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:380)
请访问com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
位于com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2440)
... 更多
2012-11-07 16:54:42007错误[org.springframework.web.context.ContextLoader]-
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自ServletContext资源[/WEB-INF/classes/META-INF/ehcache.xml]的xml文档中的第3行无效;嵌套异常为org.xml.sax.SAXParseException:cvc elt.1:找不到元素“ehcache”的声明。
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
... 更多
原因:org.xml.sax.SAXParseException:cvc elt.1:找不到元素“ehcache”的声明。
位于com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
位于com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
...  更多

我的解决方法是将这个xsd文件添加到绝对路径,例如:c:/ehcache.xsd,并指向ehcache.xml中的这个位置。 希望这能帮助那些面临同样问题的人

仍然期待着找到其他解决方案


谢谢。

通常我会设置
xsi:noNamespaceSchemaLocation=”http://ehcache.org/ehcache.xsd“
,但这在脱机环境下无法工作。

下载后,将其放在配置xml文件所在的同一文件夹中。 修改xml头,如下所示,请注意类路径前缀:

<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="classpath:ehcache.xsd">


这将在开发和生产环境中起作用。

在我的例子中,只需将文件从下载到
src/main/resources
即可解决问题

cd src/main/resources
wget http://ehcache.org/ehcache.xsd

如果在同一目录中,这甚至可以在没有
classpath:
前缀的情况下工作。thnks