在LDAP searchResult上执行nextElement时的NPE

时间:2012-10-22 16:09:14

标签: java java-ee nullpointerexception jndi

我在执行answer.nextElement()

时在jre中有错误
  

java.lang.NullPointerException:null at   com.sun.jndi.ldap.LdapNamingEnumeration.getNextBatch(LdapNamingEnumeration.java:111)   〜[na:1.6.0_31] at   com.sun.jndi.ldap.LdapNamingEnumeration.nextAux(LdapNamingEnumeration.java:245)   〜[na:1.6.0_31] at   com.sun.jndi.ldap.LdapNamingEnumeration.nextImpl(LdapNamingEnumeration.java:236)   〜[na:1.6.0_31] at   com.sun.jndi.ldap.LdapNamingEnumeration.next(LdapNamingEnumeration.java:184)   〜[na:1.6.0_31] at   com.sun.jndi.ldap.LdapNamingEnumeration.nextElement(LdapNamingEnumeration.java:88)   〜[NA:1.6.0_31]

这是我的代码:

        LdapContext ctx = ...;
        NamingEnumeration<SearchResult> answer = ctx.search(...);

        if (answer.hasMoreElements()) {
            ...
        }

        while (answer.hasMoreElements()) {
                String grpName = answer.nextElement().getAttributes().get("xxx").get().toString();
        ...
        }

我不知道在哪里调查。

最佳,

1 个答案:

答案 0 :(得分:1)

这发生在我身上。我遇到的问题是我在LDAP搜索中定义了 maxResults 控件。

在达到maxResults限制时迭代 NamingEnumerator 并执行 hasMore 方法时,引发了异常 SizeLimitExceededException (这是预期的)

问题在于,如果在引发异常后,再次对 NamingEnumerator 执行 hasMore 方法,而不是返回false(正如预期的那样,因为maxResults execption是已经提出)它返回TRUE,并且对 nextElement 的以下调用因你得到的 NullPointerException 而失败。