Spring schemaLocation échoue lorsqu'il n'y a pas de connexion Internet

107

J'utilise Spring et application-context.xmlj'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 Jetty.

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 pour y remédier?

Altug
la source

Réponses:

115

Il n'est pas nécessaire d'utiliser le classpath: protocol dans votre URL schemaLocation si l'espace de noms est configuré correctement et que le fichier XSD se trouve sur votre chemin de classe.

Spring doc " Enregistrer le gestionnaire et le schéma " montre comment procéder.

Dans votre cas, le problème était probablement que le fichier jar spring-context sur votre chemin de classe n'était pas 2.1. C'est pourquoi changer le protocole en classpath: et mettre le XSD 2.1 spécifique dans votre classpath a résolu le problème.

D'après ce que j'ai vu, il y a 2 schémas définis pour le XSD principal contenu dans un spring- * jar. Une fois pour résoudre l'URL du schéma avec la version et une fois sans elle.

À titre d'exemple, voyez 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, Spring le recherchera à l'aide de l'URL littérale définie dans schemaLocation.

David Resnick
la source
37
Pour ceux qui ont besoin d'un résumé: Spring ne trouve pas les schémas dans le classpath. Le JAR Spring Core a un mappage schéma-> nom de fichier qui est inclus dans le JAR. S'il ne peut pas résoudre ce problème, il ira sur le Web.
Alex
Je l'ai déclaré comme ceci "http:////www.springframework.org/schema/context http: ///www.springframework.org/schema/context/spring-context-4.0.xsd". J'ai le pot 4.0 dans le Glassfish / domaines / domain1 / lib. Chaque fois que je déploie le projet, glassfish fait référence à Internet. Ce problème est-il spécifique à Glassfish-4.0? (ajouté plus de '/' s pour le formatage)
Pragalathan M
Je pense que le nouveau lien «Enregistrement du gestionnaire et du schéma» devrait être ici: docs.spring.io/spring/docs/current/spring-framework-reference
Dirk
1
@Dirk - ce lien semble être rompu
Stormcloud
2
@Stormcloud, oui, le lien d'origine semble être de retour et celui que j'ai suggéré cassé. Voici le dernier lien vers le document: docs.spring.io/spring/docs/current/spring-framework-reference/…
Dirk
28

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.xsdest la clé pour travailler en mode hors ligne (pas de connexion Internet). J'ai également copié spring-context-2.1.xsdprès (même répertoire) le fichier application-context.xml

Altug
la source
6
Pour les utilisateurs intellij qui pourraient rencontrer cela. Cela fonctionne même si intellij ne reconnaît pas la syntaxe du chemin de classe dans schemalLocation et la met en évidence comme une erreur.
Upgradingdave
Un grand merci @DaveParoulek - l'erreur me bouleversait mais cela fait absolument l'affaire.
Zach Johnson
18

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"
divin
la source
1
Oui, cela fonctionne car le xsd est emballé dans le pot à ressort. Donc pas besoin de vérifier sur springframework.com quand vous pouvez utiliser le xsd à l'intérieur du pot :)
Somaiah Kumbera
Cette solution a fonctionné pour moi parce que j'avais les dépendances de ressort à l'intérieur d'un pot, je veux dire comme un pot externe et sans Internet, votre solution a très bien fonctionné pour moi, merci beaucoup à Dieu.
chiperortiz
@godlikeNoob J'ai essayé ceci mais cela donne à nouveau l'erreur "cvc-elt.1: Impossible de trouver la déclaration de l'élément 'beans'."
Kamini
6

Au cas où quelqu'un arriverait ici via la même racine que moi - j'ai rencontré ce problème parce que je construisais un seul JAR avec toutes les dépendances, y compris les JAR Spring. En conséquence, le fichier spring.schemas dans certains des répertoires META-INF des Spring JAR a été écrasé.

J'ai trouvé des solutions suggérées ici: Comment créer un fichier exécutable à base de ressorts avec maven?

Ed.
la source
5

Ran dans un problème similaire aujourd'hui. Dans mon cas, c'était le plugin de l'ombre qui était le coupable, en plus de springframework.org ayant une panne. L'extrait suivant a clarifié 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

Zackurey
la source
où l'extrait de code ci-dessus doit-il être ajouté?
Kamini
4

Vous devez vérifier que les fichiers spring.handlerset se spring.schemastrouvent sur le chemin de classe et 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 la création XML extensible est décrite dans la référence Spring B.5. Enregistrement du gestionnaire et du schéma .

Normalement, les fichiers doivent être dans le fichier spring jar (springframework.jar / META-INF /) et sur le chemin de classe lorsque Spring peut être lancé.

Thomas Jung
la source
1
salut, votre solution est très complexe; je ne comprends pas ce que tu veux dire? jroller.com/marshbourdon/entry/using_spring_2_x_xml , j'ai essayé cela mais cela ne fonctionne pas. Aucune suggestion ? Il ne pourrait pas être complexe de faire fonctionner une application Web sans connexion Internet. ai-je raison ? Merci.
Altug
1
Le printemps devrait fonctionner hors de la boîte. Quelque chose avec votre classpath est incorrect. Ma réponse ne contenait que quelques indices pour analyser votre problème.
Thomas Jung
2

Trouver le chemin de la classe

Si vous utilisez eclipse, cliquez sur le fichier jar correspondant. Aller à -> META-INF-> ouvrir le fichier spring.schemas

vous verrez les lignes quelque chose 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 les 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">

Santhosh Hirekerur
la source
J'ai fait ce changement dans le xml springframework.org/schema/rabbit classpath: org / springframework / amqp / rabbit / config / spring-rabbit-1.6.xsd mais il indique Échec de lecture du document de schéma 'classpath: org / springframework / amqp / lapin / config / spring-rabbit-1.6.xsd '? toute suggestion
Lalit Mehra
1

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 faites 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>
bmargulies
la source
1

Nous avons résolu le problème en faisant ceci:

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");

Veuillez noter que notre application est une application Java autonome hors ligne.

jyz
la source
1

Si vous utilisez eclipse pour votre développement, il est utile d'installer le plugin STS pour Eclipse [à partir du 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) à l'intérieur du projet, les options auront un "Spring Folder" et vous pouvez choisir une option "Spring Bean Definition File" Spring> Spring Bean Configuation File.

Lorsque cette option est sélectionnée, lorsque vous suivez les étapes, il vous demande de sélectionner les espaces de noms et les versions spécifiques:

Et ainsi la possibilité d'avoir un pot inexistant ou une ancienne version peut être éliminée.

J'aurais également publié des images, mais ma réputation est assez faible .. :(

Roshan Khandelwal
la source
1

Le problème réside dans les fichiers JAR que vous utilisez dans votre application.

Ce que j'ai fait, ce qui a fonctionné, a été d'entrer dans les JAR pour SPRING-CORE, SPRING-BEANS, SPRING-CONTEXT, SPRING-TX qui correspondent à la version que j'utilise. Dans le dossier META-INF, j'ai concaténé tous les spring.handlers et spring.schemas qui viennent dans ces JAR.

J'ai tué d'une pierre deux coups, j'ai résolu le problème des schémas donc cela fonctionne également correctement en mode hors ligne.

PS J'ai essayé le plugin maven pour SHADE et les transformateurs mais cela n'a pas fonctionné.

José Luis Mendez
la source
Comment avez-vous résolu ce problème, pouvez-vous s'il vous plaît m'aider à comprendre cela. Je suis dans le besoin.
Kamini
1

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é que la version de spring-beansspécifié dans mon Maven pom.xmlétait 4.1.x, ce qui signifie que le spécifique.xsd ne pouvait pas être trouvé sur le chemin de classe.

Cela a été masqué pendant longtemps parce que je suis normalement en ligne, donc je pensais qu'être hors ligne avait "cassé" la construction. Mais cela n'avait vraiment rien à voir avec ça. Mettre pom.xmlà jour my pour spécifier la version correcte de spring-beans, à savoir 4.2.x, l'a corrigé.

Stewart
la source
1

J'ai eu le même problème lorsque j'utilise la version Spring-context 4.0.6 et la version Spring-Security 4.1.0.

Lors du changement de la version de spring-security vers 4.0.4 (car 4.0.6 de spring-security n'est pas disponible) dans mon pom et security xml -> schemaLocation, il est compilé sans Internet.

Cela signifie que vous pouvez également résoudre ce problème en:

  • changement de spring-security vers une version plus ancienne ou identique à spring-context.

  • changement de spring-context vers une version plus récente ou identique à spring-security.

(de toute façon spring-context pour être plus récent ou même version de spring-security)

Yasitha Bandara
la source
0

Je voudrais 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'espace, par exemple 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 qui a un chemin comme 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 de caractère espace sur son chemin, la résolution de l'emplacement du schéma fonctionnait bien. Peut-être que quelqu'un a rencontré des problèmes similaires? Néanmoins, j'ai découvert que le protocole classpath fonctionne très bien dans mon cas

<beans
 xsi:schemaLocation="
   http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-2.0.xsd"
    />
Damiano
la source
0

J'avais également rencontré ce problème similaire. 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 xsd car je veux que spring utilise la dernière version xsd dans les dépendances de spring. La version Spring que mon application a utilisée était spring-beans-4.3.1.RELEASE.jar: 4.3.1.RELEASE et quand j'assemble mon application dans jar, toutes les dépendances spring 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 un dépannage difficile, j'ai trouvé que le problème était dû à l' index.list dans le dossier META-INF de mon fichier jar. Avec le fichier index.list , les gestionnaires d'espaces de noms Spring ne peuvent pas être localisés pour analyser correctement le xml de contexte d'application Spring. Vous pouvez en savoir plus sur ce numéro de printemps SPR-5705

En supprimant l'indexation de mon maven-jar-plugin , j'arrive à résoudre le problème. J'espère que cela permettra aux personnes ayant le même problème de gagner du temps.

Andy Ng
la source
0

Assurez-vous simplement que le fichier jar spring correspondant se trouve dans votre chemin de classe d'exécution. Dans mon cas, il nous manquait spring-tx-4.3.4.RELEASE.jar dans le chemin des classes d'exécution. Après avoir ajouté ce fichier jar, le problème a été résolu.

Hari
la source
0

S'il n'y a pas de connexion Internet sur votre plateforme et que vous utilisez Eclipse, suivez ces étapes (cela résout mon problème)

  1. Trouvez les fichiers xsd exacts (vous pouvez décompresser ces fichiers à partir de leurs fichiers jar. Par exemple, spring-beans-xyxsd dans spring-beans-xyzRELEASE.jar)
  2. Ajoutez ces fichiers xsd au catalogue XML Eclipse. (Préférences-> XML-> Catalogue XML, Ajouter des fichiers)
  3. Ajoutez l'emplacement de ces fichiers au fichier de configuration. (Attention, écrivez la version exacte du fichier)

Exemple:

xsi: schemaLocation = " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-xyxsd "

gbii
la source
-1

Supprimez les fichiers jars que vous avez ajoutés récemment dans le fichier web-inf -> lib. par exemple jstl jars.

rahul
la source