java.lang.Object
javax.naming.ldap.ControlFactory
这个抽象类代表了一个用于创建LDAPv3控件的工厂。LDAPv3控件在RFC 2251中定义。
当服务提供程序接收到一个响应控件时,它使用控件工厂来返回特定/适当的控件类实现。
- 自 JDK 版本:
- 1.3
- 参见:
-
Constructor Details
-
ControlFactory
protected ControlFactory()创建一个控件工厂的新实例。
-
-
Method Details
-
getControlInstance
使用此控件工厂创建一个控件。该工厂由服务提供程序用于返回从LDAP协议中读取的控件作为专门控件类的控件。如果没有这个机制,提供程序将返回只包含BER编码格式数据的控件。
通常,
ctl
是一个包含BER编码数据的“基本”控件。该工厂用于创建一个专门的控件实现,通常是通过解码BER编码数据,提供访问该数据的类型安全和友好的方法。例如,一个工厂可能使用基本控件中的BER编码数据并返回一个VirtualListReplyControl的实例。
如果此工厂无法使用提供的参数创建一个控件,它应该返回null。工厂只有在确定它是唯一预期的工厂,且不应尝试其他控件工厂时才应抛出异常。例如,如果控件中的BER数据与给定OID的控件所期望的不符,则可能会发生这种情况。由于此方法抛出
NamingException
,因此必须将任何其他内部生成的应该传播的异常包装在NamingException
中。- 参数:
-
ctl
- 一个非空控件。 - 返回:
- 一个可能为null的控件。
- 抛出:
-
NamingException
- 如果ctl
包含无效数据,阻止其用于创建控件。工厂只有在知道如何生成控件(由OID标识)但由于例如无效的BER数据而无法生成控件时才应抛出异常。
-
getControlInstance
public static Control getControlInstance(Control ctl, Context ctx, Hashtable<?, ?> env) throws NamingException使用已知的控件工厂创建一个控件。使用以下规则创建控件:
- 使用环境的
LdapContext.CONTROL_FACTORIES
属性中指定的控件工厂,以及与ctx
关联的提供程序资源文件中的控件工厂,按顺序进行尝试。此属性的值是一个以冒号分隔的工厂类名列表,按顺序尝试,第一个成功创建控件的工厂将被使用。如果无法加载任何工厂,则返回ctl
。如果在创建控件时遇到异常,则将异常传递给调用者。
请注意,控件工厂必须是public的,并且必须有一个不接受参数的public构造函数。在工厂位于命名模块中的情况下,它必须位于由该模块向
java.naming
模块导出的包中。- 参数:
-
ctl
- 包含OID和BER数据的非空控件对象。 -
ctx
- 正在创建控件的可能为null的上下文。如果为null,则没有此类信息可用。 -
env
- 上下文的可能为null的环境。这用于查找LdapContext.CONTROL_FACTORIES
属性的值。 - 返回:
-
使用上述算法创建的控件对象;如果无法使用控件对象创建控件,则返回
ctl
。 - 抛出:
-
NamingException
- 如果在尝试创建控件对象时遇到命名异常。如果访问的工厂中有一个抛出异常,则将其传播给调用者。如果在加载和实例化工厂和对象类时遇到错误,则将异常包装在NamingException
中,然后重新抛出。
- 使用环境的
-