LDIF 解析

LDAP 目录互换格式 (LDIF) 文件是描述以平面文件格式存储的目录数据的标准介质。这种格式最常见的用途包括信息传输和归档。然而,该标准还定义了一种以平面文件格式描述存储数据修改的方法。这种后一种类型的 LDIF 通常被称为 changetypemodify LDIFs。spring-doc.cadn.net.cn

The org.springframework.ldap.ldif 包提供了解析LDIF文件并将其反序列化为实际对象所需的类。The LdifParserorg.springframework.ldap.ldif 包的主要类,能够解析符合RFC 2849规范的文件。此类从资源中读取行,并将它们组装成一个LdapAttributes对象。spring-doc.cadn.net.cn

当前的 LdifParser 会忽略 changetype LDIF 条目,因为在应用程序的上下文中它们的用途尚未确定。

对象表示

两个在org.springframework.ldap.core包中的类提供了在代码中表示LDIF的手段:spring-doc.cadn.net.cn

  • LdapAttribute: 继承 javax.naming.directory.BasicAttribute,并添加对 RFC2849 中定义的 LDIF 选项的支持。spring-doc.cadn.net.cn

  • LdapAttributes: 继承 javax.naming.directory.BasicAttributes,并为 DNs 提供专门化的支持。spring-doc.cadn.net.cn

LdapAttribute 对象将选项表示为一个 Set<String>。添加到 LdapAttributes 对象中的 DN 支持使用 javax.naming.ldap.LdapName 类。spring-doc.cadn.net.cn

解析器

The Parser接口提供了操作的基础,并采用了三个支持的策略定义:spring-doc.cadn.net.cn

这些接口的默认实现如下:spring-doc.cadn.net.cn

这些四个类按行解析资源,并将数据转换为LdapAttributes对象。spring-doc.cadn.net.cn

SeparatorPolicy 决定了从源文件读取的各行应该如何被解释,因为 LDIF 规范允许属性跨多行显示。默认策略会根据读取的先后顺序评估行,以确定所考虑行的性质。control 类属性和changetype 记录会被忽略。spring-doc.cadn.net.cn

The DefaultAttributeValidationPolicy 使用 REGEX 表达式来确保在解析时每个属性都符合 RFC 2849 规定的有效属性格式。如果一个属性验证失败,会记录 InvalidAttributeFormatException,并跳过该记录(解析器返回 null)。spring-doc.cadn.net.cn

模式验证

一个用于将解析后的对象与模式进行验证的机制可通过在org.springframework.ldap.schema包中的Specification接口提供。DefaultSchemaSpecification不进行任何验证,适用于已知记录有效且无需检查的情况。此选项可避免验证带来的性能开销。BasicSchemaSpecification会进行基本检查,例如确保DN和对象类声明已提供。目前,要针对实际模式进行验证,需要实现Specification接口。spring-doc.cadn.net.cn

Spring Batch 集成

虽然 LdifParser 可以用于需要解析 LDIF 文件的任何应用程序,但 Spring 提供了一个批处理框架,该框架提供了许多处理限定文件(如 CSV)的实用程序。org.springframework.ldap.ldif.batch 包提供了在 Spring Batch 框架中将 LdifParser 作为有效配置选项所需的类。 此包中有五个类。它们共同提供了三种基本使用场景:spring-doc.cadn.net.cn

第一个用例通过LdifReader实现。这个类扩展了Spring Batch的AbstractItemCountingItemStreamItemReader并实现了其ResourceAwareItemReaderItemStream。它自然地融入到框架中,你可以使用它从文件中读取LdapAttributes对象。spring-doc.cadn.net.cn

您可以使用 MappingLdifReader 直接将 LDIF 对象映射到任何 POJO。此类需要您提供 RecordMapper 接口的实现。此实现应包含用于将对象映射到 POJO 的逻辑。spring-doc.cadn.net.cn

您可以实现RecordCallbackHandler并将其实现提供给阅读器。您可以使用此处理程序来操作跳过的记录。有关更多信息,请参阅Spring Batch API文档spring-doc.cadn.net.cn

此包的最后一位成员是LdifAggregator,可用于将LDIF记录写入文件。此类调用LdapAttributes对象的toString()方法。spring-doc.cadn.net.cn