我正在尝试仅在GWT应用程序的服务器端使用反射。我已经在非GWT示例中实现了一个基本示例,可以在下面看到。
这段代码在本地运行正常。但是当我尝试在GWT服务器端类中运行它时,它不起作用,而是返回错误信息。
如果我将参数更改为字符串(而不是'PassMe'类),它可以正常工作。为什么不能传递我的'PassMe'类?我认为这可能与序列化有关,尽管是100%的服务器代码,但我也没有成功过。
非常感谢您提前给予的任何帮助。
package com.xyz.reflection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class EntryPoint {
/**
* @param args
*/
public static void main(String[] args) {
ClassLoader dynClassLoader = ClassLoader.getSystemClassLoader();
Class<?> dynClass = null;
try {
dynClass = dynClassLoader.loadClass("com.xyz.reflection.RunMe");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Object dynInstance = null;
try {
dynInstance = dynClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Method dynMethod = null;
try {
try {
dynMethod = dynInstance.getClass().getMethod("returnSid",
new Class[] { PassMe.class });
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
String returnValue = (String) dynMethod.invoke(dynInstance,
new Object[] { new PassMe() });
System.out.println("Return Value: " + returnValue.toString());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
使用恰如其名的:
package com.xyz.reflection;
public class PassMe {
private String sid = "DEFAULT_SID";
public PassMe() {
this.sid = "INITIATED_SID";
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
}
and:
package com.xyz.reflection;
public class RunMe {
public String returnSid(PassMe s) {
return s.getSid();
}
}
这段代码在本地运行正常。但是当我尝试在GWT服务器端类中运行它时,它不起作用,而是返回错误信息。
java.lang.NoSuchMethodException: com.xyz.reflection.RunMe.returnSid(com.xyz.reflection.PassMe)
如果我将参数更改为字符串(而不是'PassMe'类),它可以正常工作。为什么不能传递我的'PassMe'类?我认为这可能与序列化有关,尽管是100%的服务器代码,但我也没有成功过。
非常感谢您提前给予的任何帮助。