Fev 13, 2012 11:27:02 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/Web] threw exception
br.com.caelum.vraptor.InterceptionException: java.lang.IllegalArgumentException: argument type mismatch
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:87)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:87)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.tkway.seguranca.AutorizacaoInterceptor.intercept(AutorizacaoInterceptor.java:42)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
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:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
e como eu implementei no interceptor!
@Intercepts
public class AutorizacaoInterceptor implements Interceptor {
private final UsuarioWeb userWeb;
private final Result result;
private Recurso recurso;
public AutorizacaoInterceptor(UsuarioWeb userWeb, Result result, Recurso recurso) {
this.userWeb = userWeb;
this.result = result;
this.recurso = recurso;
}
@Override
public boolean accepts(ResourceMethod method) {
System.out.println("Metodo: "+method.getMethod().getName()+"\n");
return !method.containsAnnotation(Liberado.class);
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
if(this.userWeb.isLogado()){
recurso.setNome("Administrar");
if (userWeb.getPrivilegio().getRecursos().contains(recurso)){
stack.next(method, resourceInstance);
}
recurso.setNome(method.getMethod().getDeclaringClass().getSimpleName()+"."+method.getMethod().getName());
if(this.userWeb.getPrivilegio().getRecursos().contains(recurso)){
stack.next(method, resourceInstance);
}
}
result.redirectTo(UsuarioController.class).logar();
}
}
E o exemplo de um metodo que da erro, mesmo com o usuario settado com o recurso correto, quando eu tento alterar!!
@Path("/privilegio/cadastrarAlterar")@Post
@DescricaoRecurso("Cadastra ou Altera os Privilegios")
public void cadastrarAlterar(List<Recurso> recursosList, Privilegio privilegio) throws Throwable {
//O Privilegio ja vem com o nome, portanto nao preciso seta-lo
//Aqui eu setto a empresa da qual o privilegio pertence (no caso a que foi carregada no login do usuario)
privilegio.setEmpresa(this.userWeb.getEmpresa());
/*Verifico se a lista estiver vazia para evitar o NullPointerException
* Aqui eu seto os recursos escolhidos para o objeto privilegio
* Como o hibernate trabalha com HashSet e o VRaptor com List eu preciso converter de List para HashSet*/
if (recursosList==null){
privilegio.setRecursos(new HashSet<Recurso>());
}else{
privilegio.setRecursos(new HashSet<Recurso>(recursosList));
}
/* Primeiro eu verifico se o o privilegio é novo ou já existe (cod==null "novo", cod!=null "ja existe")*/
if(privilegio.getCod()!=null){
//Se ja existe eu atualizo as informacoes no banco
this.privDao.mergePrivilegio(privilegio);
}else{
//Se for novo, eu cadastro no banco (O privilegio com seus recursos)
this.privDao.setPrivilegio(privilegio);
}
//Redireciona para a listagem de privilegios
result.redirectTo(PrivilegioController.class).privilegios();
}