动态方法中的InvocationTargetException

时间:2015-08-25 14:48:59

标签: java exception dynamic cdi

我在这里遇到了一个奇怪的情况..

首先,我从我的bean中获取此方法:

List<temp> t; 
for (temp t : tempList) { 
    if ((Branch b = branchMap.get(t.getBranchID)) != null) { 
        if ((user u = b.getUsers.get((t.getFirstName() + t.getLastName()) != null) { 
            user.getPhonse.add(new Phone(t.getPhoneType(), t.getPhoneNumber())) 
        } 
    } else { 
        List<Phone> phonse = new ArrayList<Phone>();
        phonse.add(new Phone(t.getPhoneType(), t.getPhoneNumber()));

        Map<String,String> users = new hashMap<String,String>();
        users.put(t.getFirstName() + t.getLastName(), new user(t.getFirstName(), t.getLastName(), phones);

        branchMap.put(t.getBranchID, new Branch(t.getBranchID(), new hashMap<String,String>().put(t.getFirstName() + t.getLastName(), new user(t.getFrstName(), t.getLastName(), new List<Phone>)))))) 
    } 
} 

在我的backbean:

#{segurancaBean.callSubAcaoMethod(subAcao, moduloBean.class.name, modulo.id)}

所以,我传递方法名称(subAcao),bean类和ID

这里我得到了我的方法:

public void callSubAcaoMethod(Acao acao, String bean, Long id){
try {
    Class<?> clazz = Class.forName(bean);
    Method method = clazz.getMethod(acao.getTipoAcao().getNmBean(), Long.class);
    Object obj = clazz.newInstance();
    Object ins = new Object();
    ins = method.invoke(obj, id);

} catch (ClassNotFoundException | SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException ex) {
    Logger.getLogger(SegurancaBean.class.getName()).log(Level.SEVERE, null, ex);
}
}

}

如果我只打印一条消息,它可以工作,但是如果我尝试使用DAO来查找对象,我会在这一行中得到InvocationTargetException:

@Override
public void btnAlterar(Long id){
Modulo m = new Modulo();
m = moduloServico.pesquisar(id);

抱歉英语不好

详细地说,我在视图中添加了一个直接调用方法的按钮(没有动态)。它工作正常。 :/

这是完整的堆栈跟踪

ins = method.invoke(obj, id);

1 个答案:

答案 0 :(得分:1)

由于您使用Class.newInstance()来实例化该类,因此不会发生注释(范围和生命周期管理)的CDI处理。因此,您希望注入的任何内容都不会被注入,而是保持初始化为null

请参阅https://stackoverflow.com/a/24852542/1172714