Vraptor Herança

Olá pessoal,

Tenho a seguinte situação:

classe Sale
e classe AddedValueSale extends Sale
e outras classes que também extends de Sale

A classe AddedValueSale possui um objeto AddedValue.

No meu formulário, tenho uma combo com o name=“sale” que define o tipo específico a ser usado. Criei um converter do Vraptor para isso e ele funciona muito bem nesse ponto. O converter ficou assim:

@Convert(Sale.class)
public class SaleConverter implements Converter<Sale> {

	@Override
	public Sale convert(String value, Class<? extends Sale> type, ResourceBundle bundle) {
		try {
			if (value.equals(ESale.ADDEDVALUE.value().toString()))
				return new AddedValueSale();
			else if (value.equals(ESale.DAILY.value().toString()))
				return new DailySale();
			else if (value.equals(ESale.PROMOTIONAL.value().toString()))
				return new PromotionalCodeSale();
			else if (value.equals(ESale.VALUE.value().toString()))
				return new ValueSale();

		}
		catch(Exception e) {
			throw new ConversionError("Não existe promoção configurada");
		}
		return null;
	}

}

Após a escolha na combo, adiciono o formulário específico da classe filha via Ajax com o seguinte campo:

O problema se dá no submit do formulário, pois o vraptor passa no converter mas nem chega no meu controller dando um erro na hora de popular esse objeto. O erro é esse:

Unable to find converter for br.com.***.AddedValue

Gostaria de saber se isso é um bug do vraptor? ou eu estou fazendo algo errado?

Qualquer contribuição é bem vinda…

Muito Obrigado…

Pessoal,

Descobri o problema… Após alguns testes percebi que o problema ocorria na hora que o vraptor ia instanciar um tipo complexo de um objeto filho após o converter. Olhando o código fonte e a documentação, percebi que que faz esse trabalho é o iogi (na versão 3.4.1). Me parece um bug mesmo dessa implementação.

Alterei colocando o ognl ao invés do iogi e após isso no Controller consigo pegar o objeto corretamente populado.

Abs…
Lucas

Hum… isso deveria funcionar no iogi também…

abre uma issue pra investigar isso por favor, linkando esse tópico?

obrigado por criar a issue =)

Oi Lucas…

Issue cadastrada #472.

Também achei que deveria funcionar normalmente com o iogi, até tentei debugar um pouco o código deles mas estou com um prazo apertado e preferi a solução da troca da implementação. Sabe como eh neh?! Vida de programador… :wink:

Abs,
Lucas

se quiser se aventurar um pouco e tentar corrigir esse bug, contribuições são mto bem vindas =)

Vou fechar o meu sprint aqui… e essa semana dou uma olhada e tento resolver o bug. O esquema de contribuição é pelo git né?! Fazendo um pull mesmo? Tem algum passo-a-passo ou é só mandar bala?

eh via pull request no github sim… o ideal é escrever um teste que falha nesse caso que vc quer corrigir e depois fazer esse teste passar =)

Tentei reproduzir este erro e não consegui.

Pelo que notei você criou um converter para Sale, porém não para AddedValue. Por isso o IOGI lança a exception. AddedValue por sua vez não é filha de Sale, logo o converter não irá funcionar.

Não vejo isso como um bug. A menos que eu não tenha entendido estes códigos.