使用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. ... ”