Search Results
在DirContextinterface中使用搜索方法时,将返回NamingEnumeration。 NamingEnumeration
中的每个项目都是SearchResult,其中包含以下信息:
Name
每个SearchResult
都包含满足搜索过滤条件的 LDAP 条 Object 名称。您可以使用getName()获得条 Object 名称。此方法将 LDAP 条目* relative 的composite name返回到 target context *。目标上下文是name
参数解析到的上下文。用 LDAP 的话来说,目标上下文是搜索的“基础对象”。这是一个例子。
NamingEnumeration answer = ctx.search("ou=NewHires",
"(&(mySpecialKey={0}) (cn=*{1}))", // Filter expression
new Object[]{key, name}, // Filter arguments
null); // Default search controls
在此示例中,目标上下文是由"ou=NewHires"
命名的上下文。 answer
中SearchResult
s 中的名称是相对于"ou=NewHires"
的。例如,如果getName\(\)
返回"cn=J\. Duke"
,则其相对于ctx
的名称将为"cn=J\. Duke, ou=NewHires"
。
如果使用SearchControls.SUBTREE_SCOPE或SearchControls.OBJECT_SCOPE进行搜索,并且目标上下文本身满足搜索过滤条件,则返回的名称将为“”(空名称),因为这是相对于目标上下文的名称。
这还不是全部。如果搜索涉及引用(请参见JNDI Tutorial)或取消引用别名(请参见JNDI Tutorial),则对应的SearchResult
的名称将与目标上下文无关。相反,它们将是直接引用条 ObjectURL。要确定getName\(\)
返回的名称是相对名称还是绝对名称,请使用isRelative()。如果此方法返回true
,则该名称相对于目标上下文;如果返回false
,则名称为 URL。
如果名称是 URL,并且您需要使用该 URL,则可以将其传递给可以理解 URL 的初始上下文(请参阅JNDI Tutorial)。
如果您需要获取条 Object 完整 DN,则可以使用NameClassPair.getNameInNamespace()。
Object
如果执行搜索请求返回条 Object 对象,则_7 调用了__,则SearchResult
将包含代表该条 Object 对象。要检索此对象,请调用getObject()。如果java\.io\.Serializable
,Referenceable或Reference对象先前已绑定到该 LDAP 名称,则使用条目中的属性来重建该对象(请参见JNDI Tutorial中的示例)。否则,将使用条目中的属性来创建一个DirContext
实例,该实例代表 LDAP 条目。无论哪种情况,LDAP 提供程序都会在对象上调用DirectoryManager.getObjectInstance()并返回结果。
Class Name
如果执行搜索请求返回条 Object 对象,则从返回的对象派生类名。如果搜索请求的属性包括对 LDAP 条 Object"javaClassName"
属性的检索,则类名就是该属性的值。否则,类名称为"javax\.naming\.directory\.DirContext"
。类名称是从getClassName()获得的。
Attributes
执行搜索时,可以通过为search()方法之一提供参数或使用SearchControls.setReturningAttributes()设置搜索控件来选择返回属性。如果未明确指定任何属性,则将返回所有 LDAP 条 Object 属性。要指定不返回任何属性,必须传递一个空数组(new String\[0\]
)。
要检索 LDAP 条 Object 属性,请在SearchResult
上调用getAttributes()。
Response Controls
有关如何检索搜索结果的响应控件的详细信息,请参见 JNDI 教程的控件和扩展类。