Description
Problem Description:
According to our document http://books.zkoss.org/wiki/ZK%20Developer's%20Reference/MVVM/ViewModel/Initialization, child class can have a initial method. But if we create a inner anonymous inner class', its initial method is not invoked.
Steps to Reproduce
- run attached zul innerClass-init.zul
Actual Result
an exception throw
java.lang.IllegalAccessException: Class org.zkoss.bind.impl.ParamCall can not access a member of class support.mvvm.OuterVM$1 with modifiers "public" at file:/D:/git/zkcase/src/main/webapp/mvvm/innerClass-init.zul, line:4
Expected Result
"initialized" is displayed.
Root Cause:
A JVM bug, http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4819108
Using an object of an inner class, which defines public methods cannot be invoked via "Method.invoke(...)".
Proposed Solution
package org.zkoss.bind.impl; public class ParamCall { public void call(Object base, Method method) { ... //check whether if the method is public or not, if it's public open the access method.setAccessible(true); // fix method.invoke(base, params); } }