【问题标题】:spring configuration file validationspring配置文件验证
【发布时间】: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


    【解决方案1】:

    您说得对,“语法检查”和验证不是两个独立的步骤。 Spring 使用流式 XML 解析器来提高效率。这种解析器通常会在错误到达有问题的元素时准确地识别出错误,而不是之前或之后。

    【讨论】: