Alterando o conteudo de um .class [resolvido]

E ae… blz?

Estou desenvolvendo um projeto com jsp/mysql etc

Peguei um modulo com um amigo meu tambem usando servlets etc etc

Esta ocorrendo um problema na execucao de um servlet para envio de correspondencia…

O modulo .class esta com um apontamento dentro dele para um banco de dados do meu amigo(jdbc/filial02) quando o certo seria (jdbc/curitiba)

Estava tentando edita-lo para alterar, mas nao consegui(apesar de saber q ele é gerado apartir do java)

Alguem tem alguma ideia ?

obrigado pela força

filial02
curitiba

As strings têm exatamente o mesmo comprimento (que sorte!), então não há nada que proíba você de editar com um editor de bytes o .class e testar para ver se é realmente esse o seu problema.

Entao, o tamanho de fato nao é o mesmo, pois o apontmento certo é jdbc/curitibapr :frowning:

No netbeans eu tentei “limpar e executar” o codigo de novo, mas quando vou no .CLASS ele diz que nao tem nenhum codigo para ser visualizado. Utilizei um editor e alterei na mao no nome, mas qdo mandei para o site, ele deu erro alegando diferença de versao na classe :confused:

[quote=entanglement] filial02 curitiba

As strings têm exatamente o mesmo comprimento (que sorte!), então não há nada que proíba você de editar com um editor de bytes o .class e testar para ver se é realmente esse o seu problema. [/quote]

import java.lang.reflect.Field;

public class Teste {
   
    private String a;
   
    public String getA() {
        return a;
    }
   
    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
        Teste a = new Teste();
        Field[] f = a.getClass().getDeclaredFields();
       
        for (Field f1 : f) {
            System.out.println(a.getA());
            f1.set(a, "aaaa");
            System.out.println(a.getA());
        }
    }

}

não sei se ajuda, mas…

É verdade, reflection pode resolver. Basta saber o nome do campo onde o nome do banco está guardado.

Porém note que isso não altera o bytecode. Altera somente a variável em runtime. Portanto seria necessário fazer isso toda vez que iniciar o programa.

Bem galera,

Resolvi da seguinte forma: compilei somente a classe(atraves do netbeans), envie somente ela(com a alteracao ja)

valeu pela força

Alterar o código fonte e gerar os bytecodes novamente pode resolver seu problema.