Spring AOP schema找不到报错 原

Posted Sharpest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring AOP schema找不到报错 原相关的知识,希望对你有一定的参考价值。

转自:https://my.oschina.net/zetaplusae/blog/144821

使用jersey+spring构建RESTful服务,并将应用部署在不能连接外网的服务器上。部署时,报错信息如下,

 

WARNING: Ignored XML validation warning 
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document ‘http://www.springframework.org/schema/aop/spring-aop-3.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) 
...

 

 

 

SEVERE: Context initialization failed 
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 16 in XML document from class path resource [cn/edu/seu/herald/ws/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘aop:aspectj-autoproxy‘. 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
...

 

也就是,找不到如下的元素的声明

 

<aop:aspectj-autoproxy />

 

解决:

通过去除spring配置文件中schemaLocation的版本号(如2.0,3.0),让spring自己匹配版本。通常情况下,都是因为所依赖的spring版本号低于配置文件中指定的版本号。修改后如下

 

<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" 
       xmlns:aop="http://www.springframework.org/schema/aop" 
       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 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd">

 

如果希望保留spring配置文件中的schema版本号,而所依赖spring版本号不小于配置文件对应版本号,那么问题很有可能出在依赖其他库时没有去除这些库对于spring的依赖(通常它们会依赖于低版本的spring,从而导致整个项目的spring版本出问题)。可以通过在pom.xml中,对于这些库,剔除spring依赖。例如我使用的jersey-spring,则修改pom.xml后如下,

 

<dependency> 
            <groupId>com.sun.jersey.contribs</groupId> 
            <artifactId>jersey-spring</artifactId> 
            <version>1.17.1</version> 
            <exclusions> 
                <exclusion> 
                    <groupId>org.springframework</groupId> 
                    <artifactId>spring</artifactId> 
                </exclusion> 
                <exclusion> 
                    <groupId>org.springframework</groupId> 
                    <artifactId>spring-core</artifactId> 
                </exclusion> 
                <exclusion> 
                    <groupId>org.springframework</groupId> 
                    <artifactId>spring-web</artifactId> 
                </exclusion> 
                <exclusion> 
                    <groupId>org.springframework</groupId> 
                    <artifactId>spring-beans</artifactId> 
                </exclusion> 
                <exclusion> 
                    <groupId>org.springframework</groupId> 
                    <artifactId>spring-context</artifactId> 
                </exclusion> 
                <exclusion> 
                    <groupId>org.springframework</groupId> 
                    <artifactId>spring-aop</artifactId> 
                </exclusion> 
            </exclusions> 
        </dependency>

 

以上是关于Spring AOP schema找不到报错 原的主要内容,如果未能解决你的问题,请参考以下文章

spring aop 运行出现 错误: 找不到或无法加载主类 org.apache.log4j.net.JMSSink

找不到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/webflow]

Spring繁华的AOP王国----第四讲

spring11----基于Schema的AOP

解决eclipse spring配置报错:cvc-elt.1: Cannot find the declaration of element

spring aop 基于schema的aop