LDIF 解析

LDAP 目錄交換格式 (LDIF) 檔案是以純文字檔案格式描述目錄資料的標準媒介。此格式最常見的用途包括資訊傳輸和歸檔。然而,此標準也定義了一種以純文字檔案格式描述儲存資料修改的方法。後者這種 LDIF 通常稱為變更類型修改 LDIF。

org.springframework.ldap.ldif 套件提供了剖析 LDIF 檔案並將其反序列化為具體物件所需的類別。LdifParserorg.springframework.ldap.ldif 套件的主要類別,能夠剖析符合 RFC 2849 的檔案。此類別從資源讀取行,並將它們組合成 LdapAttributes 物件。

LdifParser 目前忽略變更類型 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 規格允許屬性跨越多行。預設策略評估讀取行的順序,以判斷所考慮行的性質。控制屬性和變更類型記錄會被忽略。

DefaultAttributeValidationPolicy 使用 REGEX 表達式,以確保每個屬性在剖析後都符合有效的屬性格式(根據 RFC 2849)。如果屬性驗證失敗,則會記錄 InvalidAttributeFormatException,並略過記錄(剖析器傳回 null)。

結構描述驗證

透過 org.springframework.ldap.schema 套件中的 Specification 介面,可以使用一種機制來根據結構描述驗證剖析的物件。DefaultSchemaSpecification 不執行任何驗證,適用於已知記錄有效且不需要檢查的實例。此選項可節省驗證帶來的效能損失。BasicSchemaSpecification 應用基本檢查,例如確保已提供 DN 和物件類別宣告。目前,根據實際結構描述進行驗證需要實作 Specification 介面。

Spring Batch 整合

雖然任何需要剖析 LDIF 檔案的應用程式都可以使用 LdifParser,但 Spring 提供了一個批次處理框架,該框架提供了許多檔案處理公用程式,用於剖析分隔檔案(例如 CSV)。org.springframework.ldap.ldif.batch 套件提供了在 Spring Batch 框架中使用 LdifParser 作為有效組態選項所需的類別。此套件中有五個類別。它們共同提供了三個基本用例

  • 從檔案讀取 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() 方法。