没有互联网连接时,Spring schemaLocation失败


107

我正在使用Spring,并且application-context.xml具有以下定义:

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

.....

当我的互联网连接断开时,我无法通过tomcat或码头运行我的应用程序。

它给:

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

有什么建议如何解决吗?

Answers:


115

如果正确配置了名称空间且XSD文件位于类路径中,则无需在schemaLocation URL中使用classpath:协议。

Spring doc“ 注册处理程序和模式 ”显示了应如何完成。

在您的情况下,问题可能出在您的类路径上的spring-context jar不是2.1。这就是为什么将协议更改为classpath的原因:并将特定的2.1 XSD放在classpath中可以解决此问题。

从我所看到的,在spring- * jar中为主XSD定义了2个模式。一次使用版本解析模式URL,一次不使用版本解析模式URL。

例如,请参见spring-context-3.0.5.RELEASE.jar中spring.schemas内容的这一部分:

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

这意味着(在xsi:schemaLocation中)

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 

要么

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

将针对

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

在类路径中。

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

未定义,因此Spring将使用schemaLocation中定义的文字URL进行查找。


37
对于那些需要摘要的人:Spring在类路径中找不到模式。Spring核心JAR具有JAR中包含的schema-> filename映射。如果无法解决此问题,它将进入网络。
Alex

我已经这样声明:“ http:////www.springframework.org/schema/context http:///www.springframework.org/schema/context/spring-context-4.0.xsd”。我在Glassfish / domains / domain1 / lib中有4.0 jar。每当我部署该项目时,glassfish都是指互联网。这个问题特定于glassfish-4.0吗?(为格式添加了更多的“ /”)
Pragalathan M 2014年

我认为新的“注册处理程序和架构”链接应该在这里:docs.spring.io/spring/docs/current/spring-framework-reference/…–
Dirk

1
@Dirk-该链接似乎已断开
Stormcloud

2
@Stormcloud,是的,原始链接似乎回来了,我建议将其断开。这是最新的文档链接:docs.spring.io/spring/docs/current/spring-framework-reference/…–
Dirk

28

我解决了

<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是离线模式(没有互联网连接)的关键。我也复制了spring-context-2.1.xsd同一目录附近的application-context.xml文件


6
对于可能会遇到此问题的intellij用户。即使intellij无法识别schemalLocation内的类路径语法并将其突出显示为错误,该方法也可以工作。
Upgradingdave

非常感谢@DaveParoulek-错误使我失望,但这绝对可以解决问题。
扎克·约翰逊

18

这样的事情对我有用。

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"

1
是的,这行得通,因为xsd包装在弹簧罐中。因此,当您可以在罐子里使用xsd时,无需检查springframework.com :)
Somaiah Kumbera 2015年

这个解决方案对我有用,因为我在一个罐子里安装了弹簧,我的意思是作为一个外部罐子,没有互联网,您的解决方案对我来说效果很好,非常感谢上帝。
chiperortiz 2015年

@godlikeNoob我尝试了此操作,但再次给出错误“ cvc-elt.1:找不到元素'beans'的声明”。
卡米尼

6

万一有人通过相同的根到达这里-我遇到了这个问题,因为我正在构建一个包含所有依赖项(包括Spring JAR)的JAR。结果,Spring JAR的一些META-INF目录中的spring.schemas文件被覆盖。

我在这里找到了建议的解决方案:如何使用Maven创建基于Spring的可执行jar?


5

今天遇到了类似的问题。在我的情况下,除了springframework.org发生故障之外,阴影插件才是罪魁祸首。以下代码片段清除了所有问题:

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

有人


上面的代码片段需要在哪里添加?
卡米尼

4

您应该检查spring.handlersspring.schemas文件是否在类路径上并且内容正确。

可以使用来完成ClassLoader.getResource(..)。您可以在运行时环境中使用远程调试器运行该方法。Spring Reference B.5中描述了可扩展的XML创作设置注册处理程序和模式

通常,可以启动Spring时,文件应位于spring jar(springframework.jar / META-INF /)中,并且位于类路径中。


1
嗨,您的解决方案非常复杂;我不明白你是什么意思? jroller.com/marshbourdon/entry/using_spring_2_x_xml,我尝试了此方法,但没有用。有什么建议 ?在没有互联网连接的情况下,运行Web应用程序并不复杂。我对吗 ?谢谢。
Altug

1
春天应该开箱即用。您的类路径有误。我的回答仅包含一些提示来分析您的问题。
Thomas Jung

2

查找课程路径

如果您使用的是eclipse,请单击相应的jar文件。转到-> META-INF->打开文件spring.schemas

您将看到以下几行。

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

在=之后复制并配置如下所示的bean。

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


我在xml springframework.org/schema/rabbit classpath:org / springframework / amqp / rabbit / config / spring-rabbit-1.6.xsd中进行了此更改,但它说无法读取模式文档'classpath:org / springframework / amqp / rabbit / config / spring-rabbit-1.6.xsd'吗?任何建议
Lalit Mehra 16'July

1

您需要将架构位置添加到bean定义中,然后可以在类路径中找到它们,而不是通过网络获取它们。考虑到您的格式问题,我不是100%确定您还没有这样做。

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

我们这样做解决了问题:

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

请注意,我们的应用程序是Java独立脱机应用程序。


1

如果您使用eclipse进行开发,则可以从Eclipse的特定版本的marketplace安装Eclipse的STS插件。

现在,当您尝试在项目内部的文件夹(通常为资源)中创建新的配置文件时,这些选项将具有“ Spring文件夹”,并且您可以选择“ Spring Bean定义文件”选项“ Spring> Spring Bean Configuation File”。

选中此选项后,按照步骤进行操作时,它会要求您选择名称空间和特定版本:

因此,可以消除不存在jar或旧版本的可能性。

也会发布图像,但是我的声誉很低.. :(


1

问题出在您的应用程序中使用的JAR文件中。

我所做的工作是在SPRING-CORE,SPRING-BEANS,SPRING-CONTEXT和SPRING-TX的JAR内找到与我使用的版本相匹配的。在META-INF文件夹中,我将这些JAR中的所有spring.handlers和spring.schemas串联在一起。

我用一块石头杀死了两只鸟,我解决了模式问题,因此在离线模式下也可以正常工作。

PS我尝试了SHADE和变压器的Maven插件,但这没有用。


您是如何解决这个问题的,请您帮助我了解一下。我有需要
卡米尼

1

我有这个问题。为了后代,我的例外是:

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'

我解决了它,当我意识到的版本spring-beans在我的Maven的规定pom.xml进行4.1.x,从而意味着特定.xsd无法在类路径中。

因为我通常是在线的,所以屏蔽了很长时间,所以我认为离线已“破坏”了构建。但这确实与它无关。更新my pom.xml以指定的正确版本spring-beans,即4.2.x修复它。


1

当我使用spring-context版本4.0.6和spring-security版本4.1.0时,我遇到了同样的问题。

当在我的pom和security xml-> schemaLocation中将spring-security版本更改为4.0.4(因为无法使用4.0.6的spring-security)时,它将在没有Internet的情况下进行编译。

因此,您还可以通过以下方法解决此问题:

  • 将spring-security更改为比spring-context更高的版本或相同版本。

  • 将spring-context更改为比spring-security更高的版本或相同的版本。

(以任何方式在spring-security上使用spring-security进行更新或更新)


0

我想在此讨论中添加一些其他方面。在Windows OS中,我观察到,当包含架构的jar文件存储在目录中,该目录的路径包含空格字符时,例如以下示例

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

那么当您开发一些也可以脱机工作的独立应用程序时,以以下方式指定架构位置URL是不够的

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

我了解到,此类架构位置URL解析的结果是一个文件,其路径如下所示

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

当我从其他路径中不包含空格的其他目录启动应用程序时,架构位置解析正常。也许有人遇到过类似的问题?不过,我发现类路径协议在我的情况下可以正常工作

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

0

我也遇到过类似的问题。就我而言,我的决议是完全不同的。这是我的spring context xml文件:

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

我没有指定任何xsd版本,因为我希望spring在spring依赖项中使用最新的xsd版本。我的应用程序使用的spring版本是spring-beans-4.3.1.RELEASE.jar:4.3.1.RELEASE,当我将应用程序组装到jar中时,所有spring依赖项都存在于我的类路径中。但是,在我的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>.

经过一些困难的故障排除后,我发现问题是由于jar文件的META-INF文件夹内的index.list引起的。使用index.list文件,无法定位spring名称空间处理程序以正确解析spring应用程序上下文xml。您可以阅读有关此春季刊SPR-5705的更多信息

通过从我的maven-jar-plugin中删除索引,我设法解决了这个问题。希望这可以为有相同问题的人们节省一些时间。


0

只要确保相关的spring jar文件在您的运行时类路径中即可。在我的情况下,我们在运行时类路径中缺少spring-tx-4.3.4.RELEASE.jar。添加此jar后,问题已解决。


0

如果您的平台中没有Internet连接,并且您使用Eclipse,请执行以下步骤(它解决了我的问题)

  1. 查找确切的xsd文件(您可以从其jar中解压缩这些文件。例如,spring-beans-xyzRELEASE.jar中的spring-beans-xyxsd)
  2. 将这些xsd文件添加到Eclipse XML Catalog。(首选项-> XML-> XML目录,添加文件)
  3. 将这些文件位置添加到配置文件。(注意,写出文件的确切版本)

例:

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


-1

删除您最近在web-inf-> lib中添加的jar。例如jstl jars。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.