模块  java.naming
软件包  javax.naming.ldap

Class ControlFactory


  • public abstract class ControlFactory
    extends Object
    此抽象类表示用于创建LDAPv3控件的工厂。 LDAPv3控件在RFC 2251中定义。

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

    从以下版本开始:
    1.3
    另请参见:
    Control
    • 构造方法详细信息

      • 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