Problema vraptor 4 ( WELD-001456: Argument bean must not be null)

Boa noite a todos .

Estou começando a brincar com o vraptor 4 e cdi e subindo um projeto sem utilizar maven . (Padrao web default mesmo) . Criei poucas classes pra ver funcionando e aparentemente está tudo normal , só que quando tento dar post comum de um formulario pra um controlador é lancado a exception

br.com.caelum.vraptor.InterceptionException: org.jboss.weld.exceptions.IllegalArgumentException: WELD-001456: Argument bean must not be null
	at br.com.caelum.vraptor.observer.ExecuteMethod.execute(ExecuteMethod.java:108)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:90)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:271)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:258)
	at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:237)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:174)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:170)
	at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:124)
	at org.jboss.weld.event.EventImpl.fire(EventImpl.java:84)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:78)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:75)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor$Proxy$_$$_WeldClientProxy.intercept(Unknown Source)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:58)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:98)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor$Proxy$_$$_WeldClientProxy.intercept(Unknown Source)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:58)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.start(DefaultInterceptorStack.java:93)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$_$$_WeldClientProxy.start(Unknown Source)
	at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:86)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:90)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:271)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:258)
	at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:237)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:174)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:170)
	at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:124)
	at org.jboss.weld.event.EventImpl.fire(EventImpl.java:84)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)
Caused by: org.jboss.weld.exceptions.IllegalArgumentException: WELD-001456: Argument bean must not be null
	at org.jboss.weld.util.Preconditions.checkArgumentNotNull(Preconditions.java:40)
	at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:751)
	at org.jboss.weld.util.ForwardingBeanManager.getReference(ForwardingBeanManager.java:61)
	at org.jboss.weld.bean.builtin.BeanManagerProxy.getReference(BeanManagerProxy.java:78)
	at org.hibernate.validator.internal.cdi.ValidatorBean.createValidatorFactory(ValidatorBean.java:114)
	at org.hibernate.validator.internal.cdi.ValidatorBean.create(ValidatorBean.java:108)
	at org.hibernate.validator.internal.cdi.ValidatorBean.create(ValidatorBean.java:42)
	at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98)
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99)
	at org.jboss.weld.proxies.Validator$976505265$Proxy$_$$_WeldClientProxy.getConstraintsForClass(Unknown Source)
	at br.com.caelum.vraptor.validator.beanvalidation.MethodValidator.hasConstraints(MethodValidator.java:86)
	at br.com.caelum.vraptor.validator.beanvalidation.MethodValidator.validate(MethodValidator.java:95)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:90)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:271)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:258)
	at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:237)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:174)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:170)
	at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:124)
	at org.jboss.weld.event.EventImpl.fire(EventImpl.java:84)
	at br.com.caelum.vraptor.observer.ExecuteMethod.execute(ExecuteMethod.java:81)
	... 53 more

é um projetinho simples só pra ver funcionando . Segue as classes que subi :

@Controller
public class ClienteController {
	
	private static Logger logger = Logger.getLogger(ClienteController.class);

	@Inject
	private PessoaRepository pessoaRepository;

	@Inject
	private Result result;

	public void form() {
		logger.info("Logging form");
	}
	
	@Post
	public void adiciona(Pessoa pessoa){
		this.result.redirectTo(this).form();
	}

	public void json() {
		this.result.use(Results.json()).from(pessoaRepository.getPessoas())
				.serialize();
	}

	public void xml() {
		this.result.use(Results.xml()).from(pessoaRepository.getPessoas())
				.serialize();
	}
}

public class Pessoa {
	private String nome;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@Override
	public String toString() {
		return nome;
	}
}

public interface PessoaRepository {
	public List<Pessoa> getPessoas();
}

@RequestScoped
public class PessoaRepositoryImpl implements PessoaRepository {

	@SuppressWarnings("serial")
	@Override
	public List<Pessoa> getPessoas() {
		return new ArrayList<Pessoa>(){{
			add(new Pessoa());
			add(new Pessoa());
		}};
	}

}

//form.jsp
<form action="<c:url value='/cliente/adiciona'/>" method="post">
    Nome:             <input type="text" name="pessoa.nome" /><br/>
    <input type="submit" value="Salvar" />
</form>

Alguma luz do que pode ser ?

Consegui resolver trocando a versao do weld da 2.2.0 pra 2.1.2 . Mesmo assim outro problema estranho

Estou inputando apenas um objeto no formulario e mesmo assim o outro está sendo instanciado


@Post
	public void adiciona(Pessoa pessoa,Carro carro){
		System.out.println(pessoa.getNome());
		System.out.println(carro);
		this.result.redirectTo(this).form();
	}

<form action="<c:url value='/cliente/adiciona'/>" method="post">
    Nome:             <input type="text" name="pessoa.nome" /><br/>
    <input type="submit" value="Salvar" />
</form>

No system out imprime o nome da pessoa e uma instancia de carro . Carro deveria ser null não ? Já que nao veio nada no request …

polêmico, mas abre uma issue sobre isso lá, por favor:

[quote=Lucas Cavalcanti]polêmico, mas abre uma issue sobre isso lá, por favor:

https://github.com/caelum/vraptor4/issues[/quote]

Aberta :

Passei por esse mesmo problema e a solução foi a mesma, trocar a versão do Weld.
Na issue não vi você falando sobre o problema com a versão do Weld > 2.1.2, acho que seria interessante abrir uma issue para isso, não ?

Abri uma issue mais específica para o problema do Weld.