package com.citic.util;
import java.lang.reflect.*;
import java.util.HashMap;
import com.citic.util.comm.*;
/**
* 根据某个对象的名称和方法去执行该方法
* @author db2admin
*
*/
public class ReflectUtil {
public static String methodName="execute";
public static int debuglevel=8;
public static HashMap<String,String[]> preexecute(String className,String xmlOder,String msgid){
//返回有一般预设两个code,message
return execute(className,"pre"+methodName,xmlOder,msgid);
}
public static HashMap<String,String[]> execute(String className,String xmlOder,String msgid){
return execute(className,methodName,xmlOder,msgid);
}
@SuppressWarnings("unchecked")
public static HashMap<String,String[]> execute(String className,String methodName,String xmlOder,String msgid) {
HashMap<String,String[]> hm=new HashMap<String,String[]>();
Method m1;
Class<?> clazz;
Object obj;
String tb = ConfigFileUtil.getValue("SCHEMAPREFIX1")
+ ConfigFileUtil.getValue("T" + xmlOder);
CommFun.log(debuglevel, "调用类:" + className + ",方法:" + methodName
+ ",参数:" + msgid+",表名:"+tb+",xmlOrder:"+xmlOder);
try {
if("".equals(tb)||tb==null){
throw new Exception(xmlOder+"对应表名为空");
}
clazz=Class.forName(className);
obj=clazz.newInstance();
//解决父类调用问题
while(true){
try{
m1=obj.getClass().getDeclaredMethod(methodName, String.class,String.class,String.class);
CommFun.log(clazz.toString()+","+obj.toString()+","+m1.toString());
}catch(NoSuchMethodException ne){
clazz=clazz.getSuperclass();
obj=clazz.newInstance();
CommFun.log(clazz.toString()+","+obj.toString());
continue;
}
break;
}
hm=(HashMap<String, String[]>) m1.invoke(obj,xmlOder,msgid,tb);
} catch (Exception e) {
CommFun.log("---------");
e.printStackTrace();
CommFun.log("["+e.toString()+"]");
}
return hm;
}
}