匹配的通配符是严格的,但是对元素的context:component-scan没有声明

我在尝试第一个弹簧项目时遇到以下错误:

Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'context:component-scan 

这是applicationContext.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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:component-scan base-package="com.xyz" /> </beans> 

什么是导致错误?

您尚未指定上下文命名空间的模式位置,这是此特定错误的原因:

 <beans ..... 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.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

这个模式位置的path是错误的:

 http://www.springframework.org/schema/beans 

正确的path应以/结尾:

 http://www.springframework.org/schema/beans/ 

我遇到了问题

 Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'security:http' 

对我来说,我不得不将spring-security-config jar添加到classpath中

http://docs.spring.io/spring-security/site/docs/3.1.x/reference/ns-config.html

编辑:

这可能是你在你的pom中有正确的依赖。

但…

如果你正在使用多个spring依赖关系并将其组合成一个jar,那么META-INF/spring.schemas可能被另一个spring依赖项的spring.schemas所覆盖。

(从你assembly的jar中提取这个文件,你就会明白了)

Spring模式只是一堆看起来像这样的行:

 http\://www.springframework.org/schema/p=org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd 

但是如果另一个依赖项覆盖那个文件,那么这个定义将会从http检索,如果你有防火墙/代理服务器,它将无法获得它。

一个解决scheme是将spring.schemas和spring.handlers附加到一个文件中。

检查:

想法,以避免spring.handlers / spring.schemas合并在一个jar中的多个弹簧依赖关系时被覆盖

如果包含所需的XSD的jar文件未包含在已部署的类path中,则也会导致此错误。

确保您的容器中的依赖关系可用。

如果使用STS ,则可以在Eclipse中将configuration文件标记为“Beanconfiguration”文件(您可以指定在创build时或右键单击XML文件时):

弹出工具>添加为Bean配置

你的项目必须有Spring Nature(例如右键点击Maven项目):

弹簧工具>添加Spring项目自然

那么spring.xml默认使用Spring Config Editor打开

打开方式>弹簧配置编辑器

而这个编辑器有名称空间选项卡

Spring配置编辑器 - 命名空间选项卡

这使您可以指定名称空间:

Spring配置编辑器 - 命名空间示例

请注意,它依赖于依赖项(使用maven项目),所以如果spring-tx没有在maven的pom.xml中定义,选项不存在,这会阻止你拥有匹配的通配符是严格的,但没有声明可以find元素'tx:注释驱动''上下文:组件扫描'问题…

已经太晚了,但对别人可能有用

匹配的通配符是严格的,但是对元素的context:component-scan没有声明

这意味着你错过了一些声明或XML中没有find必需的声明

在我的情况下,我忘了添加follwoing

添加此问题后,问题消失

 <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 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-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">