我在弹簧配置文件的处理中注意到了这种行为
我的配置文件中有2个错误:
由于xml无效,我认为运行环境返回的第一个错误是验证错误。
这不是真的(带安全性3.0.2的弹簧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>
答案 0 :(得分:0)
你是对的,“语法检查”和验证不是两个单独的步骤。 Spring使用流式XML解析器来提高效率。这种解析器通常在到达违规元素时确切地识别错误,而不是在之前或之后。