javax.naming.ldap

接口
异常
java.lang.Object
  继承者 javax.naming.ldap.ControlFactory

public abstract class ControlFactory
     
extends Object

此抽象类表示用于创建 LDAPv3 控件的工厂。LDAPv3 控件是在 RFC 2251 中定义的。

当服务提供者收到响应控件时,它使用控件工厂返回特定/适当的控件类实现。

从以下版本开始:
1.3
另请参见:
Control

构造方法摘要
protected ControlFactory()
           
 
方法摘要
abstract  Control getControlInstance(Control ctl)
          使用此控件工厂创建控件。
static Control getControlInstance(Control ctl, Context ctx, Hashtable<?,?> env)
          使用已知控件工厂创建控件。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

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 - 非 null 控件。
返回:
一个控件(可能为 null)。
抛出:
NamingException - 如果 ctl 包含无效数据,这些无效数据阻止它用于创建控件。工厂只有在已知生成控件(由 OID 标识)的方式但由于某些原因(例如,BER 数据无效)不能生成控件时才抛出异常。

getControlInstance

public static Control getControlInstance(Control ctl,
                                         Context ctx,
                                         Hashtable<?,?> env)
                                  throws NamingException
使用已知控件工厂创建控件。

使用以下规则创建控件:

  • 使用环境的 LdapContext.CONTROL_FACTORIES 属性和与 ctx 关联的提供者资源文件的 LdapContext.CONTROL_FACTORIES 属性中指定的控件工厂,并使用原来的顺序。此属性的值是按顺序尝试的以冒号分隔的工厂类名称列表,使用的名称是第一个成功创建控件的名称。如果无法加载任何工厂,则返回 ctl。如果在创建控件时遇到异常,则将异常传递到调用者。

注意,控件工厂必须是公共的,并且必须具有不接受任何参数的公共构造方法。

参数:
ctl - 包含 OID 和 BER 数据的非 null 控件对象。
ctx - 将创建控件的上下文(可能为 null)。如果为 null,则所有这些信息都不可用。
env - 上下文的环境(可能为 null)。此值用于查找 LdapContext.CONTROL_FACTORIES 属性的值。
返回:
使用 ctl 创建的控件对象;如果使用上述算法无法创建控件对象,则返回 ctl
抛出:
NamingException - 如果在尝试创建控件对象时遇到了命名异常。如果访问的工厂之一抛出异常,则该异常将被传播到调用者。如果在加载和实例化工厂和对象类时遇到错误,则异常将被包装在 NamingException 中,然后重新抛出。