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