我试图通过反射调用类中的方法。该方法位于ejb类中。我一直找不到方法。我编写了以下代码来调试这个问题。其中一个参数(在jar中定义的接口)似乎是相同的,但哈希码不同,这导致了问题。我已经验证了调用和调用代码中的jar版本。在调用代码中,各个调用的哈希码是相同的。但在调用代码的哈希码接口不断改变任何指针??
private static Method findMethod( Class<?> encapsulatingClass, Class<?>[] paramArray, String methodName) {
Method[] methods = encapsulatingClass.getDeclaredMethods();
Method method = null;
for (int i = 0; i < methods.length; i++) {
method = methods[i];
Class<?>[] paramTypes = method.getParameterTypes();
if (method.getName().equals(methodName) ) {
if(paramTypes.length == paramArray.length){
for(int j = 0;j<paramTypes.length;j++){
if(!paramTypes[j].equals(paramArray[j])){
Debug.info("Method argument " + paramTypes[j].getName() + " hashcode = "
+ paramTypes[j].hashCode() + "Parameter " + paramArray[j].getName() + " Hashcode = " +
paramArray[j].hashCode());
if(paramTypes[j].getName().equals(paramArray[j].getName())){
Debug.info("Atleast Parameter name seems to be same");
}else{
Debug.info("Strange cant find a diff can u??");
Debug.info("String 1 = " + paramTypes[j].getName() + " String 2 = " + paramArray[j].getName());
}
}
}
}
break;
}
}
return method;
}
看起来您有不同的类加载器,它们都包含该类的副本。尽管这些类可能是完全相等的,但是您不能互换地使用它们,除非您序列化了它们之间的对象(就像EJB远程调用所做的那样)。
当您的客户机和服务器运行在不同的jvm中,或者当您的应用服务器引入多个类加载器以提供应用程序隔离时,通常会发生这种情况。