0

我想在分页中按排序顺序搜索。同样,我正在使用 VirtualListViewRequestControl。好像它不起作用我尝试了所有可能的方法。但我仍然收到以下错误:-

INFO: level="INFO" threadID=37 threadName="连接阅读器连接 8 到 10.96.186.240:389" 修订=15579 connectionID=8 connectedTo="10.96.186.240:389" readLDAPResult="SearchResult(resultCode=76 (virtual列表视图错误), messageID=6, diagnosticMessage='00002040: SvcErr: DSID-031401ED, 问题 5010 (UNAVAIL_EXTENSION), data 0 ', entriesReturned=-1, referencesReturned=-1, responseControls={VirtualListViewResponseControl(targetPosition=0, contentCount =0, resultCode=60 (排序控制缺失))})"

甚至在搜索请求中添加 VirtualListViewRequestControl 之前,我在帮助 RootDSE 的情况下专门检查我的目录是否支持virturalListViewControl,结果是肯定的。我尝试使用 jndi 的相同示例运行良好。在文档中 unboundid 说他们支持它,但似乎它不起作用。

这是一些示例代码

SearchRequest searchRequest = new SearchRequest("dc=mydomain,dc=com",
          SearchScope.SUB, Filter.createEqualityFilter("objectClass", "person"));

searchRequest.setControls(
            new ServerSideSortRequestControl(false, new SortKey("sn"),
                 new SortKey("givenName")),
            new VirtualListViewRequestControl(vlvOffset, 0, 9, vlvContentCount,
                 vlvContextID, true));

SearchResult searchResult = connection.search(searchRequest);

有人可以帮我解决这个问题。或者请将我重定向到我可以找到解决方案的地方。

4

2 回答 2

0

请注意,Active Directory 仅支持单个排序键。”

即(新ServerSideSortRequestControl(假,新SortKey(“sn”),新SortKey(“givenName”)),

只能有一个 SortKey。-吉姆

于 2014-04-24T10:32:22.950 回答
0

UnboundID LDAP SDK 对虚拟列表视图控件的支持肯定适用于其他目录服务器,因此很可能 Active Directory 的方式有一些不寻常的地方(我假设它是您正在使用的服务器从错误的格式响应)处理它。

错误响应的“缺少排序控制”部分很奇怪,因为您显然在请求中提供了适当的控制。也许 Active Directory 不喜欢 VLV 请求控制很关键,但服务器端排序请求控制不是。您是否尝试过将 ServerSideSortRequestControl 构造函数的第一个参数从 false 更改为 true,以便将排序控件标记为关键?

如果这不能解决问题,但相同的请求似乎适用于 JNDI,那么查看 JNDI 与 UnboundID LDAP SDK 的客户端和服务器之间传递的确切流量将很有用。您可以使用 UnboundID LDAP SDK 提供的 ldap-debugger 工具来获得它。这将创建一个非常简单的 LDAP 代理,您可以将其配置为将其接收到的任何请求转发到指定的目录服务器,然后将 LDAP 客户端指向 ldap-debugger 工具而不是真正的目录服务器。然后 ldap-debugger 工具将打印出有关通过它的确切 LDAP 请求和响应流量的详细信息。如果您对来自 JNDI 和 UnboundID LDAP SDK 的请求都执行此操作,这应该有助于我们了解差异并确定如何处理它。

于 2014-04-23T18:41:19.680 回答