Contribuição - VRaptor3 - Improved Validator Messages

Bom pessoal, pra quem usa o validator do VRaptor, pra checagem server side, e gostaria de uma forma de verificar pontualmente se houve erros por exemplo no nome, na cidade, ou outro campo qualquer, ou gostaria de exibir as mensagem de forma separada ao lado dos campos, segue um componente que modifiquei do VRaptor.

Primeiro a forma de uso

<c:if test="${validatorErrors.notEmpty}">
	Ocorreram ${validatorErrors.size} falhas
</c:if>

Login: <input type="text" name="usuario.login" class="${validatorErrors.hasError.login ? 'error-class' : ''}" />
<div class="erro-msg">${validatorErrors.message.login}</div>

Email: <input type="text" name="usuario.email" class="${validatorErrors.hasError.email ? 'error-class' : ''}" />
<div class="erro-msg">${validatorErrors.message.email}</div>

Senha: <input type="text" name="usuario.senha" class="${validatorErrors.hasError.senha ? 'error-class' : ''}" />
<div class="erro-msg">${validatorErrors.message.senha}</div>

Confirmar: <input type="text" name="confir" class="${validatorErrors.hasError.confirmacao ? 'error-class' : ''}" />
<div class="erro-msg">${validatorErrors.message.confirmacao}</div>

Esse exemplo renderizado, quando digita-se um login < que 3 caracters, e quando erra a confirmação de senha.

Ocorreram 2 falhas
Login: &lt;input type="text" name="usuario.login" class="error-class" /&gt;
&lt;div class="erro-msg"&gt;o login deve ter tamanho entre 3 e 20 &lt;/div&gt;

Email: &lt;input type="text" name="usuario.email" class="" /&gt;
&lt;div class="erro-msg"&gt;&lt;/div&gt;

Senha: &lt;input type="text" name="usuario.senha" class="" /&gt;
&lt;div class="erro-msg"&gt;&lt;/div&gt;

Confirmar: &lt;input type="text" name="confir" class="error-class" /&gt;
&lt;div class="erro-msg"&gt;As duas senhas digitadas não conferem.&lt;/div&gt;

O modo antigo ainda funciona, e a lista antiga também pode ser acessada


					&lt;c:forEach var="error" items="${validatorErrors.errorList}"&gt;
    					${error.category} - ${error.message}<br />
					&lt;/c:forEach&gt;
					
					ou
					
					&lt;c:forEach var="error" items="${errors}"&gt;
    					${error.category} - ${error.message}<br />
					&lt;/c:forEach&gt;

Agora segue o código, é só


import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.View;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.validator.DefaultValidator;
import br.com.caelum.vraptor.validator.Message;
import br.com.caelum.vraptor.validator.Outjector;
import br.com.caelum.vraptor.view.ValidationViewsFactory;

@Component
@RequestScoped
public class ImprovedValidator extends DefaultValidator implements Serializable {
	private static final long serialVersionUID = 4037899473291836489L;
	private Map&lt;String,String&gt; message = new HashMap&lt;String, String&gt;();
	private List&lt;Message&gt; errorList = new ArrayList&lt;Message&gt;();
	private Map&lt;String,Boolean&gt; hasError = new HashMap&lt;String, Boolean&gt;();
	private final Result result;

	public ImprovedValidator(Result result,
			ValidationViewsFactory factory, Outjector outjector) {
		super(result, factory, outjector);
		this.result = result;
	}
	
	@Override
	public &lt;T extends View&gt; T onErrorUse(Class&lt;T&gt; view) {
		if (hasErrors())
			result.include(&quot;validatorErrors&quot;, this);
		return super.onErrorUse(view);
	}
	
	private void putOnMap(Message m) {
		this.message.put(m.getCategory(), m.getMessage());
		this.hasError.put(m.getCategory(), true);
	}
	
	@Override
	public void add(Message message) {
		putOnMap(message);
		this.errorList.add(message);
		super.add(message);
	}
	
	@Override
	public void addAll(Collection&lt;? extends Message&gt; messages) {
		for(Message message : messages)
			putOnMap(message);
		this.errorList.addAll(messages);
		super.addAll(messages);
	}
	
	public boolean getNotEmpty() {
		return hasErrors();
	}
	
	public boolean getIsEmpty() {
		return !getNotEmpty();
	}
	
	public List&lt;Message&gt; getErrorList() {
		return errorList;
	}
	
	public Map&lt;String, String&gt; getMessage() {
		return message;
	}
	
	public Map&lt;String, Boolean&gt; getHasError() {
		return hasError;
	}

	
	public int getSize() {
		return errorList.size();
	}

}

Lavieri,

Estou utilizando a validação em que você criou, e estava dando tudo certo, até o momento em que atualizei o Vraptor 3.1.0 para o Vraptor 3.1.3.

Está parecendo o erro na linha 2 ( super(result,factory,outjector); ) da classe ImprovedValidator.[code]

public ImprovedValidator(Result result, ValidationViewsFactory factory, Outjector outjector) {
super(result, factory, outjector);
this.result = result;
}[/code]

Ele indica que o construtor é inválido, dessa forma não consigo inicializar meu projeto, mostrando este erro:[code]type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘parametersInstantiatorInterceptor’: Unsatisfied dependency expressed through constructor argument with index 2 of type [br.com.caelum.vraptor.Validator]: : Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\controller\ImprovedValidator.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.lims.enemtv.controller.ImprovedValidator]: Constructor threw exception; nested exception is java.lang.Error: Unresolved compilation problem:
The constructor DefaultValidator(Result, ValidationViewsFactory, Outjector) is undefined
; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\controller\ImprovedValidator.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.lims.enemtv.controller.ImprovedValidator]: Constructor threw exception; nested exception is java.lang.Error: Unresolved compilation problem:
The constructor DefaultValidator(Result, ValidationViewsFactory, Outjector) is undefined

org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:58)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.28 logs.
Apache Tomcat/6.0.28[/code]

Você pode me dizer o que devo fazer para manter o vraptor 3.1.3 e sua classe improvedValidator funcionando?

Abraço.
Deus nos acompanhe sempre.

Entraram novosa parametros no construtor do DefaultValidator. Você deve alterar o construtor da sua subclasse para atender a nova assinatura do DefaultValidator. A assinatura atual é:

Coloquei os novos parametros, olha: [code]

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.View;
import br.com.caelum.vraptor.core.Localization;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.validator.BeanValidator;
import br.com.caelum.vraptor.validator.DefaultValidator;
import br.com.caelum.vraptor.validator.Message;
import br.com.caelum.vraptor.validator.Outjector;
import br.com.caelum.vraptor.view.ValidationViewsFactory;

@Component
@RequestScoped
public class ImprovedValidator extends DefaultValidator implements Serializable {
private static final long serialVersionUID = 4037899473291836489L;

private Map<String,String> message = new HashMap<String, String>();
private List<Message> errorList = new ArrayList<Message>();
private Map<String,Boolean> hasError = new HashMap<String, Boolean>();
private final Result result;

public ImprovedValidator(Result result,
		ValidationViewsFactory factory, Outjector outjector, Proxifier proxifier, List<BeanValidator> beanValidators, Localization localization ) {
	super(result, factory, outjector, null, null, null);
	this.result = result;
}

[/code]

E o erro ainda permaneceu, veja: [code]
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘parametersInstantiatorInterceptor’: Unsatisfied dependency expressed through constructor argument with index 2 of type [br.com.caelum.vraptor.Validator]: : Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\controller\ImprovedValidator.class]: Unsatisfied dependency expressed through constructor argument with index 4 of type [java.util.List]: : No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\controller\ImprovedValidator.class]: Unsatisfied dependency expressed through constructor argument with index 4 of type [java.util.List]: : No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:58)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.28 logs.
Apache Tomcat/6.0.28

[/code]

Pensei até que fosse a inclusão da lib “hibernate-validator-3.1.ga”, mas não é, pois já a inclui e mantém o erro.

O que acha que possa ser o problema?

Obrigado pela ajuda.

Abraço.
Deus nos acompanhe sempre.

Muito estranho. Quais os jars você tem no /WEB-INF/lib?

Além disso, você pode editar seu primeiro post e remover parte do stacktrace, pois quase trava meu navegador. :slight_smile:

São estes:

o que acha?

OBS: Nesta imagem se encontra o VRaptor 3.1.0, pois estou trabalhando no momento, sendo que todas as outras libs são da versão 3.1.3 do VRaptor.

Analisei bem isso e não achei nada que pudesse causar esse erro. Até porque quando o Vraptor não encontra nenhuma implementação da JSR303 nem Hibernate Validator é usado uma implementação vazia.

Vou fazer mais uns testes e te aviso.

É por isso que achei estranho…

Eu só fiz substituir o jar do VRaptor 3.1.0 para o 3.1.3 e surgiu o erro.

=/

Aguardo alguma solução. Obrigado.

Abraço.

Aqui esta funcionando sem problemas com o VRaptor 3.1.3 … segue o código completo

[code]package br.com.simtecnologia.vraptor.fixed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.View;
import br.com.caelum.vraptor.core.Localization;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.validator.BeanValidator;
import br.com.caelum.vraptor.validator.DefaultValidator;
import br.com.caelum.vraptor.validator.Message;
import br.com.caelum.vraptor.validator.Outjector;
import br.com.caelum.vraptor.view.ValidationViewsFactory;

@Component
@RequestScoped
public class SimTecnologiaValidator extends DefaultValidator implements Serializable {

public SimTecnologiaValidator(Result result,
		ValidationViewsFactory factory, Outjector outjector,
		Proxifier proxifier, List&lt;BeanValidator&gt; beanValidators, Localization localization) {
	super(result, factory, outjector, proxifier, beanValidators, localization);
	this.result = result;
}

private static final long serialVersionUID = -8023867330691977706L;
private Map&lt;String,String&gt; message = new HashMap&lt;String, String&gt;();
private List&lt;Message&gt; errorList = new ArrayList&lt;Message&gt;();
private Map&lt;String,Boolean&gt; hasError = new HashMap&lt;String, Boolean&gt;();
private final Result result;



@Override
public &lt;T extends View&gt; T onErrorUse(Class&lt;T&gt; view) {
	if (hasErrors())
		result.include(&quot;validatorErrors&quot;, this);
	return super.onErrorUse(view);
}

private void putOnMap(Message m) {
	this.message.put(m.getCategory(), m.getMessage());
	this.hasError.put(m.getCategory(), true);
}

@Override
public void add(Message message) {
	putOnMap(message);
	this.errorList.add(message);
	super.add(message);
}

@Override
public void addAll(Collection&lt;? extends Message&gt; messages) {
	for(Message message : messages)
		putOnMap(message);
	this.errorList.addAll(messages);
	super.addAll(messages);
}

public boolean getNotEmpty() {
	return hasErrors();
}

public boolean getIsEmpty() {
	return !getNotEmpty();
}

public List&lt;Message&gt; getErrorList() {
	return errorList;
}

public Map&lt;String, String&gt; getMessage() {
	return message;
}

public Map&lt;String, Boolean&gt; getHasError() {
	return hasError;
}

public int getSize() {
	return errorList.size();
}

}

[/code]

Lavieri,

Coloquei os mesmo parâmetros no construtor, segue o código: [code]import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.View;
import br.com.caelum.vraptor.core.Localization;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.validator.BeanValidator;
import br.com.caelum.vraptor.validator.DefaultValidator;
import br.com.caelum.vraptor.validator.Message;
import br.com.caelum.vraptor.validator.Outjector;
import br.com.caelum.vraptor.view.ValidationViewsFactory;

@Component
@RequestScoped
public class ImprovedValidator extends DefaultValidator implements Serializable {
private static final long serialVersionUID = 4037899473291836489L;

private Map<String,String> message = new HashMap<String, String>();
private List<Message> errorList = new ArrayList<Message>();
private Map<String,Boolean> hasError = new HashMap<String, Boolean>();
private final Result result;

public ImprovedValidator(Result result,
		ValidationViewsFactory factory, Outjector outjector, Proxifier proxifier, List<BeanValidator> beanValidators, Localization localization) {
	super(result, factory, outjector, proxifier, beanValidators, localization);
	this.result = result;
}


@Override
public <T extends View> T onErrorUse(Class<T> view) {
	if (hasErrors())
		result.include("validatorErrors", this);
	return super.onErrorUse(view);
}

private void putOnMap(Message m) {
	this.message.put(m.getCategory(), m.getMessage());
	this.hasError.put(m.getCategory(), true);
}

@Override
public void add(Message message) {
	putOnMap(message);
	this.errorList.add(message);
	super.add(message);
}

@Override
public void addAll(Collection<? extends Message> messages) {
	for(Message message : messages)
		putOnMap(message);
	this.errorList.addAll(messages);
	super.addAll(messages);
}

public boolean getNotEmpty() {
	return hasErrors();
}

public boolean getIsEmpty() {
	return !getNotEmpty();
}

public List<Message> getErrorList() {
	return errorList;
}

public Map<String, String> getMessage() {
	return message;
}

public Map<String, Boolean> getHasError() {
	return hasError;
}


public int getSize() {
	return errorList.size();
}

}
[/code]

Quando fui executar, apareceu este erro: [code]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘parametersInstantiatorInterceptor’: Unsatisfied dependency expressed through constructor argument with index 2 of type [br.com.caelum.vraptor.Validator]: : Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\controller\ImprovedValidator.class]: Unsatisfied dependency expressed through constructor argument with index 4 of type [java.util.List]: : No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\controller\ImprovedValidator.class]: Unsatisfied dependency expressed through constructor argument with index 4 of type [java.util.List]: : No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:58)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

root cause [/code]

O que poderá ser? =/

Obrigado!
Deus nos acompanhe sempre.

Ele esta reclamando que o index 4 (ou seja, o 5º argumento do construtor) que é List<BeanValidator> beanValidators não satisfaz a dependência, como você pode ver abaixo, o quinto argumento é este.

public SimTecnologiaValidator(Result result, ValidationViewsFactory factory, Outjector outjector, Proxifier proxifier, List&lt;BeanValidator&gt; beanValidators, Localization localization) { super(result, factory, outjector, proxifier, beanValidators, localization); this.result = result; }

Isso quer dizer que vc não tem nenhum BEAN VALIDATOR registrado, como dependência… esta faltando isso… ate se vc não usar esse validator modificado, o mesmo erro acontecerá.

Esse erro está muito estranho, até porque não existe como não ter uma implementação de validator. Sempre é retornada uma implementação, e caso não encontrar nem o Hibernate Validator nem a JSR303 é retornado um NullValidator. Eu analisei esse erro e tentei reproduzir em meu ambiente sem sucesso.

candidosales, você compilou o Vraptor ou pegou o binário distribuído pelo site do Vraptor? Você não possui algum outro jar do Vraptor no classopath da aplicação ou do appserver? Você possui algum outro componente customizado?

Como faço para registrar o BEAN VALIDATOR como dependência?

Basta você ter ou o Hibernate Validator ou algum provider de JPA que implemente a JSR303 (Hibernate 3.5 ou Eclipselink 2x).

Desculpem pela minha ignorância, mas tenho algumas dúvidas

1° A forma como substitui os jars do Vraptor pode está errada, foi da seguinte forma…fui até a pasta WebContent\WEB-INF\lib e peguei o jar vraptor-3.1.0 e substituí pelo vraptor-3.1.3. Eu fiz algo de errado? Ou tem outro método para substituição desta jar?

2° [quote]Basta você ter ou o Hibernate Validator ou algum provider de JPA que implemente a JSR303 (Hibernate 3.5 ou Eclipselink 2x). [/quote] Você quis dizer que devo ter na minha lib o hibernate-validator-3.5, é isso? Se for, eu coloquei o hibernate-validator-4.1.0.Final

O código da Classe ImprovedValidator:[code] import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.View;
import br.com.caelum.vraptor.core.Localization;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.validator.BeanValidator;
import br.com.caelum.vraptor.validator.DefaultValidator;
import br.com.caelum.vraptor.validator.Message;
import br.com.caelum.vraptor.validator.Outjector;
import br.com.caelum.vraptor.view.ValidationViewsFactory;

@Component
@RequestScoped
public class ImprovedValidator extends DefaultValidator implements Serializable {

private static final long serialVersionUID = 4037899473291836489L;

private Map<String,String> message = new HashMap<String, String>();
private List<Message> errorList = new ArrayList<Message>();
private Map<String,Boolean> hasError = new HashMap<String, Boolean>();
private final Result result;

public ImprovedValidator(Result result,
		ValidationViewsFactory factory, Outjector outjector, Proxifier proxifier, List<BeanValidator> beanValidators, Localization localization) {
	super(result, factory, outjector, proxifier, beanValidators, localization);
	this.result = result;
}

@Override
public <T extends View> T onErrorUse(Class<T> view) {
	if (hasErrors())
		result.include("validatorErrors", this);
	return super.onErrorUse(view);
}

private void putOnMap(Message m) {
	this.message.put(m.getCategory(), m.getMessage());
	this.hasError.put(m.getCategory(), true);
}

@Override
public void add(Message message) {
	putOnMap(message);
	this.errorList.add(message);
	super.add(message);
}

@Override
public void addAll(Collection<? extends Message> messages) {
	for(Message message : messages)
		putOnMap(message);
	this.errorList.addAll(messages);
	super.addAll(messages);
}

public boolean getNotEmpty() {
	return hasErrors();
}

public boolean getIsEmpty() {
	return !getNotEmpty();
}

public List<Message> getErrorList() {
	return errorList;
}

public Map<String, String> getMessage() {
	return message;
}

public Map<String, Boolean> getHasError() {
	return hasError;
}


public int getSize() {
	return errorList.size();
}

} [/code]

A minha lib:

Mesmo com a lib do hibernate-validator, o construtor da Classe feito como o do Lavieri, ocorreu este erro: [code]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘parametersInstantiatorInterceptor’: Unsatisfied dependency expressed through constructor argument with index 2 of type [br.com.caelum.vraptor.Validator]: : Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\components\ImprovedValidator.class]: Unsatisfied dependency expressed through constructor argument with index 4 of type [java.util.List]: : No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\components\ImprovedValidator.class]: Unsatisfied dependency expressed through constructor argument with index 4 of type [java.util.List]: : No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:58)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

root cause

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\components\ImprovedValidator.class]: Unsatisfied dependency expressed through constructor argument with index 4 of type [java.util.List]: : No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.caelum.vraptor.validator.BeanValidator] found for dependency [collection of br.com.caelum.vraptor.validator.BeanValidator]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:820)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:762)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680)
org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:58)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
[/code]

Alguma pista da solução?! =/

desculpa a demora pra responder…

o problema é que vc colocou o jar do hibernate-validator 4, mas não colocou o jar da BeanVAlidation-API…
é o validation-api-xxx.jar

funciona se tiver só o jar do hibernate-validator 3, ou se tiver o HV4 + validation-api

Lucas, mesmo assim há uma coisa estranha. Se o jar não é encontrado o vr3 retorna um NullValidator. Nessas mensagens dele diz que não há implementação alguma de Validator.

[quote=Lucas Cavalcanti]desculpa a demora pra responder…

o problema é que vc colocou o jar do hibernate-validator 4, mas não colocou o jar da BeanVAlidation-API…
é o validation-api-xxx.jar

funciona se tiver só o jar do hibernate-validator 3, ou se tiver o HV4 + validation-api[/quote]

eh… tb achei meio estranho isso… mass

Estimados,

Fiz o que o Lucas recomendou. Tirei o Hibernate-validator-4 e substitui pelo hibernate-validator-3.1.ga.jar, e em seguida substituí o vraptor-3.1.0.jar pelo vraptor-3.1.3.jar.

O erro permaneceu, entretanto o erro mudou.

[code]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘commonsUploadMultipartInterceptor’: Unsatisfied dependency expressed through constructor argument with index 3 of type [br.com.caelum.vraptor.Validator]: : Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\Desktop\eclipse\apache-tomcat-6.0.28\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\components\ImprovedValidator.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.lims.enemtv.components.ImprovedValidator]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: br.com.caelum.vraptor.validator.DefaultValidator.(Lbr/com/caelum/vraptor/Result;Lbr/com/caelum/vraptor/view/ValidationViewsFactory;Lbr/com/caelum/vraptor/validator/Outjector;)V; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\Desktop\eclipse\apache-tomcat-6.0.28\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\components\ImprovedValidator.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.lims.enemtv.components.ImprovedValidator]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: br.com.caelum.vraptor.validator.DefaultValidator.(Lbr/com/caelum/vraptor/Result;Lbr/com/caelum/vraptor/view/ValidationViewsFactory;Lbr/com/caelum/vraptor/validator/Outjector;)V
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:242)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘improvedValidator’ defined in file [C:\Documents and Settings\Administrador\Desktop\eclipse\apache-tomcat-6.0.28\wtpwebapps\tv_enem\WEB-INF\classes\br\com\lims\enemtv\components\ImprovedValidator.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.lims.enemtv.components.ImprovedValidator]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: br.com.caelum.vraptor.validator.DefaultValidator.(Lbr/com/caelum/vraptor/Result;Lbr/com/caelum/vraptor/view/ValidationViewsFactory;Lbr/com/caelum/vraptor/validator/Outjector;)V
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:283)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:874)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:820)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:762)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680)
org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:242)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

root cause [/code]

Em seguida substituí o hibernate-validator-3.1.ga.jar pelo hibernate-validator-4.1.0.Final.jar e também coloquei o validation-api-1.0.0.GA.jar, e para surpresa de todos… Funcionou! =D

Lucas Obrigado pela dica! Obrigado ao Lavieri e ao Garcia pela ajuda! ^^

Abração!
Deus nos acompanhe sempre.

Lavieri, não quer colocar esse plugin no vraptor-contrib, por favor?

pode ser em outro repositório do git, daí eu adiciono como submodulos