Duplicate :
|
|
Relates :
|
|
Relates :
|
FULL PRODUCT VERSION : java version "1.7.0" Java(TM) SE Runtime Environment (build 1.7.0-b147) Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode, sharing) ADDITIONAL OS VERSION INFORMATION : Confirmed under Windows Vista and 7 32bit, XP and 64bit untested A DESCRIPTION OF THE PROBLEM : XMLEncoder fails to encode a bean when it extends an interface with getters that have generic type. REGRESSION. Last worked in version 7 STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : run the test case under java 7 EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - output from java 6: <?xml version="1.0" encoding="UTF-8"?> <java version="1.6.0_22" class="java.beans.XMLDecoder"> <object class="test.Test$WorkingBean"> <void property="cod_id"> <int>99</int> </void> </object> <object class="test.Test$BrokenBean"> <void property="cod_id"> <int>99</int> </void> </object> </java> ACTUAL - cod_id doesn't get serialised output from java 7: java.lang.NoSuchMethodException: <unbound>=Test$BrokenBean.getCod_id(); Continuing ... <?xml version="1.0" encoding="UTF-8"?> <java version="1.7.0" class="java.beans.XMLDecoder"> <object class="test.Test$WorkingBean"> <void property="cod_id"> <int>99</int> </void> </object> <object class="test.Test$BrokenBean"/> </java> ERROR MESSAGES/STACK TRACES THAT OCCUR : java.lang.NoSuchMethodException: <unbound>=Test$BrokenBean.getCod_id(); Continuing ... REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- package test; import java.beans.XMLEncoder; public class Test { public static class WorkingBean { private Integer cod_id; public WorkingBean() { } public Integer getCod_id() { return cod_id; } public void setCod_id(Integer cod_id) { this.cod_id = cod_id; } } public static class BrokenBean implements WithCodId<Integer> { protected Integer cod_id; public BrokenBean() { } public Integer getCod_id() { return cod_id; } public void setCod_id(Integer cod_id) { this.cod_id = cod_id; } } public static interface WithCodId<T extends Number> { T getCod_id(); void setCod_id(T value); } public static void main(String[] args) { WorkingBean b1 = new WorkingBean(); b1.setCod_id(99); BrokenBean b2 = new BrokenBean(); b2.setCod_id(99); XMLEncoder enc = new XMLEncoder(System.out); enc.writeObject(b1); enc.writeObject(b2); enc.close(); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : Hardcode type in the WithCodId interface.
|