United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-5089488 : java.net.Socket checks for old-style impls

Details
Type:
Bug
Submit Date:
2004-08-19
Status:
Resolved
Updated Date:
2005-08-19
Project Name:
JDK
Resolved Date:
2005-08-19
Component:
core-libs
OS:
solaris_9
Sub-Component:
java.net
CPU:
generic
Priority:
P4
Resolution:
Fixed
Affected Versions:
6
Fixed Versions:

Related Reports
Backport:
Backport:
Relates:
Relates:

Sub Tasks

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.

                                    

Comments
SUGGESTED FIX

Webrev for the mustang:
http://oldsunweb.ireland/~mm72272/webrev/current/webrev.5089488/

Webrev for Tiger:
http://javaweb/~tm157638/webrevs/5089488/1.5.0/

Webrev for Mantis:
http://javaweb/~tm157638/webrevs/5089488/1.4.2/
                                     
2005-08-22
EVALUATION

I guess we need to call getDeclaredMethod() for each super-class
until we find the connect method.
                                     
2005-08-10
WORK AROUND

The workaround is to define the method on both classes.
                                     
2004-08-28
CONVERTED DATA

BugTraq+ Release Management Values

COMMIT TO FIX:
mustang


                                     
2004-08-28
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
                                     
2004-08-27



Hardware and Software, Engineered to Work Together