webentwicklung-frage-antwort-db.com.de

Spring schemaLocation schlägt fehl, wenn keine Internetverbindung besteht

Ich benutze Spring und in application-context.xml Ich habe folgende Definitionen:

<?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"
   >

.....

Wenn meine Internetverbindung unterbrochen ist, kann ich meine Anwendung nicht über Tomcat oder einen Steg ausführen.

Es gibt:

[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........

Irgendwelche Vorschläge, wie man es repariert?

99
Altug

Es ist nicht erforderlich, das Protokoll classpath: in Ihrer schemaLocation-URL zu verwenden, wenn der Namespace richtig konfiguriert ist und sich die XSD-Datei in Ihrem Klassenpfad befindet.

Spring doc " Registrieren des Handlers und des Schemas " zeigt, wie es gemacht werden soll.

In Ihrem Fall bestand das Problem wahrscheinlich darin, dass das Spring-Context-Glas auf Ihrem Klassenpfad nicht 2.1 war. Aus diesem Grund haben Sie das Protokoll in classpath geändert: Das Problem wurde behoben, indem Sie die spezifische 2.1-XSD in Ihren classpath eingefügt haben.

Nach dem, was ich gesehen habe, gibt es 2 Schemata für die Haupt-XSD, die in einem spring- * jar enthalten sind. Einmal, um die Schema-URL mit der Version aufzulösen, und einmal ohne.

Als Beispiel sehen Sie diesen Teil des Inhalts von spring.schemas in 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

Dies bedeutet, dass (in xsi: schemaLocation)

http://www.springframework.org/schema/context/spring-context-2.5.xsd 

wird validiert gegen

org/springframework/context/config/spring-context-2.5.xsd 

im Klassenpfad.

http://www.springframework.org/schema/context/spring-context-3.0.xsd 

oder

http://www.springframework.org/schema/context/spring-context.xsd

wird validiert gegen

org/springframework/context/config/spring-context-3.0.xsd 

im Klassenpfad.

http://www.springframework.org/schema/context/spring-context-2.1.xsd

ist nicht definiert, daher sucht Spring unter Verwendung der in schemaLocation definierten Literal-URL danach.

110
David Resnick

Ich habe es gelöst

<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 ist der Schlüssel für den Offline-Modus (keine Internetverbindung). Auch ich kopierte spring-context-2.1.xsd in der Nähe der Datei application-context.xml (im selben Verzeichnis)

28
Altug

So etwas hat bei mir funktioniert.

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"
17
godlikeNoob

Für den Fall, dass jemand über das gleiche Stammverzeichnis wie ich hier ankommt, habe ich dieses Problem gelöst, weil ich eine einzelne JAR mit allen Abhängigkeiten erstellt habe, einschließlich der Spring-JARs. Als Ergebnis der spring.schemas -Datei in einigen der META-INF Verzeichnisse von Spring JARs wurden überschrieben.

Ich habe hier Lösungsvorschläge gefunden: Wie erstelle ich eine ausführbare JAR-Datei auf Spring-Basis mit maven?

6
Ed .

Ist heute auf ein ähnliches Problem gestoßen. In meinem Fall war das Schatten-Plugin der Schuldige, zusätzlich zu springframework.org, das einen Ausfall hatte. Das folgende Snippet hat die Dinge geklärt:

<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 jemand

5
zackurey

Sie sollten überprüfen, ob sich die Dateien spring.handlers Und spring.schemas Im Klassenpfad befinden und den richtigen Inhalt haben.

Dies kann mit ClassLoader.getResource(..) geschehen. Sie können die Methode mit einem Remote-Debugger in der Laufzeitumgebung ausführen. Das Setup für das erweiterbare XML-Authoring ist in Spring Reference B.5. Registrieren des Handlers und des Schemas beschrieben.

Normalerweise sollten sich die Dateien im Spring-Jar (springframework.jar/META-INF /) und im Klassenpfad befinden, wenn Spring initiiert werden kann.

4
Thomas Jung

Finde den Klassenpfad

Wenn Sie Eclipse verwenden, klicken Sie auf die entsprechende JAR-Datei. Gehe zu -> META-INF-> Datei spring.schemas öffnen

sie werden die Zeilen wie folgt sehen.

http://www.springframework.org/schema/context/spring-context.xsd=org/springframework/context/config/spring-context-3.1.xsd

kopieren Sie after = und konfigurieren Sie Beans wie folgt.

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

2

Ich hatte dieses Problem. Für die Nachwelt war meine Ausnahme:

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'

Ich habe es gelöst, als mir klar wurde, dass die Version von spring-beans, die in meinem Maven pom.xml angegeben ist, 4.1.x ist, was bedeutet, dass der spezifische .xsd nicht kann auf dem Klassenweg zu finden.

Dies wurde für eine lange Zeit maskiert, da ich normalerweise online bin, und ich dachte, Offline zu sein hätte den Build "gebrochen". Aber es hatte wirklich nichts damit zu tun. Das Aktualisieren meines pom.xml, um die richtige Version von spring-beans anzugeben, nämlich 4.2.x, hat es behoben.

1
Stewart

Wir haben das Problem folgendermaßen gelöst:

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

Bitte beachten Sie, dass unsere Anwendung eine Java Standalone-Offline-App ist.

1
jyz

Sie müssen Ihrer Bean-Definition Schema-Speicherorte hinzufügen, damit diese im Klassenpfad gefunden werden können, anstatt über das Netz abgerufen zu werden. Aufgrund Ihrer Formatierungsprobleme bin ich mir nicht zu 100% sicher, dass Sie dies nicht bereits tun.

<?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>
1
bmargulies

Das Problem liegt in den JAR-Dateien, die Sie in Ihrer Anwendung verwenden.

Was ich getan habe, was funktioniert hat, war, in die JARs für SPRING-CORE, SPRING-BEANS, SPRING-CONTEXT und SPRING-TX zu gelangen, die der von mir verwendeten Version entsprechen. Im Ordner META-INF habe ich alle spring.handler und spring.schemas verkettet, die in diesen JARs enthalten sind.

Ich habe zwei Fliegen mit einer Klappe geschlagen und das Problem der Schemata behoben, sodass dies auch im Offline-Modus korrekt funktioniert.

P.S. Ich habe das Maven-Plugin für SHADE und die Transformers ausprobiert, aber das hat nicht funktioniert.

1

Wenn Sie Eclipse für Ihre Entwicklung verwenden, ist es hilfreich, wenn Sie das STS-Plug-in für Eclipse [vom marketPlace für die spezifische Version von Eclipse] installieren.

Wenn Sie versuchen, eine neue Konfigurationsdatei in einem Ordner (normalerweise Ressourcen) innerhalb des Projekts zu erstellen, verfügen die Optionen über einen "Spring-Ordner" und Sie können die Option "Spring-Bean-Definitionsdatei" Spring> Spring-Bean-Konfigurationsdatei auswählen.

Wenn diese Option ausgewählt ist, werden Sie beim Ausführen der Schritte aufgefordert, Namespaces und die spezifischen Versionen auszuwählen:

Und so kann die Möglichkeit eines nicht existierenden Glases oder einer alten Version beseitigt werden.

Hätte auch Bilder gepostet, aber mein Ruf ist ziemlich schlecht .. :(

1

Stellen Sie einfach sicher, dass sich die entsprechende Spring-JAR-Datei in Ihrem Laufzeitklassenpfad befindet. In meinem Fall fehlte spring-tx-4.3.4.RELEASE.jar im Laufzeitklassenpfad. Nach dem Hinzufügen dieses Glases wurde das Problem behoben.

0
Hari

Ich war auch auf dieses ähnliche Problem gestoßen. In meinem Fall ist meine Auflösung ganz anders. Hier ist meine Spring Context XML-Datei:

...
<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">
...

Ich gebe keine xsd-Version an, da spring die neueste xsd-Version in den Abhängigkeiten von spring verwenden soll. Die von mir verwendete Frühlingsversion war spring-beans-4.3.1.RELEASE.jar: 4.3.1.RELEASE und als ich meine Anwendung in jar einbaute , alle Frühlingsabhängigkeiten existieren in meinem Klassenpfad. Beim Start meines Spring-Anwendungskontexts ist jedoch folgender Fehler aufgetreten:

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>.

Nach einiger Zeit der Fehlerbehebung stellte ich fest, dass das Problem an der index.list im Ordner META-INF meiner JAR-Datei liegt. Mit der Datei index.list können Spring-Namespace-Handler nicht gefunden werden, um den Spring-Anwendungskontext-XML-Code korrekt zu analysieren. Lesen Sie mehr über diese Frühjahrsausgabe SPR-5705

Indem ich die Indizierung von meinem maven-jar-plugin entferne, schaffe ich es, das Problem zu beheben. Hoffe, dass dies einige Male für Menschen mit dem gleichen Problem retten wird.

0
Andy Ng

Ich hatte das gleiche Problem, wenn ich Spring-Context-Version 4.0.6 und Spring-Security-Version 4.1.0 verwende.

Wenn ich die Version von spring-security in meinem pom und security xml -> schemaLocation auf 4.0.4 ändere (da 4.0.6 von spring-security nicht verfügbar ist), wird sie ohne Internet kompiliert.

Das heißt, Sie können dies auch lösen, indem Sie:

  • ändern der Federsicherheit auf eine ältere oder dieselbe Version als den Federkontext.

  • ändern des Frühlingskontexts auf eine neuere oder dieselbe Version als Frühlingssicherheit.

(in irgendeiner Weise sollte spring-context neuer sein oder dieselbe Version wie spring-security)

0
Yasitha Bandara

Wenn auf Ihrer Plattform keine Internetverbindung besteht und Sie Eclipse verwenden, befolgen Sie diese Schritte (dies löst mein Problem).

  1. Finden Sie die exakten xsd-Dateien (Sie können diese Dateien aus ihren Jars entpacken. Beispiel: spring-beans-x.y.xsd in spring-beans-x.y.z.RELEASE.jar)
  2. Fügen Sie diese xsd-Dateien zum Eclipse XML-Katalog hinzu. (Einstellungen-> XML-> XML-Katalog, Dateien hinzufügen)
  3. Fügen Sie den Speicherort dieser Dateien zur Konfigurationsdatei hinzu. (Seien Sie vorsichtig, schreiben Sie die genaue Version der Datei)

Beispiel:

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

0
gbii

Ich möchte einen zusätzlichen Aspekt dieser Diskussion hinzufügen. Unter Windows habe ich festgestellt, dass eine JAR-Datei, die ein Schema enthält, in einem Verzeichnis gespeichert ist, dessen Pfad ein Leerzeichen enthält, wie im folgenden Beispiel

"c:\Program Files\myApp\spring-beans-4.0.2.RELEASE.jar"

wenn Sie eine eigenständige Anwendung entwickeln, die auch offline funktionieren soll, reicht es nicht aus, die URL des Schemastandorts wie folgt anzugeben

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

Ich habe erfahren, dass das Ergebnis einer solchen Auflösung der Schemastandort-URL eine Datei ist, die einen Pfad wie den folgenden hat

"c:\Program%20Files\myApp\spring-beans-4.0.2.RELEASE.jar"

Als ich meine Anwendung von einem anderen Verzeichnis aus startete, dessen Pfad kein Leerzeichen enthielt, funktionierte die Schema-Standortauflösung einwandfrei. Vielleicht war jemand mit ähnlichen Problemen konfrontiert? Trotzdem habe ich festgestellt, dass das classpath-Protokoll in meinem Fall gut funktioniert

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