Module  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属性中指定的控制工厂以及与ctx关联的提供者资源文件。 此属性的值是按冒号分隔的工厂类名列表,按顺序尝试,成功创建控件的第一个列表是使用的。 如果没有工厂可以加载,请返回ctl 如果在创建控件时遇到异常,则将异常传递给调用者。

        请注意,控制工厂必须是公共的,并且必须有一个不接受参数的公共构造函数。 如果工厂位于命名模块中,那么它必须在由该模块导出到java.naming模块的包中。

        参数
        ctl - 包含OID和BER数据的非空控制对象。
        ctx - 正在创建控件的可能空的上下文。 如果为空,则不提供此类信息。
        env - 上下文的可能的空环境。 这是用来查找LdapContext.CONTROL_FACTORIES属性的值。
        结果
        使用ctl创建的控件对象; 或者如果使用上述算法无法创建控件对象, ctl
        异常
        NamingException - 如果尝试创建控件对象时遇到命名异常。 如果其中一个访问的工厂引发异常,则会传播到调用者。 如果在加载和实例化工厂和对象类时遇到错误,则异常包装在NamingException ,然后重新NamingException