Escrever xml DENTRO DE UM JAR!

Ola galera…

Tenhu q atualizar um XML de configuracao do hibernate “hibernate.cfg.xml”, que está dentro de meu projeto, dinamicamente… o projeto já está dentro de um .jar, e o arquivo xml está no pacote padrao, ou seja, já na raiz do .jar se encontra o “hibernate.cfg.xml”…

Preciso atualizar dinamicamente uma property de lah… a atualizacao do xml eu jah fiz, oq nao estou conseguindo eh fazer o “update” no arquivo…

Eu abro, seto a property, mas na gravação dah erros…

Jah tentei de várias formas, mas ainda nao deu certo…

faço assim a abertura e o update do xml:

BufferedReader reader = new BufferedReader( new InputStreamReader( getClass().getResourceAsStream( "/hibernate.cfg.xml" )));
            
//Recuperamos o elemento root
org.jdom.Element principal = d.getRootElement();

//Recuperamos os elementos filhos (children)
List elements = principal.getChildren();
Iterator i = elements.iterator();

//Iteramos com os elementos filhos, e filhos do dos filhos.. aki eh um ifizinho, pois eh somente o primeiro q quero
org.jdom.Element element = (i.hasNext()) ? (org.jdom.Element) i.next() : null;

element.getChild("property").setText("texto");

Até aí blz, mas nao consigo setar o arquivo xml…

tentei assim:

org.jdom.output.XMLOutputter xout = new org.jdom.output.XMLOutputter();
                xout.output(d,new BufferedWriter(new OutputStreamWriter( new FileOutputStream( getClass().getResource( "/hibernate.cfg.xml" ).getFile() ) )));

Mas, como pesquisei, arquivos xml nao eh um File, entao dah erro de formacao de arquivos…

Estou executando o projeto pelo jar…

Alguem por favor me ajuda!!!

jopss :stuck_out_tongue:

ops… “…Mas, como pesquisei, arquivos xml nao eh um File, entao dah erro de formacao de arquivos…”

Quis dizer, arquivos JAR nao eh um file…

me ajudem ae galera… jah to louco com isso…

jopss :stuck_out_tongue:

Olha…

Desta maneira você realmente não vai conseguir atualizar o JAR…

Se for o caso, extraia o arquivo para um diretório temporário… (Use o System.getProperty(“java.io.tmpdir”);

Atualize-o no disco (fora do jar) primeiramente e depois use o pacote java.util.jar para sobrescrever este arquivo no seu JAR original.

Vo tenta… mas o JAR q eu tenho q atualizar eh o mesmo que a aplicacao está rodando…

jopss :stuck_out_tongue:

Em última instância, um XML é um File sim(para vc movê-lo, copiá-lo, etc) . Só que para gravar informações dentro do XML vc deve respeitar a sua estrutura então sim está correto gravar o arquivo com o XMLOutputter.

O problema é que primeiro vc deve gravar o arquivo fora do JAR, e depois atualizar o JAR, deletando a entrada do xml a atualizar, e atualizando (putEntry) com o arquivo xml atualizado.

Mas tem certeza de que é a única solução ao seu problema ? Se o seu jar já foi carregado pela VM, atualizar o jar no diretório de isntalação não vai adiantar de nada.

Pior q eh… vo ve se faço um refactory aki pra simplificar algo… pq assim tah dificil mesmo…

jopss :stuck_out_tongue:

Simplifique mesmo companheiro, porque não é possível alterar um arquivo dentro de um jar. Você vai ter que extrair tudo, alterar o que tiver que ser alterado, reempacotar o jar e depois tentar colocar ele lá no lugar do outro jar, o que, dependendo do seu servidor de aplicação, não vai poder ser feito.