LDIF 解析
LDAP 目錄交換格式 (LDIF) 檔案是描述平面檔案格式目錄資料的標準媒介。這種格式最常見的用途包括資訊傳輸和存檔。然而,該標準也定義了一種在平面檔案格式中描述對儲存資料進行修改的方式。後一種型別的 LDIF 通常被稱為 changetype 或 modify LDIF。
org.springframework.ldap.ldif 包提供瞭解析 LDIF 檔案並將其反序列化為具體物件所需的類。LdifParser 是 org.springframework.ldap.ldif 包的主要類,能夠解析符合 RFC 2849 的檔案。此類從資源中讀取行並將其組裝成一個 LdapAttributes 物件。
LdifParser 目前忽略 changetype LDIF 條目,因為它們在應用程式上下文中的實用性尚未確定。 |
物件表示
org.springframework.ldap.core 包中的兩個類提供了在程式碼中表示 LDIF 的方法
-
LdapAttribute:擴充套件javax.naming.directory.BasicAttribute,增加了對 RFC2849 中定義的 LDIF 選項的支援。 -
LdapAttributes:擴充套件javax.naming.directory.BasicAttributes,增加了對 DN 的專門支援。
LdapAttribute 物件將選項表示為 Set<String>。新增到 LdapAttributes 物件的 DN 支援採用了 javax.naming.ldap.LdapName 類。
解析器
Parser 介面為操作提供了基礎,並採用了三個支援策略定義
-
SeparatorPolicy:建立將行組裝成屬性的機制。 -
AttributeValidationPolicy:確保屬性在解析前結構正確。 -
Specification:提供了一種在組裝後驗證物件結構的機制。
這些介面的預設實現如下
-
org.springframework.ldap.ldif.parser.LdifParser -
org.springframework.ldap.ldif.support.SeparatorPolicy -
org.springframework.ldap.ldif.support.DefaultAttributeValidationPolicy -
org.springframework.ldap.schema.DefaultSchemaSpecification
這四個類共同逐行解析資源並將資料轉換為 LdapAttributes 物件。
SeparatorPolicy 確定從原始檔讀取的單行應如何解釋,因為 LDIF 規範允許屬性跨多行。預設策略在讀取它們的順序上下文中評估行,以確定所考慮行的性質。control 屬性和 changetype 記錄將被忽略。
DefaultAttributeValidationPolicy 使用正則表示式表示式來確保每個屬性在解析後符合有效的屬性格式(根據 RFC 2849)。如果屬性驗證失敗,則會記錄 InvalidAttributeFormatException,並跳過該記錄(解析器返回 null)。
模式驗證
透過 org.springframework.ldap.schema 包中的 Specification 介面,可以提供針對模式驗證解析物件的方法。DefaultSchemaSpecification 不執行任何驗證,適用於已知記錄有效且無需檢查的情況。此選項節省了驗證帶來的效能開銷。BasicSchemaSpecification 應用基本檢查,例如確保已提供 DN 和物件類宣告。目前,針對實際模式的驗證需要實現 Specification 介面。
Spring Batch 整合
雖然 LdifParser 可以用於任何需要解析 LDIF 檔案的應用程式,但 Spring 提供了一個批處理框架,該框架提供了許多檔案處理實用程式,用於解析 CSV 等分隔檔案。org.springframework.ldap.ldif.batch 包提供了將 LdifParser 用作 Spring Batch 框架中有效配置選項所需的類。此包中有五個類。它們共同提供了三個基本用例
-
從檔案中讀取 LDIF 記錄並返回
LdapAttributes物件。 -
從檔案中讀取 LDIF 記錄並將記錄對映到 Java 物件 (POJO)。
-
將 LDIF 記錄寫入檔案。
第一個用例透過 LdifReader 實現。此類擴充套件了 Spring Batch 的 AbstractItemCountingItemStreamItemReader 並實現了其 ResourceAwareItemReaderItemStream。它自然地融入了框架,您可以將其用於從檔案中讀取 LdapAttributes 物件。
您可以使用 MappingLdifReader 將 LDIF 物件直接對映到任何 POJO。此類要求您提供 RecordMapper 介面的實現。此實現應實現將物件對映到 POJO 的邏輯。
您可以實現 RecordCallbackHandler 並將實現提供給任一讀取器。您可以使用此處理程式對跳過的記錄進行操作。有關更多資訊,請參閱 Spring Batch API 文件。
此包的最後一個成員,LdifAggregator,可用於將 LDIF 記錄寫入檔案。此類呼叫 LdapAttributes 物件的 toString() 方法。