Modifier | Constructor and Description |
---|---|
protected |
ControlFactory()
创建控制工厂的新实例。
|
public abstract Control getControlInstance(Control ctl) throws NamingException
该工厂由服务提供商用来将其从LDAP协议读取的控件作为专门的控制类返回。 没有这种机制,提供者将返回仅包含BER编码格式的数据的控件。
通常, ctl是包含BER编码数据的“基本”控制。 该工厂用于创建专门的控制实现,通常通过解码BER编码数据,提供以类型安全和友善的方式访问该数据的方法。
例如,工厂可能会使用BER编码数据进行基本控制,并返回VirtualListReplyControl的一个实例。
如果此工厂无法使用提供的参数创建控件,则应返回null。 如果确定它是唯一的预定工厂,并且没有其他控制工厂应该被尝试,工厂应该只抛出异常。 例如,如果控件中的BER数据与给定OID的控件的期望不匹配,则可能会发生这种情况。 由于此方法抛出NamingException ,所以应该传播的任何其他内部生成的异常都必须包含在一个NamingException中 。
ctl
- 非空控件。
NamingException
- 如果ctl包含无效的数据,阻止它用于创建控件。
如果工厂知道如何产生控制(由OID标识)但由于例如无效的BER数据而无法出现,工厂应该只会抛出异常。
public static Control getControlInstance(Control ctl, Context ctx, Hashtable<?,?> env) throws NamingException
以下规则用于创建控件:
ctl
。 如果在创建控件时遇到异常,则将异常传递给调用者。 请注意,控制工厂必须是公共的,并且必须有一个不接受参数的公共构造函数。
ctl
- 包含OID和BER数据的非空控制对象。
ctx
- 正在创建控件的可能空的上下文。
如果为空,则不提供此类信息。
env
- 上下文可能是空的环境。
这是用来查找LdapContext.CONTROL_FACTORIES属性的值。
ctl
创建的控件对象;
或ctl
如果无法使用上述算法创建控制对象。
NamingException
- 如果尝试创建控件对象时遇到命名异常。
如果其中一个访问的工厂引发异常,则会传播到调用者。
如果在加载和实例化工厂和对象类时遇到错误,则异常包装在NamingException中 ,然后重新引导 。