Problema vraptor + restfulie [Resolvido]

sim está no web.xml definido o encoding

Só pra confirmar, os dados ficam com o encoding errado dentro das propriedades do boleto?

se vc faz um log delas fica tudo certo? ou os dados estão errados só qdo vc salva no banco?

Lucas ,

Os dados chegam truncados dentro da entidade depois que o vraptor serializa os dados pra classe novamente , se eu fizer get de uma propriedade que veio com acentuação já vem truncado .

Fiz um teste com esse software http://code.google.com/p/rest-client/ fazendo um post do corpo em utf e application/xml ai o vraptor nao trunca do lado server não , então leva a crer ser algo no restfulie mesmo que está faltando.

@Consumes  
    @Post  
    public void create(Boleto boleto) {  
        //Impressao de dados recebidos ja chegam truncado antes da inserção e consequentemente insere truncado no banco 
       System.out.println(boleto.getDiscriminacao());

        this.repositoryBoleto.create(boleto);  
        routes.uriFor(BoletoController.class).dados(boleto);  
        this.result.use(Results.status()).created(routes.getUri());  
    }  

Pr(truncado)a

tenta passar isso nos argumentos da JVM que executa o cliente: -Dfile.encoding=UTF8

Não deu certo do mesmo jeito continua truncando e mesmo que desse certo eu não poderia forçar inicialização de jvm com parametros , pois as aplicação são ambas web e vai ficar em cloud e nao tenho controle sobre a jvm .

Lendo o link .
http://hc.apache.org/httpclient-3.x/charencodings.html

"The request or response body can be any encoding, but by default is ISO-8859-1. The encoding may be specified in the Content-Type header, for example:

Content-Type: text/html; charset=UTF-8

In this case the application should be careful to use UTF-8 encoding when converting the body to a String or some characters may be corrupt. You can set the content type header for a request with the addRequestHeader method in each method and retrieve the encoding for the response body with the getResponseCharSet method.

If the response is known to be a String, you can use the getResponseBodyAsString method which will automatically use the encoding specified in the Content-Type header or ISO-8859-1 if no charset is specified.

Note that some document types, such as HTML and XML allow the author to specify the content type of the file. In this case, you should consult the appropriate standards regarding how to resovle any conflicts in the reported charsets."

Talvez seja algo na hora de construir o body do post dentro do restfulie que está corrompendo os caracteres ja que por padrão ele utiliza ISO-8859-1.

a serialização é feita com o XStream, precisaria mudar o encoding dele…

Bom fuçando no código achei o problema lucas , nem é no xstream nada é nesse trecho aqui conforme o link do apache alertava se o conteúdo fosse diferente de ISO-8859-1 .

HttpEntityEnclosingRequestBase verb = (HttpEntityEnclosingRequestBase) verbFor(method, uri);
			add(verb, headers);
			String string = writer.getBuffer().toString();
			//Está assim
                        //verb.setEntity(new StringEntity(string));
                        //Deveria estar assim 
                        verb.setEntity(new StringEntity(string,client.defaultCharset()));
			return execute(details, verb);

Fiz uma implementação aqui onde o charset seria setado desse modo na api ,na verdade o interessante seria deixar utf-8 por padrão e o usuário mudaria se quisesse não gosto muito da ideia ser iso-8859-1 por padrão .

//utilizando outro charset
return (Boleto) restfulie.withCharset("UTF-8")
				.at("http://localhost:8081/faturamento/boleto/create")
				.as("application/xml").accept("application/xml").post(boleto)
				.getResource();

Como faço pra compartilhar todas as classes no github com as modificações , não tenho muito contato com git preciso me atualizar nesse sentido , são 3 classes que devem ser alteradas pra ficar desse modo .

faça o seguinte:

clique em Fork

altere os arquivos que vc precisou modificar (dica, se vc digitar t pedaçoDoNomeDoArquivo ele começa a procurar)
faça os commits
mande um Pull Request descrevendo o que vc fez.

se quiser mexer com o git diretamente, baixe o código pra sua máquina:

git clone url do seu fork
git checkout -b encoding
// altere os arquivos
git commit -a -m "descrição do que vc fez"
git push origin encoding

daí é só ir no github e fazer um pull request.

[quote=Lucas Cavalcanti]faça o seguinte:

clique em Fork

altere os arquivos que vc precisou modificar (dica, se vc digitar t pedaçoDoNomeDoArquivo ele começa a procurar)
faça os commits
mande um Pull Request descrevendo o que vc fez.

se quiser mexer com o git diretamente, baixe o código pra sua máquina:

git clone url do seu fork
git checkout -b encoding
// altere os arquivos
git commit -a -m "descrição do que vc fez"
git push origin encoding

daí é só ir no github e fazer um pull request.[/quote]

Maravilha , vou fazer isso assim que possível e colocar um resolvido ja no tópico . Vlw pela ajuda de qualquer modo

Opa, galerinha do Restfulie, desculpem ressucitar o tópico mas tive o mesmo problema que o colega relatou e cheguei aqui. Vi que a correção foi feita no codigo fonte mas nao foi publicada (uso Maven), e já tem alguns meses que o bug foi corrigido…

Baixei o codigo no github e compilei um jar localmente aqui com esse ajuste, mas, não que o Lucas já não tenha o que fazer no VRaptor :lol: , espero que o projeto java do Restfulie não esteja “largado”…não está não né? hehe

Valeu!

O Restfulie não está largado, só está razoavelmente estável… em todo caso aceitamos contribuições :wink:

esse tópico deve ter se perdido no meu feed :wink:

Eu me lembro de ter enviado 2 pull request com correções relativas a encoding e serialização no GAE e problemas de headers também com case sensitive , pelo que vi nao foi feito merge ainda no master mesmo mandei o pull faz 5 meses atras . Ate fui baixar para atualizar esses dias atrás pra ver se tinha ja essa nova versão ja com essas correções e acabei tendo que utilizar de novo uma versao separada que no fim das contas coloquei no meu svn ja que pensei a mesma coisa que o projeto havia sido abandonado por algum motivo .

Abraços

Alguma previsão para atualização do Restfulie com o ajuste a ser realizado na classe ApacheDispatcher (https://github.com/caelum/restfulie-java/pull/46) ?

Boa tarde pessoal,

Coloquei os comentarios simples pra poder fazer o merge

Abraço!

[quote=Guilherme Silveira]Boa tarde pessoal,

Coloquei os comentarios simples pra poder fazer o merge

Abraço![/quote]

Já respondi la da uma olhada pra poder fazer o merge.