J'utilise Spring et in application-context.xml
J'ai les définitions suivantes:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.xsd"
>
.....
Lorsque ma connexion Internet est perdue, je ne peux pas exécuter mon application via Tomcat ou une jetée.
Il donne:
[main] WARN org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Ignored XML validation warning
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document '/spring-beans-2.0.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.traversers.XSDHandler.reportSchemaErr(XSDHandler.Java:2541)
at com.Sun.org.Apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaWarning(XSDHandler.Java:2532)
at com.Sun.org.Apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.Java:1836)
at com.Sun.org.Apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.Java:531)
at com.Sun.org.Apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.Java:552)
at com.Sun.org.Apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.Java:2408)
at com.Sun.org.Apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.Java:1753)
at com.Sun.org.Apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.Java:685)
at com.Sun.org.Apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.Java:400)
at com.Sun.org.Apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.Java:626)
at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.Java:3095)
at com.Sun.org.Apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.Java:921)
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:510)
at com.Sun.org.Apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.Java:807)
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:107)
at com.Sun.org.Apache.xerces.internal.parsers.DOMParser.parse(DOMParser.Java:225)
at com.Sun.org.Apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.Java:283)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.Java:75)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.Java:396)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.Java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.Java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.Java:149)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.Java:124)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.Java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.Java:123)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.Java:423)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:353)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.Java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:45)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.Java:548)
at org.mortbay.jetty.servlet.Context.startContext(Context.Java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.Java:1250)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.Java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.Java:467)
at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.Java:115)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.Java:152)
at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.Java:156)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.Java:152)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.Java:130)
at org.mortbay.jetty.Server.doStart(Server.Java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.Java:132)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.Java:441)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.Java:383)
at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.Java:210)
at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.Java:184)
at org.Apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.Java:483)
at org.Apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.Java:678)
at org.Apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.Java:553)
at org.Apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.Java:523)
at org.Apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.Java:371)
at org.Apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.Java:332)
at org.Apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.Java:181)
at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:356)
at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:137)
at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:356)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.Java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.Java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.Java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.Java:375)
2009-11-13 15:31:25,675 [main] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 23 in XML document from class path resource [application-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.Java:404)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.Java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinit........
Des suggestions comment résoudre ce problème?
Il n'est pas nécessaire d'utiliser le classpath: protocol dans votre URL schemaLocation si l'espace-noms est configuré correctement et que le fichier XSD se trouve sur votre classpath.
La documentation de printemps " Enregistrement du gestionnaire et du schéma " indique comment procéder.
Dans votre cas, le problème était probablement que le fichier jar-contexte de printemps sur votre chemin de classe n’était pas 2.1. C’est la raison pour laquelle changer le protocole en classpath: et placer le XSD 2.1 spécifique dans votre classpath corrigeait le problème.
D'après ce que j'ai vu, il existe 2 schémas définis pour le fichier XSD principal contenu dans un fichier jar. Une fois pour résoudre l'URL du schéma avec la version et une fois sans elle.
A titre d'exemple, voir cette partie du contenu de spring.schemas dans spring-context-3.0.5.RELEASE.jar:
http\://www.springframework.org/schema/context/spring-context-2.5.xsd=org/springframework/context/config/spring-context-2.5.xsd
http\://www.springframework.org/schema/context/spring-context-3.0.xsd=org/springframework/context/config/spring-context-3.0.xsd
http\://www.springframework.org/schema/context/spring-context.xsd=org/springframework/context/config/spring-context-3.0.xsd
Cela signifie que (dans xsi: schemaLocation)
http://www.springframework.org/schema/context/spring-context-2.5.xsd
sera validé contre
org/springframework/context/config/spring-context-2.5.xsd
dans le classpath.
http://www.springframework.org/schema/context/spring-context-3.0.xsd
ou
http://www.springframework.org/schema/context/spring-context.xsd
sera validé contre
org/springframework/context/config/spring-context-3.0.xsd
dans le classpath.
http://www.springframework.org/schema/context/spring-context-2.1.xsd
n'est pas défini, donc Spring le recherchera à l'aide de l'URL littérale définie dans schemaLocation.
Je l'ai résolu
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/context
classpath:spring-context-2.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.xsd"
>
classpath:spring-context-2.1.xsd
est la clé pour travailler en mode hors connexion (pas de connexion Internet). Aussi j'ai copié spring-context-2.1.xsd
près du même répertoire que le fichier application-context.xml
Quelque chose comme ça a fonctionné pour moi.
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
classpath:org/springframework/beans/factory/xml/spring-context-3.0.xsd"
Au cas où quelqu'un arriverait ici avec la même racine que moi - j'ai rencontré ce problème parce que je construisais un seul fichier JAR avec toutes les dépendances, y compris les fichiers JAR de Spring. En conséquence, le fichier spring.schemas de certains des répertoires META-INF des fichiers JAR de Spring a été écrasé.
J'ai trouvé des solutions suggérées ici: Comment créer un pot exécutable à base de ressort avec maven?
Couru dans un problème similaire aujourd'hui. Dans mon cas, c’est le plug-in de coloris qui a été mis en cause, en plus de springframework.org en panne. L'extrait suivant clarifie les choses:
<transformer implementation="org.Apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.Apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
HTH quelqu'un
Vous devriez vérifier que les fichiers spring.handlers
Et spring.schemas
Se trouvent sur le chemin d'accès aux classes et qu'ils ont le bon contenu.
Cela peut être fait avec ClassLoader.getResource(..)
. Vous pouvez exécuter la méthode avec un débogueur distant dans l'environnement d'exécution. La configuration de création XML extensible est décrite dans Spring Reference B.5. Enregistrement du gestionnaire et du schéma .
Normalement, les fichiers doivent se trouver dans le jar Spring (springframework.jar/META-INF /) et sur le chemin de classe lorsque Spring peut être lancé.
Si vous utilisez Eclipse, cliquez sur le fichier jar correspondant. Goto -> META-INF-> ouvrir le fichier spring.schemas
vous verrez les lignes comme ci-dessous.
http://www.springframework.org/schema/context/spring-context.xsd=org/springframework/context/config/spring-context-3.1.xsd
copier après = et configurer des beans comme ci-dessous.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/rabbit classpath:org/springframework/amqp/rabbit/config/spring-rabbit-1.1.xsd http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.1.xsd http://www.springframework.org/schema/context classpath:org/springframework/context/config/spring-context-3.1.xsd http://www.springframework.org/schema/util classpath:org/springframework/beans/factory/xml/spring-util-3.1.xsd">
J'ai eu ce problème. Pour la postérité, mon exception était:
org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 117;
schema_reference.4: Failed to read schema document
'http://www.springframework.org/schema/beans/spring-beans-4.2.xsd'
Je l'ai résolu quand j'ai réalisé la version de spring-beans
spécifié dans mon Maven pom.xml
était 4.1.x
, ce qui signifie donc le spécifique .xsd
n'a pas pu être trouvé sur le classpath.
Cela a été masqué pendant longtemps parce que je suis normalement en ligne, alors je pensais qu'être hors ligne avait "cassé" la construction. Mais cela n’a vraiment rien à voir avec cela. Mise à jour de mon pom.xml
pour spécifier la version correcte de spring-beans
, à savoir 4.2.x
, corrigé.
Nous avons résolu le problème en procédant comme suit:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(false); // This avoid to search schema online
factory.setAttribute("http://Java.Sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
factory.setAttribute("http://Java.Sun.com/xml/jaxp/properties/schemaSource", "TransactionMessage_v1.0.xsd");
S'il vous plaît noter que notre application est une Java application autonome en mode hors connexion.
Vous devez ajouter des emplacements de schéma à votre définition de bean, puis ils peuvent être trouvés dans classpath au lieu d'être récupérés sur le réseau. Compte tenu de vos problèmes de formatage, je ne suis pas sûr à 100% que vous ne le fassiez pas déjà.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- empty: the beans we use are in the base class's context. -->
</beans>
Le problème réside dans les fichiers JAR que vous utilisez dans votre application.
Ce que j'ai fait, ce qui a bien fonctionné, a été d'entrer dans les fichiers JAR pour SPRING-CORE, SPRING-BEANS, SPRING-CONTEXT, SPRING-TX correspondant à la version que j'utilise. Dans le dossier META-INF, j'ai concaténé tous les Spring.handlers et spring.schemas qui entrent dans ces fichiers JAR.
J'ai tué deux oiseaux avec une pierre, j'ai résolu le problème des schémas afin que cela fonctionne également correctement en mode déconnecté.
P.S. J'ai essayé le plugin maven pour SHADE et les transformateurs mais cela n'a pas fonctionné.
Si vous utilisez Eclipse pour votre développement, il est utile d’installer le plug-in STS pour Eclipse [à partir de marketPlace pour la version spécifique d’Eclipse.
Maintenant, lorsque vous essayez de créer un nouveau fichier de configuration dans un dossier (normalement des ressources) dans le projet, les options ont un "Dossier Spring" et vous pouvez choisir un "Fichier de définition du bean Spring", Spring> Fichier de configuration du bean Spring.
Lorsque cette option est sélectionnée, lorsque vous suivez les étapes, il vous est demandé de sélectionner des espaces de noms et des versions spécifiques:
Et ainsi la possibilité d'avoir un pot inexistant ou une ancienne version peut être éliminée.
J'aurais posté des images aussi, mais ma réputation est plutôt basse .. :(
Assurez-vous simplement que le fichier jar du printemps approprié se trouve dans votre chemin d'accès aux classes d'exécution. Dans mon cas, spring-tx-4.3.4.RELEASE.jar était absent du classpath d'exécution. Après avoir ajouté ce pot, le problème a été résolu.
J'avais rencontré ce problème similaire aussi. Dans mon cas, ma résolution est assez différente. Voici mon fichier XML de contexte de printemps:
...
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
...
Je ne spécifie aucune version de xsd car je souhaite que spring utilise la dernière version de xsd à l'intérieur des dépendances de spring. La version de printemps que mon application utilisait était spring-beans-4.3.1.RELEASE.jar: 4.3.1.RELEASE et lorsque j'assemble mon application dans jar, toutes les dépendances de printemps existent dans mon classpath. Cependant, j'ai reçu l'erreur suivante lors du démarrage de mon contexte d'application Spring:
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans.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>.
Après quelques difficultés de dépannage, j'ai constaté que le problème était dû à index.list dans le dossier META-INF de mon fichier jar. Avec le fichier index.list, les gestionnaires de l'espace de noms Spring ne peuvent pas être localisés pour analyser correctement le contexte XML de l'application Spring. Vous pouvez en savoir plus sur ce numéro de printemps SPR-5705
En supprimant l'indexation de mon maven-jar-plugin, je parviens à résoudre le problème. J'espère que cela permettra de gagner du temps pour les personnes ayant le même problème.
J'ai eu le même problème lorsque j'utilise la version 4.0.6 de Spring-Context et la version 4.1.0 de Spring-Security.
Lors du passage à la version 4.0.4 de spring-security (car 4.0.6 de spring-security n'est pas disponible) dans mon pom et xml de sécurité -> schemaLocation, il est compilé sans Internet.
Cela signifie donc que vous pouvez également résoudre ce problème en:
changer la sécurité de printemps à une version plus ancienne ou identique à celle de printemps-contexte.
changer le contexte de printemps en une version plus récente ou identique à celle de printemps.
(de toute façon printemps-contexte d'être plus récent ou la même version de printemps-sécurité)
S'il n'y a pas de connexion Internet sur votre plate-forme et que vous utilisez Eclipse, suivez ces étapes (cela résout mon problème)
Exemple:
xsi: schemaLocation = " http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-xyxsd "
J'aimerais ajouter un aspect supplémentaire à cette discussion. Dans Windows OS, j'ai observé que lorsqu'un fichier JAR contenant un schéma est stocké dans un répertoire dont le chemin contient un caractère d'espacement, comme dans l'exemple suivant
"c:\Program Files\myApp\spring-beans-4.0.2.RELEASE.jar"
puis spécifier l'URL de l'emplacement du schéma de la manière suivante n'est pas suffisant lorsque vous développez une application autonome qui devrait également fonctionner hors ligne
<beans
xsi:schemaLocation="
http://www.springframework.org/schema/beans org/springframework/beans/factory/xml/spring-beans-2.0.xsd"
/>
J'ai appris que le résultat d'une telle résolution d'URL d'emplacement de schéma est un fichier dont le chemin est le suivant:
"c:\Program%20Files\myApp\spring-beans-4.0.2.RELEASE.jar"
Lorsque j'ai démarré mon application à partir d'un autre répertoire qui ne contenait pas d'espace dans son chemin, la résolution de l'emplacement du schéma fonctionnait correctement. Peut-être que quelqu'un a rencontré des problèmes similaires? Néanmoins, j'ai découvert que le protocole de classpath fonctionne bien dans mon cas.
<beans
xsi:schemaLocation="
http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-2.0.xsd"
/>