- java.lang.Object
-
- javax.naming.ldap.ControlFactory
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
ControlFactory()
创建控制工厂的新实例。
-
-
-
方法详细信息
-
getControlInstance
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数据而无法出现,工厂应该只会抛出异常。
-
getControlInstance
public static Control getControlInstance(Control ctl, Context ctx, Hashtable<?,?> env) throws NamingException
使用已知的控制工厂创建控制。以下规则用于创建控件:
- 使用环境
LdapContext.CONTROL_FACTORIES
属性中指定的控制工厂以及与ctx
关联的提供者资源文件。 此属性的值是按冒号分隔的工厂类名列表,按顺序尝试,成功创建控件的第一个列表是使用的。 如果没有工厂可以加载,请返回ctl
。 如果在创建控件时遇到异常,则将异常传递给调用者。
请注意,控制工厂必须是公共的,并且必须有一个不接受参数的公共构造函数。 如果工厂位于命名模块中,那么它必须在由该模块导出到
java.naming
模块的包中。- 参数
-
ctl
- 包含OID和BER数据的非空控制对象。 -
ctx
- 正在创建控件的可能空的上下文。 如果为空,则不提供此类信息。 -
env
- 上下文的可能的空环境。 这是用来查找LdapContext.CONTROL_FACTORIES
属性的值。 - 结果
-
使用
ctl
创建的控件对象; 或者如果使用上述算法无法创建控件对象,ctl
。 - 异常
-
NamingException
- 如果尝试创建控件对象时遇到命名异常。 如果其中一个访问的工厂引发异常,则会传播到调用者。 如果在加载和实例化工厂和对象类时遇到错误,则异常包装在NamingException
,然后重新NamingException
。
- 使用环境
-
-