Bug vraptor 3.2 x guice

7 respostas
boneazul

seguinte pessoal acho que o vraptor utilizando o guice com Container ta com problema no ponto do converter

package br.com.jslsolucoes.tagria.converters;

import java.util.ResourceBundle;

import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Converter;

@Convert(Double.class)
public class MoneyConverter implements Converter<Double> {
	public Double convert(String value, Class<? extends Double> type, ResourceBundle bundle) {
        System.out.println("Converting");
    	if (value.contains(",")) {
        	return Double.parseDouble(value.replace(".","").replace(",","."));
        } else return Double.parseDouble(value);
    }
}

Funciona corretamente utilizando o spring e nao funciona utilizando o guice…

liguei o de bug e nos pontos de registro ele emite.

23:28:05,872  INFO WebAppBootstrapFactory:50 - No static WebAppBootstrap found.
23:28:05,873  INFO BasicConfiguration:141 - br.com.caelum.vraptor.scanning = null
23:28:05,972 DEBUG GuiceComponentRegistry:61 - Binding class br.com.jslsolucoes.tagria.converters.MoneyConverter to class br.com.jslsolucoes.tagria.converters.MoneyConverter
23:28:05,976 DEBUG GuiceComponentRegistry:90 - Ignoring binding of class br.com.jslsolucoes.tagria.converters.MoneyConverter to class br.com.jslsolucoes.tagria.converters.MoneyConverter
23:28:05,977 DEBUG GuiceComponentRegistry:87 - Binding interface br.com.caelum.vraptor.Converter to class br.com.jslsolucoes.tagria.converters.MoneyConverter
23:28:05,979 DEBUG GuiceComponentRegistry:61 - Binding class br.com.jslsolucoes.tagria.controllers.IndexController to class br.com.jslsolucoes.tagria.controllers.IndexController
23:28:05,991 DEBUG GuiceComponentRegistry:90 - Ignoring binding of class br.com.jslsolucoes.tagria.controllers.IndexController to class br.com.jslsolucoes.tagria.controllers.IndexController
23:28:06,090 DEBUG ScopeLifecycleListener:66 - Registering lifecycle listeners for br.com.jslsolucoes.tagria.converters.MoneyConverter

Parece estar ignorando o componente nao sei o motivo

7 Respostas

Lucas_Cavalcanti

o suporte ao guice ainda está em beta, e essa parte dos converters ainda é uma parte meio bugada =(
tem uma issue registrada pra isso: http://github.com/caelum/vraptor/issues/#issue/270

vou ver se existe um workaround fácil pra resolver isso

G

Lucas, eu ia discutir isso contigo na issue, mas como abriram um tópico aqui, vamos lá…

Olhei por cima a implementação do guice… e pensei: ao invés de carregar os componentes padrão e depois sobrescrever com os customs, não dá para primeiro carregar algum mapa desses componentes e sobrescrever com os customs nesse mapa para depois registrar tudo?

G
Mas hein?!  :shock:  Double representando valores numéricos? Cuidado que você vai perder dinheiro ... use BigDecimal ou crie um tiny-type Money com um BigDecimal interno.

http://blog.caelum.com.br/2009/07/20/pequenos-objetos-imutaveis-e-tiny-types/
http://blog.caelum.com.br/2010/07/15/arredondamento-no-java-do-double-ao-bigdecimal/

Além disso você não precisa disso, pois o Vraptor  possui conversores para o formato brasileiro: http://vraptor.caelum.com.br/documentacao/componentes-utilitarios-opcionais/, onde diz Converters Localizados

Mas hein?! :shock: Double representando valores numéricos? Cuidado que você vai perder dinheiro aí… use BigDecimal ou crie um tiny-type Money com um BigDecimal interno.


Além disso você não precisa disso, pois o Vraptor já possui conversores para o formato brasileiro: http://vraptor.caelum.com.br/documentacao/componentes-utilitarios-opcionais/, onde diz Converters Localizados

Lucas_Cavalcanti

em todo caso, acho que esse snapshot deve corrigir o bug:

https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.2.1-SNAPSHOT/vraptor-3.2.1-20101020.025952-1.jar

pode testar pra mim por favor, boneazul?

Lucas_Cavalcanti

garcia-jj:
Lucas, eu ia discutir isso contigo na issue, mas como abriram um tópico aqui, vamos lá…

Olhei por cima a implementação do guice… e pensei: ao invés de carregar os componentes padrão e depois sobrescrever com os customs, não dá para primeiro carregar algum mapa desses componentes e sobrescrever com os customs nesse mapa para depois registrar tudo?

não é isso a causa desse bug. O problema é que no Spring os StereotypeHandlers só passam nos componentes registrados pela aplicação.
No Guice eles também passam pelos componentes registrados pelo VRaptor. Daí ele registra os converters do VRaptor duas vezes, sobrescrevendo o da aplicação.

E pq fazer na mão algo que o Guice já faz pra gente de graça? :wink:

G

Entendido :smiley:

Mas de graça não… a cada dia um pedaço da nossa alma fica para o google. Hehe

boneazul

Lucas Cavalcanti:
em todo caso, acho que esse snapshot deve corrigir o bug:

https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.2.1-SNAPSHOT/vraptor-3.2.1-20101020.025952-1.jar

pode testar pra mim por favor, boneazul?

Agora funcionou !!

Criado 19 de outubro de 2010
Ultima resposta 20 de out. de 2010
Respostas 7
Participantes 3