使用maven构建spring security的一个demo时出现了这个问题,网上找了很长时间,很多答案都不适合自己。
1.一开始根据提示以为是xsd和jar包的版本冲突问题,参考了这篇文章 http://www.baeldung.com/unable-to-locate-spring-namespacehandler-for-xml-schema-namespace,
修改xsd和jar包版本一致,但是还是报同样的问题。
2.后来找到一些答案可能是META-INF文件中spring.schemas,spring.handlers的配置信息有问题,spring.schemas配置了xml文件中的命名空间引用的约束文件所在的路径,
当这个配置信息不存在或者错误时,就找不到约束文件了。参考了http://www.colabug.com/thread-1060640-1-1.html
3.继续查找spring.schemas的配置信息,发现spring bean 和spring security都带有这种spring.schemas配置,所以觉得可能是互相覆盖了的原因。
参考了http://www.bubuko.com/infodetail-924825.html
4.最后参考http://cloverprince.iteye.com/blog/1011382 文章,发现spring-security的这个spring.schemas并不在core和web里,而是在另外一个spring-security-config.jar
问题终于找到了,我没有配置spring-security-config.jar,于是在maven中添加了这个jar包,重启,解决问题。
spring-security的reference, 2.1节,提到:
“To start using the security namespace in your application context, you first need to make sure that the spring-security-config jar is on your classpath. ... ”