Problema com "java reflection call method"

Amigos bom dia.

Estou enfrentando o seguinte problema gostaria evitar um monte de IFs denescessarios na minha aplicação então estou tentando desenvolver chamada aos methodos dinamicos. Mais estou tendo grande dificuldades.

Segue exemplo:

public class Export extends HttpServlet{

protected void service(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException{
			
	Aprovisionamento aprov = new Aprovisionamento();
	aprov.setDataInicial(dtInicial);
	aprov.setDataFinal(dtFinal);
	aprov.setBoolPaginacao(false);
	
	AprovisionamentoDAO dao = new AprovisionamentoDAO();
	List<Aprovisionamento> aprovs = dao.search(aprov);

	Object obj;
	String methodExport = "createXSL";
	
	Method method = obj.getClass().getMethod(methodExport,new Class[]{HttpServletResponse.class , [b]List<Aprovisionamento>.class[/b]});     
	method.invoke(obj,new Object[]{response,aprovs});

}
}

Erro encontra-se na parte negrita do código.
desde ja obrigado.

Poderia mostrar um exemplo de como ficaria o item 1 e 2.

[quote=wellington.nogueira]Talvez você já tenha conseguido tua resposta, mas segue um exemplo:

[code]package br.com.teste.reflection;

import java.lang.reflect.Method;

public class Main {

public static void main(String[] args) {
	instanciandoEExecutandoMetodo();
	executandoMetodoDeObjetoInstanciado();
	executandoMetodoEstatico();
	
}

private static void instanciandoEExecutandoMetodo() {
	//Há duas formas de obter a instância de um objeto
	try {
		//Vou usar esta mas ambas funcionam.
		Class classTesteMe1 = Class.forName("br.com.teste.reflection.TesteMe");
		Class classTesteMe2 = TesteMe.class;
		
		Method method = classTesteMe1.getMethod("method", String.class, Integer.TYPE);
		
		Object obj = classTesteMe1.newInstance();
		
		Object ret = method.invoke(obj, "valor", 0);
		
		System.out.println(ret);
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}

private static void executandoMetodoDeObjetoInstanciado() {
	//Objeto instanciado. Se não fizer isso vai dar erro
	TesteMe testeme = new TesteMe();
	
	try {
		//Para obter o método há duas formas.
		//Vou usar esta mas ambas funcionam
		Method method1 = testeme.getClass().getMethod("method", String.class, Integer.TYPE);
		Method method2 = TesteMe.class.getMethod("method", String.class, Integer.TYPE);

		Object ret = method1.invoke(testeme, "outro valor", 1);
		System.out.println(ret);

	} catch (Exception e) {
		e.printStackTrace();
	}
}

private static void executandoMetodoEstatico() {
	//Para este caso, o método é estático, logo não precisa de instância do objeto
	try {
		Method method3 = TesteMe.class.getMethod("staticMethod", String.class, Integer.TYPE);
		Object staticret = method3.invoke(null, "static", 2);
		System.out.println(staticret);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

}

class TesteMe {
public int method(String param, int retorno) {
System.out.println(param);
return retorno;
}

public static int staticMethod(String param, int retorno) {
	System.out.println(param);
	return retorno;
}

}[/code][/quote]
Starcraft, muito bom o seu exemplo.
:slight_smile:

No caso,
Primeiro vc precisa ter uma instância criada do objeto (vc declarou o objeto, mas não o instânciou).
Segundo, seu objeto precisa possuir os métodos que vai chamar.

Terceiro: use as tags CODE para melhorar a leitura de teu tópico.

Talvez você já tenha conseguido tua resposta, mas segue um exemplo:

[code]package br.com.teste.reflection;

import java.lang.reflect.Method;

public class Main {

public static void main(String[] args) {
	instanciandoEExecutandoMetodo();
	executandoMetodoDeObjetoInstanciado();
	executandoMetodoEstatico();
	
}

private static void instanciandoEExecutandoMetodo() {
	//Há duas formas de obter a instância de um objeto
	try {
		//Vou usar esta mas ambas funcionam.
		Class classTesteMe1 = Class.forName("br.com.teste.reflection.TesteMe");
		Class classTesteMe2 = TesteMe.class;
		
		Method method = classTesteMe1.getMethod("method", String.class, Integer.TYPE);
		
		Object obj = classTesteMe1.newInstance();
		
		Object ret = method.invoke(obj, "valor", 0);
		
		System.out.println(ret);
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}

private static void executandoMetodoDeObjetoInstanciado() {
	//Objeto instanciado. Se não fizer isso vai dar erro
	TesteMe testeme = new TesteMe();
	
	try {
		//Para obter o método há duas formas.
		//Vou usar esta mas ambas funcionam
		Method method1 = testeme.getClass().getMethod("method", String.class, Integer.TYPE);
		Method method2 = TesteMe.class.getMethod("method", String.class, Integer.TYPE);

		Object ret = method1.invoke(testeme, "outro valor", 1);
		System.out.println(ret);

	} catch (Exception e) {
		e.printStackTrace();
	}
}

private static void executandoMetodoEstatico() {
	//Para este caso, o método é estático, logo não precisa de instância do objeto
	try {
		Method method3 = TesteMe.class.getMethod("staticMethod", String.class, Integer.TYPE);
		Object staticret = method3.invoke(null, "static", 2);
		System.out.println(staticret);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

}

class TesteMe {
public int method(String param, int retorno) {
System.out.println(param);
return retorno;
}

public static int staticMethod(String param, int retorno) {
	System.out.println(param);
	return retorno;
}

}[/code]