Copiar propriedades de um bean para o outro - RESOLVIDO

1 resposta
javer
Me atrapalhei um pouco nesse código e não estou conseguindo pegar os "valores" retornados pelos gets e colocar nos sets do bean Fornecedor:
Fornecedor item = (Fornecedor) comboListagem.getSelectedItem();
if (item.getCodigo() > 0) {

    Method[] mo = item.getClass().getDeclaredMethods();
    Method[] md = fornecedor.getClass().getDeclaredMethods();

    for (int i = 0; i < mo.length; i++) {
        Method m1 = mo[i];
        if (m1.getName().startsWith("get") || m1.getName().startsWith("is")) {
            Object value;
            try {
                value = m1.invoke(item, new Object[]{});
                System.out.println(m1.getName() + " = " + value); // aqui mostra corretamente o que vem do get
                (md[i]).invoke(fornecedor, new Object[]{value}); // aqui: java.lang.IllegalArgumentException: wrong number of arguments
            } catch (IllegalAccessException ex) {
                Logger.getLogger(Lib.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalArgumentException ex) {
                Logger.getLogger(Lib.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InvocationTargetException ex) {
                Logger.getLogger(Lib.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            continue;
        }
    }
Preciso de uma luz.

1 Resposta

javer
Resolvido:
Method[] mo = item.getClass().getDeclaredMethods();
for (int i = 0; i < mo.length; i++) {
    Method m1 = mo[i];
    if (m1.getName().startsWith("get") || m1.getName().startsWith("is")) {
        Object value;
        String metodoSet = "set";
        String sufixo = "";
        if (m1.getName().startsWith("get")) {
            sufixo = m1.getName().substring(m1.getName().indexOf("get") + 3, m1.getName().length());
        } else {
            sufixo = m1.getName().substring(m1.getName().indexOf("is") + 2, m1.getName().length());
        }
        metodoSet += sufixo;

        try {
            value = m1.invoke(item, new Object[]{});
            Method m3 = null;
            if (value != null) {
                Class classe = value.getClass();
                if (classe.getName().equals("java.sql.Date")) {
                    classe = java.util.Date.class;
                }
                m3 = fornecedor.getClass().getMethod(metodoSet, classe);
                m3.invoke(fornecedor, new Object[]{value});
            } else {
            }
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Lib.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(Lib.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(Lib.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchMethodException ex) {
            Logger.getLogger(FornecedorUI.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SecurityException ex) {
            Logger.getLogger(FornecedorUI.class.getName()).log(Level.SEVERE, null, ex);
        }
    } else {
        continue;
    }
}
Criado 7 de setembro de 2009
Ultima resposta 7 de set. de 2009
Respostas 1
Participantes 1