1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema de ambiguidade de uma classe extendida do classe br.com.caelum.vraptor.validator.DefaultValidator vraptor 4

Caros, Estou migrando uma aplicação do vraptor 3 para vraptor 4 e nessa migração tive que refatorar uma classe que estendia o comportamento padrão do validator do vraptor3 para a classe validator correspondente do vraptor 4. Estou ganhando o erro abaixo. Qualifiquei a minha classe criada mas existem classes do vraptor que instanciam o validator. Como faço.

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type Validator with qualifiers @Default at injection point [BackedAnnotatedParameter] Parameter 3 of [BackedAnnotatedConstructor] @Inject public br.com.caelum.vraptor.observer.ParametersInstantiator(ParametersProvider, MethodInfo, Validator, MutableRequest, FlashScope) at br.com.caelum.vraptor.observer.ParametersInstantiator.(ParametersInstantiator.java:0) Possible dependencies: - Managed Bean [class br.gov.jfrj.siga.tp.vraptor.validator.ExtendedValidator] with qualifiers [@Default @Any @Named], - Managed Bean [class br.com.caelum.vraptor.validator.DefaultValidator] with qualifiers [@Any @Default]

Todas as outras injecões do custom ExtendValidator anotei com @Named("ExtendValidator") e funcionou.

Código da classe ExtendValidator

package br.gov.jfrj.siga.tp.vraptor.validator;

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle;

import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.inject.Named;

import br.com.caelum.vraptor.Result; import br.com.caelum.vraptor.proxy.Proxifier; import br.com.caelum.vraptor.validator.DefaultValidator; import br.com.caelum.vraptor.validator.I18nMessage; import br.com.caelum.vraptor.validator.Message; import br.com.caelum.vraptor.validator.Outjector; import br.com.caelum.vraptor.view.ValidationViewsFactory;

/* Customizacao do validador padrao do Vraptor. Converte as mensagens consultando no arquivo messages.properties e remove as mensagens duplicadas da lista. @author db1 / @Named("ExtendedValidator") @RequestScoped public class ExtendedValidator extends DefaultValidator {

private ResourceBundle bundle;

private List errors;

@SuppressWarnings("deprecation") public ExtendedValidator() { super(); }

@SuppressWarnings("deprecation") @Inject public ExtendedValidator(Result result, ValidationViewsFactory factory, Outjector outjector, Proxifier proxifier, ResourceBundle bundle, javax.validation.Validator bvalidator, javax.validation.MessageInterpolator interpolator, Locale locale) { this.bundle = bundle; }

@Override public br.com.caelum.vraptor.validator.Validator validate(Object bean, Class<?>... groups) { return removeDuplicated(translate(super.validate(bean, groups))); }

private br.com.caelum.vraptor.validator.Validator removeDuplicated(br.com.caelum.vraptor.validator.Validator validator) { Map messagesByDescription = new HashMap<>(); for (Message message : validator.getErrors()) { messagesByDescription.put(message.getMessage(), message); }

this.errors = new ArrayList(messagesByDescription.values()); return validator; }

private br.com.caelum.vraptor.validator.Validator translate(br.com.caelum.vraptor.validator.Validator validator) { List translatedMessages = new ArrayList();

for (Message message : validator.getErrors()) { translatedMessages.add(translate(message)); } this.errors = translatedMessages;

return validator; }

private Message translate(Message message) { String key = message.getMessage();

if (isBundleMessageKey(key)) { I18nMessage i18nMessage = new I18nMessage(message.getCategory(), processKey(key)); i18nMessage.setBundle(bundle); return i18nMessage; } return message; }

private String processKey(String key) { return new StringBuilder(key).substring(1, key.length() - 1).toString(); }

private boolean isBundleMessageKey(String key) { return key.startsWith("{") && key.endsWith("}"); }

@Override public List getErrors() { return this.errors; } }

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags vraptor cdi ou faça a sua própria pergunta.