2012-11-07 8 views
6

Siamo di fronte a un problema su EhCache e Spring, quando puntiamo il file XSD in ehcache.xml a http://ehcache.org/ehcache.xsd, tutto è ok, la nostra applicazione può essere avviata correttamente. Ma il nostro server non può accedere a siti Web esterni, quindi abbiamo modificato la posizione XSD in locale come di seguito, ma l'applicazione non può essere avviata con la seguente eccezione (copia già ehcache.xsd nella cartella classes, come ehcache.xml). Ho cercato su Google molte soluzioni, ma non è stato ancora risolto. Ho bisogno del tuo aiuto per questo. Grazie mille.Come utilizzare xsd locale per EhCache con Spring

Primavera: 3.1.0 EHCache: 2.4.2 Server: Tomcat 6.0 Java: 1.6

Config:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="ehcache.xsd" 
    updateCheck="false" monitoring="autodetect" dynamicConfig="true"> 

Eccezione:

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

http://www.ehcache.org/ehcache.xsd – OhadR

risposta

1

La mia soluzione è aggiungere questo file xsd al percorso assoluto, come ad esempio: c: /ehcache.xsd e punta a questo percorso in ehcache.xml. Spero che questo aiuti qualcuno che sta affrontando lo stesso problema.

Non vedo l'ora di scoprire un'altra soluzione.

Grazie.

7

di solito ho impostato xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd", ma questo non può funzionare in un ambiente offline.

9

Scarica ehcache.xsd, mettilo nella stessa cartella in cui si trova il tuo file di configurazione xml. modificare la testa xml come qui di seguito, notare la classpath prefisso:

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

questo funzionerà nell'ambiente di sviluppo e produzione.

+0

anche questo funziona senza prefisso 'classpath:', se nella stessa directory. thnks – msangel

Problemi correlati