JDK-4906055 : java.beans.Statement.invoke() uses incorrect string compare
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.beans
  • Affected Version: 1.4.2
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_2000
  • CPU: x86
  • Submitted: 2003-08-13
  • Updated: 2003-09-08
  • Resolved: 2003-09-08
Related Reports
Duplicate :  
Description

Name: gm110360			Date: 08/13/2003


FULL PRODUCT VERSION :
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)

FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]

A DESCRIPTION OF THE PROBLEM :
java.beans.Statement.invoke() contains conditional code to
test if the method name is "new" or "newInstance".  The code
looks like:

Statement.java:line 409:
            if (methodName == "new") {
                methodName = "newInstance";
            }
            // Provide a short form for array instantiation
by faking an nary-constructor.
            if (methodName == "newInstance" &&
((Class)target).isArray()) {

This does not work correctly with my application because it
is using a different string pool, thus the comparison is
failing.  When the comparison fails the constructor lookup
fails, and the serialization fails.

I believe that it would be more correct for the code to look
like:

           if (methodName.equals("new")) {
                methodName = "newInstance";
            }
            // Provide a short form for array instantiation
by faking an nary-constructor.
            if (methodName.equals("newInstance") &&
((Class)target).isArray()) {

then it woudl succeed regardless of the string origin.



STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Let me know if you want more details, but there are some
rather obscure conditions that are causing the problem to
appear.

EXPECTED VERSUS ACTUAL BEHAVIOR :
I expected the serialization scheme to work, and it dod not
because it could not find my constructor, and instead was
searching for a "new" method.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.NoSuchMethodException: <unbound>=Wrapper.newInstance(Label0);
        at java.beans.Statement.invoke(Statement.java:489)
        at java.beans.Expression.getValue(Expression.java:101)
        at java.beans.Encoder.getValue(Encoder.java:84)
        at java.beans.Encoder.get(Encoder.java:186)
        at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:9
7)
        at java.beans.Encoder.writeObject(Encoder.java:55)
        at java.beans.XMLEncoder.writeObject(XMLEncoder.java:250)
        at java.beans.Encoder.writeExpression(Encoder.java:260)
        at java.beans.XMLEncoder.writeExpression(XMLEncoder.java:351)
        at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:1
00)
        at java.beans.Encoder.writeObject(Encoder.java:55)
        at java.beans.XMLEncoder.writeObject(XMLEncoder.java:250)
        at java.beans.Encoder.writeObject1(Encoder.java:192)
        at java.beans.Encoder.cloneStatement(Encoder.java:205)
        at java.beans.Encoder.writeStatement(Encoder.java:236)
        at java.beans.XMLEncoder.writeStatement(XMLEncoder.java:320)
        at java.beans.DefaultPersistenceDelegate.invokeStatement(DefaultPersiste
nceDelegate.java:242)
        at java.beans.java_awt_Container_PersistenceDelegate.initialize(MetaData


etc....

REPRODUCIBILITY :
This bug can be reproduced always.
(Incident Review ID: 173319) 
======================================================================

Comments
EVALUATION Duplicate of 4653179. ###@###.### 2003-09-08
08-09-2003