1

answer.nextElement() の実行中に jre 内でエラーが発生しました

java.lang.NullPointerException: com.sun.jndi.ldap.LdapNamingEnumeration.getNextBatch(LdapNamingEnumeration.java:111) で null ~[na:1.6.0_31] com.sun.jndi.ldap.LdapNamingEnumeration.nextAux(LdapNamingEnumeration.java) で:245) ~[na:1.6.0_31] com.sun.jndi.ldap.LdapNamingEnumeration.nextImpl(LdapNamingEnumeration.java:236) で ~[na:1.6.0_31] com.sun.jndi.ldap.LdapNamingEnumeration.next で(LdapNamingEnumeration.java:184) ~[na:1.6.0_31] 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();
        ...
        }

どこを調査すればよいかわかりません。

一番、

4

1 に答える 1

1

これは私に起こりました。私が抱えていた問題は、LDAP 検索でmaxResultsコントロールを定義したことでした。

NamingEnumeratorを反復し、maxResults 制限に達したときにhasMoreメソッドを実行しているときに、例外SizeLimitExceededExceptionが発生しました (これは予想されることです)。

問題は、例外が発生した後、 NamingEnumeratorに対して hasMoreメソッドを再度実行すると、false を返す代わりに ( maxResults execption が既に発生しているため、予想どおり) TRUE を返し、次のnextElementへの呼び出しがNullPointerExceptionで失敗することでした。あなたは得ています。

于 2013-11-12T15:13:42.050 に答える