Module java.naming

Class ControlFactory

java.lang.Object
javax.naming.ldap.ControlFactory

public abstract class ControlFactory extends Object
这个抽象类代表了一个用于创建LDAPv3控件的工厂。LDAPv3控件在RFC 2251中定义。

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

自 JDK 版本:
1.3
参见:
  • Constructor Details

    • ControlFactory

      protected ControlFactory()
      创建一个控件工厂的新实例。
  • Method Details

    • getControlInstance

      public abstract Control getControlInstance(Control ctl) throws NamingException
      使用此控件工厂创建一个控件。

      该工厂由服务提供程序用于返回从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中,然后重新抛出。