RFR - 8141148: LDAP "follow" throws ClassCastException with Java 8
Rob McKenna
rob.mckenna at oracle.com
Tue Jul 12 21:13:25 UTC 2016
Hi folks,
Looking for a review for this change:
https://bugs.openjdk.java.net/browse/JDK-8141148
http://cr.openjdk.java.net/~robm/8141148/webrev.01/
A fairly straightforward fix for a class cast problem. From the bug:
As a result of https://bugs.openjdk.java.net/browse/JDK-7072353:
http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/rev/18329abcdb7c
The test attached to the bug fails with the following trace:
Exception in thread "main" java.lang.ClassCastException: com.sun.jndi.ldap.LdapSearchEnumeration cannot be cast to com.sun.jndi.ldap.LdapNamingEnumeration
at com.sun.jndi.ldap.LdapNamingEnumeration.getReferredResults(LdapNamingEnumeration.java:78)
at com.sun.jndi.ldap.LdapNamingEnumeration.getReferredResults(LdapNamingEnumeration.java:36)
at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreReferrals(AbstractLdapNamingEnumeration.java:330)
at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(AbstractLdapNamingEnumeration.java:227)
at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMore(AbstractLdapNamingEnumeration.java:189)
at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreElements(AbstractLdapNamingEnumeration.java:117)
at TestLdap.query(TestLdap.java:43)
at TestLdap.main(TestLdap.java:19)
Post refactor we have a NamingEnumeration interface which is implemented by an abstract class AbstractLdapNamingEnumeration.
3 implementations, LdapBindingEnumeration, LdapNamingEnumeration & LdapSearchEnumeration extend AbstractLdapNamingEnumeration.
Each implementation has its own getReferredResults method which returns an object of the individual implementations type.
Unfortunately this falls down (as can be seen in the stack) because an LdapNamingEnumeration.getReferredResults can call refCtx.search, which returns an LdapSearchEnumeration. This leads to a situation where LdapNamingEnumeration needs to cast an LdapSearchEnumeration which results in the exception above.
-Rob
More information about the core-libs-dev
mailing list