LDIF 解析
LDAP Directory Interchange Format (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
パッケージの 2 つのクラスは、LDIF をコードで表す手段を提供します。
LdapAttribute
: RFC2849 で定義されている LDIF オプションのサポートを追加して、javax.naming.directory.BasicAttribute
を拡張します。LdapAttributes
: DN の特殊なサポートを追加してjavax.naming.directory.BasicAttributes
を拡張します。
LdapAttribute
オブジェクトは、オプションを Set<String>
として表します。LdapAttributes
オブジェクトに追加された DN サポートは、javax.naming.ldap.LdapName
クラスを採用しています。
パーサー
Parser
インターフェースは操作の基盤を提供し、次の 3 つのサポートポリシー定義を採用しています。
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
これら 4 つのクラスが一緒になって、リソースを 1 行ずつ解析し、データを LdapAttributes
オブジェクトに変換します。
SeparatorPolicy
は、ソースファイルから読み取られた個々の行がどのように解釈されるかを決定します。これは、LDIF 仕様によって属性が複数の行にまたがることが許可されているためです。デフォルトのポリシーは、考慮されている行の性質を判断するために、読み取られた順序のコンテキストで行を評価します。control 属性と changetype レコードは無視されます。
DefaultAttributeValidationPolicy
は REGEX 式を使用して、解析された各属性が (RFC 2849 に従って) 有効な属性形式に準拠していることを確認します。属性が検証に失敗すると、InvalidAttributeFormatException
がログに記録され、レコードはスキップされます (パーサーは null
を返します)。
スキーマ検証
解析されたオブジェクトをスキーマに対して検証するメカニズムは、org.springframework.ldap.schema
パッケージの Specification
インターフェースを通じて利用できます。DefaultSchemaSpecification
は検証を行わず、レコードが有効であることがわかっていてチェックする必要がない場合に使用できます。このオプションは、検証が課すパフォーマンスの低下を防ぎます。BasicSchemaSpecification
は、DN およびオブジェクトクラス宣言が提供されていることを確認するなど、基本的なチェックを適用します。現在、実際のスキーマに対する検証には、Specification
インターフェースの実装が必要です。
Spring Batch Integration
LdifParser
は、LDIF ファイルの解析を必要とするアプリケーションで使用できますが、Spring は、CSV などの区切りファイルを解析するための多くのファイル処理ユーティリティを提供するバッチ処理フレームワークを提供します。org.springframework.ldap.ldif.batch
パッケージは、Spring Batch フレームワークで有効な構成オプションとして LdifParser
を使用するために必要なクラスを提供します。このパッケージには 5 つのクラスがあります。これらを組み合わせることで、次の 3 つの基本的な使用例が提供されます。
ファイルから 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()
メソッドを呼び出します。