JDK-2128660 : java.net.Socket checks for old-style impls
  • Type: Backport
  • Backport of: JDK-5089488
  • Component: core-libs
  • Sub-Component: java.net
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2005-08-11
  • Updated: 2011-12-20
  • Resolved: 2005-12-22
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other JDK 6
5.0u7 b01Fixed 6Fixed
Description
We note that BugID: 4674826 is fixed in 142 release.

However, java.net.Socket checks for old-style impls like this:

    private void checkOldImpl() {
    if (impl == null)
        return;
    // SocketImpl.connect() is a protected method, therefore we need to use
    // getDeclaredMethod, therefore we need permission to access the member
    try {
        AccessController.doPrivileged(new PrivilegedExceptionAction() {
            public Object run() throws NoSuchMethodException {
            Class[] cl = new Class[2];
            cl[0] = SocketAddress.class;
            cl[1] = Integer.TYPE;
            impl.getClass().getDeclaredMethod("connect", cl);
            return null;
            }
        });
    } catch (java.security.PrivilegedActionException e) {
        oldImpl = true;
    }
    }

However, my understanding is that this will exclude inherited methods on the impl. In our instance we have a BSocketImpl that inherits from ASocketImpl where only ASocketImpl has the appropriate connect() method. java.net.Socket therefor wrongly assumes that it is an old-style impl.
*** (#1 of 1): 2004-08-27 22:42:02 PDT ###@###.###
*** Last Edit: 2005-08-10 06:57:10 PDT ###@###.###

Comments
SUGGESTED FIX Webrev for Tiger: http://javaweb/~tm157638/webrevs/5089488/1.5.0/
22-09-2005

EVALUATION Indeed, getDeclaredMethod throws a NoSuchMethodException if the protected method was inherited, but getMethod() will throw the same exception no matter what because the method is protected. We need to find a better test for Mustang. ###@###.### 2004-08-27 *** (#1 of 2): 2004-08-27 22:44:56 PDT ###@###.### I guess we need to call getDeclaredMethod() for each super-class until we find the connect method. *** (#2 of 2): 2005-08-10 06:57:10 PDT ###@###.###
25-08-2005