VRaptor 3 Interceptor Exception [RESOLVIDO]

Bom Dia, pessoal estou tendo o seguinte problema somente com esta URL que passa 3 argumentos alguem poderia me ajudar o porque desta exception.

SEVERE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: java.lang.IllegalArgumentException: wrong number of arguments
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.tms.interceptor.AutorizacaoInterceptor.intercept(AutorizacaoInterceptor.java:72)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.IllegalArgumentException: wrong number of arguments
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
	... 43 more

Obrigado !!!
Joao Vitor

não basta colar a exception… é bom tb colar o trecho de código onde ela ocorre… e se possivel, falar o que vc fez, para que ela acontecesse … por exemplo… acessei o link “tal” e ai a exception ocorreu…

mas esse erro acontece, quando o numero de argumentos de um método esta incorreto…

[quote=Lavieri]não basta colar a exception… é bom tb colar o trecho de código onde ela ocorre… e se possivel, falar o que vc fez, para que ela acontecesse … por exemplo… acessei o link “tal” e ai a exception ocorreu…

mas esse erro acontece, quando o numero de argumentos de um método esta incorreto…[/quote]

Segue o codigo ai

@Intercepts
public class AutorizacaoInterceptor implements Interceptor {
	private final Result result;
	private final Validator validator;
	private final LoginModule loginModule;
	private ResourceMethod method;
	
	public AutorizacaoInterceptor(Result result, Validator validator, LoginModule loginModule) {
		// TODO Auto-generated constructor stub
		this.result = result;
		this.validator = validator;
		this.loginModule = loginModule;
	}
	
	@Override
	public boolean accepts(ResourceMethod arg0) {
		// TODO Auto-generated method stub
		return true;
	}
	
	@Override
	public void intercept(InterceptorStack arg0, ResourceMethod arg1,
			Object arg2) throws InterceptionException {
		// TODO Auto-generated method stub
		
		if ((this.loginModule.isNotLogged()) && (!arg1.containsAnnotation(Liberado.class))) {
			this.result.include("errors", Arrays.asList(new ValidationMessage("usuario inválido", "user"))).use(Results.logic()).redirectTo(AdmUserController.class).login();
		} else {
			if (this.loginModule.isNotLogged()) {
				this.result.include("errors", Arrays.asList(new ValidationMessage("usuário ou senha inválida", "","error.user.invalid")));
			} else {
				this.result.include("errors", Arrays.asList(new ValidationMessage("", "","")));				
			}
                        //A exception esta ocorrendo aqui
			arg0.next(arg1, arg2);
		}
	}
}

entao quando eu mando acessar por exemplo este link
localhost:8080/test/cliente/1/2/3 ele abre uma tela para edicao edito salvo depois mando abrir o mesmo registro novamente ai exception se eu der um f5 volta a funcionar normal.

Estranho neh.

quais são as lógicas que tão dando esse problema?

tipo, a lógica de edição, e a lógica de redirecionamento… manda o @Path mais a declaração dos métodos aqui… se possível os redirects tb…

[quote=Lucas Cavalcanti]quais são as lógicas que tão dando esse problema?

tipo, a lógica de edição, e a lógica de redirecionamento… manda o @Path mais a declaração dos métodos aqui… se possível os redirects tb…[/quote]

Que nem lucas fiz Sysout na logica do editar ele nem chegou a passar la ainda pelo que estou percebendo ou esta no intercept ou no router meu router esta assim

				routeFor("/expordemsubitem/{expordemsubitem.id.expordemitem.id.idordem.id}/{expordemsubitem.id.expordemitem.id.id}/{expordemsubitem.id.id}").with(HttpMethod.GET).is(ExpOrdemSubItemController.class).editar(null);				

Detalhe estou usando VRaptor 3.1.2-SNAP
Obrigado !!!
Joao Vitor

algum motivo pra usar esse routeFor? anotar diretamente na lógica não é mais fácil e legível?

Ok vou anotar direto na logica mas estou usando GenericController

mesmo usando generic controller, vc deveria anotar as lógicas direto…

mas deixa eu entender… no seu GenericController vc tem um método editar? No seu ExpOrdemSubItemController vc sobrescreve esse método?

[quote=Lucas Cavalcanti]mesmo usando generic controller, vc deveria anotar as lógicas direto…

mas deixa eu entender… no seu GenericController vc tem um método editar? No seu ExpOrdemSubItemController vc sobrescreve esse método?[/quote]

Isso mesmo exemplo

	@Override
	public void editar(ExpOrdemSubItem expordemsubitem) {
		// TODO Auto-generated method stub
		super.editar(expordemsubitem);
	}

qdo vc anota o método sobrescrito funciona?

fiz desta forma

@Resource
@Path("/expordemsubitem")
public class ExpOrdemSubItemController extends GenericoController<ExpOrdemSubItem> {
	
	public ExpOrdemSubItemController(Result result, Validator validator,
			DaoGenerico daoGenerico) {
		super(result, validator, daoGenerico);
		// TODO Auto-generated constructor stub
	}
	
	@Override
	@Get
	@Path("{expordemsubitem.id.expordemitem.id.idordem.id}/{expordemsubitem.id.expordemitem.id.id}/{expordemsubitem.id.id}")
	public void editar(ExpOrdemSubItem expordemsubitem) {
		// TODO Auto-generated method stub
		super.editar(expordemsubitem);
	}
	
}

e continuou tendo o mesmo problema

como é o método editar? pelo menos a parte do result.redirect

Lucas mas ele nao ta nem passando ainda pelo editar

metodo do GenericoController

	@Get
	public void editar(T obj) {
		// TODO Auto-generated method stub
		System.out.println("editar...");
		this.objeto = this.daoGenerico.getDao().loadObjeto(this.classe, new Mirror().on(obj).invoke().getterFor("id"));
		this.result.use(Results.logic()).forwardTo(getClass()).formulario();
	}

troca o forwardTo por redirectTo (por questão de boa prática) e o getClass() por this.classe (se isso for a classe do controller, pq podem ter proxies envolvidos)

em qual lógica tá passando que dá esse problema então? e qual redirect está sendo problemático?

habilita o log de debug do vraptor e posta o log da requisição problemática… de preferencia em um anexo, não no corpo da mensagem

[quote=Lucas Cavalcanti]troca o forwardTo por redirectTo (por questão de boa prática) e o getClass() por this.classe (se isso for a classe do controller, pq podem ter proxies envolvidos)

em qual lógica tá passando que dá esse problema então? e qual redirect está sendo problemático?

habilita o log de debug do vraptor e posta o log da requisição problemática… de preferencia em um anexo, não no corpo da mensagem[/quote]

Segue ai o anexo

como vc configurou o logger? só tá aparecendo a parte de ioc, não todos os logs do vraptor

log4j.rootCategory=DEBUG, stdout
log4j.logger.br.com.caelum.vraptor=DEBUG

só pra testar, renomeie o log4j.properties pra log4j.properties-backup e crie o arquivo log4j.xml com o conteúdo:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        
        <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" 
                                value="%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n"/>
                </layout>
        </appender>

        <category name="br.com.caelum.vraptor">
                <priority value="DEBUG" />
                <appender-ref ref="stdout" />
        </category>

</log4j:configuration>

e manda o log que ele gerar