Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/LDAP:getAttribute(“cn”)返回null_Java_Ldap - Fatal编程技术网

Java/LDAP:getAttribute(“cn”)返回null

Java/LDAP:getAttribute(“cn”)返回null,java,ldap,Java,Ldap,在用Java编写的LDAP中搜索之后,我得到了一个有效的条目 cn=DE9-M5T,ou=students,ou=users,o=data 当我现在这样做的时候 if (entry != null && entry.getAttribute("modifyTimestamp") != null) { String dn = entry.getDN(); String modifyTimestamp = entry.getAttribute("

在用Java编写的LDAP中搜索之后,我得到了一个有效的条目

cn=DE9-M5T,ou=students,ou=users,o=data
当我现在这样做的时候

if (entry != null && entry.getAttribute("modifyTimestamp") != null) {
         String dn = entry.getDN();
         String modifyTimestamp = entry.getAttribute("modifyTimestamp").getStringValue();
         String oldTimestamp = modificationTimestampCache.get(dn);

         String cnUserId = entry.getAttribute("cn").getStringValue(); 
         ...
 }
最后一行给出了一个NullPointerException,这意味着

entry.getAttribute("cn")

必须返回
null
。在文档之后,只有在给定属性(此处为“cn”)无法找到精确匹配时,才会发生这种情况。在LDAP?< /P> < P>中,有什么原因会发生这样的代码:“Cd>CN”/代码>?我不能从您的代码中找出您的条目及其GETAtQuestor()的确切类型,但请考虑如下:

cn
是一个多值ldap属性,其中
modifytimestamp
是单值的


因此,
cn
的值可能存储在类似数组的结构中,我猜您的getAttribute()并没有像您预期的那样处理这个问题。

不是每个对象类都有
cn
属性。只有在模式中出现的那些


显然这不是其中之一。

您能调试它吗?我假设entry.getAttribute(“modifyTimestamp”)返回的条目比您想要的要多,因为它没有cn。我建议您拆分这行字符串cnUserId=entry.getAttribute(“cn”).getStringValue();输入2并添加空检查。如果为空,则继续;我无法调试它,但向主机发送了一个版本,其中包含entry.getAttribute(“cn”)的null检查;注意空指针异常是针对“cn”而不是“modifyTimestamp”的行提出的(我这么说了:最后一行给出了…),我的意思是条目通过了modifyTimestamp的if语句,但这并不意味着它确实具有“cn”属性。更改“if”以检查“cn”属性,如下所示:
if(entry!=null&&entry.getAttribute(“modifyTimestamp”)!=null&&entry.getAttribute(“cn”)!=null)
如果有效,我会将其发布为答案,如果您愿意接受,我将不胜感激。因此您猜测
getAttribute()
如果是多值属性,是否返回null?那到底有什么用呢?在Javadoc中它在哪里这么说?检查类LDAPAttributeSet和方法getAttribute(),检查原因?它不支持你的观点。它说的是,我逐字引用,“在这两种情况下,如果没有与指定的
attrName
完全匹配,则返回
null
”。多值属性完全没有任何意义。我只是建议多值cn可能是问题,因为我不知道使用了哪些java类。顺便说一下,cn是dn中的命名属性。所以你不会期望它丢失。这正是你所建议的。你的回答没有任何其他内容,你对我的评论也没有回应。顺便说一下,并不是所有的对象类都有
cn
属性,正如我不久前在自己的回答中所说的那样<代码>组织单元只是众多示例中的一个。