내 Java 어플리케이션의 런타임에 (haan.java라는 이름의) 클래스를 생성 중입니다. 이 클래스의 객체는 Oracle Coherence Cache에 삽입됩니다. 캐시에서 객체 (tempHaan)를 가져올 때 유형은 haan입니다.동적 객체에 대한 반사 메소드 호출
오류 라인 "개체 발생 :"개체 선언 클래스의 인스턴스가 아닌 java.lang.IllegalArgumentException가 "나는이 객체 (tempHaan)의 메소드를 호출 할 때, 나는 오류 가 무엇입니까 invoke = methodgetHash.invoke (tempHaan, null); "
PFB the code:
NamedCache cacheConn;
CacheFactory.ensureCluster();
NamedCache cacheConnHaan = CacheFactory.getCache("Haan");
Class cls = null;
File f = new File(rtomProperties.getPropertyValue("pojoToBuild"));
try {
ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
URLClassLoader cl = new URLClassLoader(new URL[] { f.toURI().toURL() },
currentThreadClassLoader);
Object tempHaan;
cls = Class.forName(rtomProperties.getPropertyValue("pojoPackageLocation").concat(".haan"), true, cl);
System.out.println("*************** the class is **********"
+ cls.newInstance().getClass().toString());
System.out.println("******DONE LOADING");
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class clazz = URLClassLoader.class;
// Use reflection
Method m = clazz.getDeclaredMethod("addURL", new Class[] { URL.class });
m.setAccessible(true);
URL ur = f.toURI().toURL();
m.invoke(classLoader, new Object[] { ur });
Thread.currentThread().getContextClassLoader().getResourceAsStream("context.xml");
tempHaan = cacheConnHaan.get(aan);
System.out.println("*************AFTER" + tempHaan.getClass().toString());
System.out.println("*************tempHaan: "+tempHaan.toString());
Class[] paramObject = new Class[1];
paramObject[0] = Object.class;
Method methodgetHash = null;
Class noparams[] = {};
methodgetHash = cls.getDeclaredMethod("getHash", noparams);
Object temp = cls.newInstance();
Object invoke = methodgetHash.invoke(tempHaan, null);
key = (String) invoke;
System.out.println("key for the record: " + key);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
System.out.println("******not instantiated");
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NullPointerException npe) {
System.out.println("Hash-Aan mapping not found for aan " + aan);
continue;
}
이 모든 이유는 무엇입니까? 지나치게 복잡하고 무의미한 것처럼 보입니다. – Kayaman