此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring LDAP 3.3.3! |
LDIF 解析
LDAP 目录交换格式 (LDIF) 文件是以平面文件格式描述目录数据的标准介质。此格式最常见的用途包括信息传输和存档。但是,该标准还定义了一种以平面文件格式描述对存储数据的修改的方法。这种后期类型的 LDIF 通常称为 changetype 或修改 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
对象采用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 规范允许属性跨越多行。默认策略根据读取行的顺序评估行,以确定所考虑行的性质。将忽略控制属性和 ChangeType 记录。
这DefaultAttributeValidationPolicy
使用 REGEX 表达式来确保每个属性在解析后都符合有效的属性格式(根据 RFC 2849)。如果属性验证失败,则InvalidAttributeFormatException
,并且记录被跳过(解析器返回null
).
架构验证
一种用于根据架构验证解析对象的机制可通过Specification
接口中的org.springframework.ldap.schema
包。 这DefaultSchemaSpecification
不执行任何验证,可用于已知记录有效且不需要检查的实例。此选项可节省验证施加的性能损失。 这BasicSchemaSpecification
应用基本检查,例如确保已提供 DN 和对象类声明。目前,针对实际模式进行验证需要实现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
并将实现提供给任一读取器。您可以使用此处理程序对跳过的记录进行作。有关更多信息,请参阅 Spring Batch API 文档。
此包的最后一个成员,LdifAggregator
,可用于将 LDIF 记录写入文件。此类调用toString()
方法LdapAttributes
对象。