此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring LDAP 3.2.8! |
LDIF 解析
LDAP 目录交换格式 (LDIF) 文件是以平面文件格式描述目录数据的标准介质。此格式的最常见用途包括信息传输和存档。但是,该标准还定义了一种以平面文件格式描述对存储数据的修改的方法。这种后续类型的 LDIF 通常称为 changetype 或 modify LDIF。
这org.springframework.ldap.ldif
package 提供了解析 LDIF 文件并将其反序列化为有形对象所需的类。这LdifParser
是org.springframework.ldap.ldif
包中,并且能够解析符合 RFC 2849 的文件。此类从资源中读取行并将它们组合成LdapAttributes
对象。
这LdifParser 当前忽略 changeType LDIF 条目,因为它们在应用程序上下文中的有用性尚未确定。 |
对象表示
两个类org.springframework.ldap.core
package 提供了在代码中表示 LDIF 的方法:
-
LdapAttribute
:延伸javax.naming.directory.BasicAttribute
添加对 RFC2849 中定义的 LDIF 选项的支持。 -
LdapAttributes
:延伸javax.naming.directory.BasicAttributes
添加对 DN 的专门支持。
LdapAttribute
对象将选项表示为Set<String>
.添加到LdapAttributes
object 使用javax.naming.ldap.LdapName
类。
解析器
这Parser
interface 为作提供了基础,并采用了三个支持策略定义:
-
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 规范允许属性跨越多行。默认策略根据读取行的顺序评估行,以确定要考虑的行的性质。控件属性和 changeType 记录将被忽略。
这DefaultAttributeValidationPolicy
使用 REGEX 表达式来确保每个属性在解析后都符合有效的属性格式(根据 RFC 2849)。如果属性未通过验证,则InvalidAttributeFormatException
记录,并跳过该记录(解析器返回null
).
架构验证
根据架构验证已解析对象的机制可通过Specification
界面中的org.springframework.ldap.schema
包。这DefaultSchemaSpecification
不执行任何验证,可用于已知记录有效且无需检查的实例。此选项可节省验证施加的性能损失。这BasicSchemaSpecification
应用基本检查,例如确保已提供 DN 和对象类声明。目前,针对实际 schema 的验证需要实现Specification
接口。
Spring Batch 集成
虽然LdifParser
可以被任何需要解析 LDIF 文件的应用程序使用,Spring 提供了一个批处理框架,该框架提供了许多文件处理实用程序来解析分隔文件,例如 CSV。这org.springframework.ldap.ldif.batch
package 提供使用LdifParser
作为 Spring Batch 框架中的有效配置选项。
此包中有五个类。它们共同提供了三个基本用例:
-
从文件中读取 LDIF 记录并返回
LdapAttributes
对象。 -
从文件中读取 LDIF 记录并将记录映射到 Java 对象 (POJO)。
-
将 LDIF 记录写入文件。
第一个用例是通过LdifReader
.这个类扩展了 Spring Batch 的AbstractItemCountingItemStreamItemReader
并实现其ResourceAwareItemReaderItemStream
.它自然而然地融入了框架,你可以用它来阅读LdapAttributes
对象。
您可以使用MappingLdifReader
将 LDIF 对象直接映射到任何 POJO。此类要求您提供RecordMapper
接口。此实现应实现将对象映射到 POJO 的逻辑。
您可以实现RecordCallbackHandler
并将实现提供给任一 Reader。您可以使用此处理程序对跳过的记录进行作。有关更多信息,请参阅 Spring Batch API 文档。
此包的最后一个成员LdifAggregator
可用于将 LDIF 记录写入文件。此类调用toString()
方法LdapAttributes
对象。