2011-07-31 132 views
0

我注意到在彈簧配置文件處理中的這種行爲。
我在我的配置文件2個錯誤:
彈簧配置文件驗證

  • 一個語法(井)中的錯誤,說一個拼寫錯誤的關閉標籤(tryed與 「HTML」 標籤)
  • 一個 「命名空間」(驗證)錯誤(tryed一個錯誤的道路安全命名空間)

由於XML是無效的,我認爲第一個錯誤是運行時environement返回了驗證錯誤。

這是不正確的(彈簧3.0.2與安全3.0.2)。

它首先回報:

匹配通配符是嚴格的,但沒有聲明可以爲元素的「http」

然後,當我固定的這第一個錯誤,我得到的發現(我期待作爲第一):

元素類型的「http」必須由匹配的結束標籤「」

0被終止

那麼可以說什麼語法檢查?看起來,語法檢查的過程不是作爲預備步驟執行的,但檢查和驗證是「交錯的」。每個標籤首先被檢查並驗證。這樣對嗎?它是否依賴於實現?

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

你說得對,「語法檢查」和驗證不是兩個單獨的步驟。 Spring使用流式XML解析器來提高效率。這種解析器通常在到達有問題的元素時確切地識別錯誤,而不是在之前或之後。