Module java.naming

Class SortControl

java.lang.Object
javax.naming.ldap.BasicControl
javax.naming.ldap.SortControl
所有已实现的接口:
Serializable, Control

public final class SortControl extends BasicControl
请求在返回之前由LDAP服务器对搜索操作的结果进行排序。排序标准使用一个或多个排序键的有序列表指定,并附带排序参数。根据排序控件中提供的参数,在LDAP服务器上对搜索结果进行排序,然后将其返回给请求者。如果服务器不支持排序(并且排序控件标记为关键),则不执行搜索操作并返回错误。

以下代码示例显示了如何使用该类:



     // 打开LDAP连接
     LdapContext ctx = new InitialLdapContext();

     // 激活排序
     String sortKey = "cn";
     ctx.setRequestControls(new Control[]{
         new SortControl(sortKey, Control.CRITICAL) });

     // 执行搜索
     NamingEnumeration results =
         ctx.search("", "(objectclass=*)", new SearchControls());

     // 遍历搜索结果
     while (results != null && results.hasMore()) {
         // 显示条目
         SearchResult entry = (SearchResult)results.next();
         System.out.println(entry.getName());
         System.out.println(entry.getAttributes());

         // 处理条目的响应控件(如果有)
         if (entry instanceof HasControls) {
             // ((HasControls)entry).getControls();
         }
     }
     // 检查排序控件响应
     Control[] controls = ctx.getResponseControls();
     if (controls != null) {
         for (int i = 0; i < controls.length; i++) {
             if (controls[i] instanceof SortResponseControl) {
                 SortResponseControl src = (SortResponseControl)controls[i];
                 if (! src.isSorted()) {
                     throw src.getException();
                 }
             } else {
                 // 处理其他响应控件(如果有)
             }
         }
     }

     // 关闭LDAP连接
     ctx.close();
     ...

 

该类实现了LDAPv3服务器端排序的请求控件,如RFC 2891中定义。控件的值具有以下ASN.1定义:

     SortKeyList ::= SEQUENCE OF SEQUENCE {
         attributeType     AttributeDescription,
         orderingRule  [0] MatchingRuleId OPTIONAL,
         reverseOrder  [1] BOOLEAN DEFAULT FALSE }

 
自 JDK 版本:
1.5
参见:
  • Field Details

    • OID

      public static final String OID
      服务器端排序控件的分配对象标识符为1.2.840.113556.1.4.473。
      参见:
  • Constructor Details

    • SortControl

      public SortControl(String sortBy, boolean criticality) throws IOException
      构造一个控件,按升序对单个属性进行排序。将使用为指定属性定义的排序匹配规则执行排序。
      参数:
      sortBy - 要排序的属性 ID。
      criticality - 如果为 true,则服务器必须遵守控件并按请求排序返回搜索结果,否则拒绝执行搜索。如果为 false,则服务器不必遵守控件。
      抛出:
      IOException - 如果在将提供的参数编码为控件时遇到错误。
    • SortControl

      public SortControl(String[] sortBy, boolean criticality) throws IOException
      构造一个控件,按升序对属性列表进行排序。将使用与每个指定属性一起使用的排序匹配规则执行排序。
      参数:
      sortBy - 要排序的属性 ID 的非空列表。列表按照最高到最低排序键优先级的顺序排列。
      criticality - 如果为 true,则服务器必须遵守控件并按请求排序返回搜索结果,否则拒绝执行搜索。如果为 false,则服务器不必遵守控件。
      抛出:
      IOException - 如果在将提供的参数编码为控件时遇到错误。
    • SortControl

      public SortControl(SortKey[] sortBy, boolean criticality) throws IOException
      构造一个控件,按照排序键列表进行排序。每个排序键指定要使用的排序顺序和排序匹配规则。
      参数:
      sortBy - 要排序的键的非空列表。列表按照最高到最低排序键优先级的顺序排列。
      criticality - 如果为 true,则服务器必须遵守控件并按请求排序返回搜索结果,否则拒绝执行搜索。如果为 false,则服务器不必遵守控件。
      抛出:
      IOException - 如果在将提供的参数编码为控件时遇到错误。