Relates :
|
|
Relates :
|
|
Relates :
|
My customer has experienced a difference in behaviour in how Java Beans are handled between JDK 1.4.2_05 and JDK1.4.2_12 Below are two example of how to reproduce this behaviour: Generic Reproducer: public class Test { class MyBean extends TestBean { public String getMyValue(int i){ return "abab"; } } class TestBean { private String myvalue="bla"; /* public String getMyValue(){ return myvalue; }*/ public void setMyValue(String my){ myvalue = my; } } public static void main(String[] args) throws Exception{ BeanInfo beanInfo = Introspector.getBeanInfo(MyBean.class); PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors(); for (int i = 0; i < descriptors.length; i++) { System.out.println(i); System.out.println(descriptors[i].getName()); System.out.println(descriptors[i].getPropertyType()); System.out.println(descriptors[i].getReadMethod()); System.out.println(descriptors[i].getWriteMethod()); System.out.println(); } } } Ouput using JDK 1.4.2_05: 0 class class java.lang.Class public final native java.lang.Class java.lang.Object.getClass() null 1 myValue class java.lang.String null public void Test$TestBean.setMyValue(java.lang.String) Ouput using JDK 1.4.2_12: 0 class class java.lang.Class public final native java.lang.Class java.lang.Object.getClass() null 1 myValue null null null As you can see the result of the introspection is different. I'll also show you the Web App, which resembles the behaviour we have initially identified: Deploy this war file to your application server: <<struts-test.ZIP>> Call the localhost:<yourport>/struts-test/forms/register3.jsp page, enter a valid email address and leave the pasword blank, click submit. Running the application server with JDK 1.4.2_05 will show you an error page saying that the pwd is invalid. If you run the application server with JDK 1.4.2_12 you will get a JspException, saying that the property "level" cannot be found. The offending Java Bean looks like this: public class Level1 { public String getLevel(){ return "level1"; } public String getLevel(int dummy){ return "int method level1"; } } From speaking with several engineers, I believe that this problem is similar (and related to) bug 4867168, which in turn, was caused by a regression introduced by the fix for 4750368. The problem was initially introduced in 1.4.2_06, but my customer has only just noticed as they are upgrading from 1.4.2_05 to 1.4.2_12. This issue does appear to be fixed in 1.5, but my customer is unable to move to this version at present.
|