【发布时间】:2026-02-15 08:55:01
【问题描述】:
我在处理 spring 配置文件时注意到了这种行为。
我的配置文件中有 2 个错误:
- 一种语法(格式良好)错误,例如拼写错误的结束标签(尝试使用“html”标签)
- “命名空间”(验证)错误(尝试了错误的安全命名空间路径)
由于 xml 无效,我认为运行时环境返回的第一个错误是验证错误。
这不是真的(spring 3.0.2 和 security 3.0.2)。
它首先返回:
匹配的通配符是严格的,但是找不到元素'http'的声明
然后,当我修复第一个错误时,我得到了(我所期望的第一个):
元素类型“http”必须以匹配的结束标签“”结束
那么关于语法检查可以说什么呢?似乎语法检查的过程不是作为初步步骤执行的,而是检查和验证是“交错的”。首先检查每个标签,然后进行验证。这样对吗?它是否依赖于实现?
PS:我的错误 xml(请注意架构位置和 http 结束标记中的两个错误):
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsdFIRSTERROR">
<http>
<form-login />
<http-basic />
<logout />
<intercept-url pattern="/**" access="ROLE_USER" />
</SECONDERRORhttp>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="myuser" password="mysecret" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
【问题讨论】:
标签: xml spring validation configuration-files