RFR - 8141148: LDAP "follow" throws ClassCastException with Java 8

Pavel Rappo pavel.rappo at oracle.com
Wed Jul 13 10:36:48 UTC 2016


It looks like it was a defect in the original generification done in 7072353.
Looks okay to me. Thanks.

> On 12 Jul 2016, at 22:13, Rob McKenna <rob.mckenna at oracle.com> wrote:
> 
> 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