匹配的通配符是严格的,但是对元素的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文件时):
你的项目必须有Spring Nature(例如右键点击Maven项目):
那么spring.xml
默认使用Spring Config Editor打开
而这个编辑器有名称空间选项卡
这使您可以指定名称空间:
请注意,它依赖于依赖项(使用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">