为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

皈依舞 2019-10-05 14:15:52

我正在使用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)

有什么建议如何解决吗?



查看完整描述

3 回答

?
MM们

如果正确配置了名称空间且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进行查找。


查看完整回答
反对 回复 2019-10-05
?
www说

我解决了


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


查看完整回答
反对 回复 2019-10-05
?
手掌心

这样的事情对我有用。


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"


查看完整回答
反对 回复 2019-10-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信