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