Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Não consegue remover arquivo convertido pela rota em Camel

Caros amigos,

Tenho uma rota com a seguinte informação: from("file:gws-pkupdate?readLockRemoveOnCommit=true").

Quando a rota é executada, ele não consegue remover o arquivo, exibindo o seguinte erro: Caused by: java.io.IOException: Renaming file from 'C:\gws-prot-pkupdate-sucess\gws-pkupdate\pkupdate_sucess.xml' to 'gws-pkupdate.camel\pkupdate_sucess.xml' failed: Cannot delete file 'C:\gws-prot-pkupdate-sucess\gws-pkupdate\pkupdate_sucess.xml' after copy succeeded

Quando a rota é interrompida, ele consegue remover o arquivo sem problemas. E se a rota recebe o código abaixo, tudo funciona corretamente, mas o arquivo é mantido: from("file:gws-pkupdate?noop=true&readLockRemoveOnCommit=true").

O que preciso fazer para resolver tal problema?

Obrigado.

6 respostas

Oi André,

isso parece ser um problema da JVM especifica pra Windows. Qual JVM vc está usando?

abs

A versão é 1.8.0.111

Oi Andre,

procurando um pouco nos forums, achei um comentário do Claus Ibsen para resolver o problema.

Ele pede para converter o body da mensagem para byte[]:

file(...).
  convertBodyTo(byte[].class) 
 ....

Tem como testar isso?

abs

Caro Nico,

Agradeço a atenção dispensada.

A rota foi concluída mesmo com a linha incluída, mas o erro persiste, ele não consegue remover o arquivo.

Segue o código:

from("file:gws-pkupdate"). routeId("rota-prof-file"). marshal() .xmljson(). convertBodyTo(byte[].class). setHeader(Exchange.CONTENT_TYPE, constant("application/json")). setHeader(Exchange.HTTP_CHARACTER_ENCODING, constant("UTF-8")). setHeader("CamelFileName", simple("${file:name.noext}.json")). log("Evento ProtFile: ${body}").

Oi Andre,

só para ter certeza, tem como colocar o convertBodyTo(byte[].class) logo após o from?

abs

solução!

Funcionou, foi necessário apenas colocar o convertBodyTo(byte[].class) no lugar certo. Segue o código correto:



from("file:gws-pkupdate").
            routeId("rota-prof-file").
            convertBodyTo(byte[].class).
            marshal()
                .xmljson().        
                setHeader(Exchange.CONTENT_TYPE, constant("application/json")).
                setHeader(Exchange.HTTP_CHARACTER_ENCODING, constant("UTF-8")).
                setHeader("CamelFileName", simple("${file:name.noext}.json")).
                log("Evento ProtFile: ${body}").    
            to("file:jsonmanager")
                .log(">>>FIM DA ROTA ProtFileRouter");