我想在分页中按排序顺序搜索。同样我使用VirtualListViewRequestControl。似乎它不起作用我尝试了一切可能的方式。但我仍然得到以下错误: -
INFO:level =“INFO”threadID = 37 threadName =“用于连接8到10.96.186.240:389的连接阅读器”revision = 15579 connectionID = 8 connectedTo =“10.96.186.240:389”readLDAPResult =“SearchResult(resultCode = 76(虚拟列表视图错误),messageID = 6,diagnosticMessage ='00002040:SvcErr:DSID-031401ED,问题5010(UNAVAIL_EXTENSION),数据0',entriesReturned = -1,referencesReturned = -1,responseControls = {VirtualListViewResponseControl(targetPosition = 0,contentCount = 0,resultCode = 60(缺少排序控制))})“
甚至在搜索请求中添加VirtualListViewRequestControl之前,我特意检查是否是我的目录支持virturalListViewControl或不使用帮助RootDSE,结果是肯定的。同样的例子我尝试使用jndi工作正常。在文档中,unsboundid说他们支持它,但似乎它不起作用。
以下是一些示例代码
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);
有人可以帮我解决这个问题。或者请在我找到解决方案的地方重定向。
答案 0 :(得分: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的请求执行此操作,这应该有助于我们了解区别,并确定如何处理它。
答案 1 :(得分:0)
" Note that Active Directory supports only a single sort key"
ie(new ServerSideSortRequestControl(false,new SortKey(" sn"), new SortKey(" givenName")),
只能有一个SortKey。 -Jim