Procurei nas docs mas não encontrei, existe alguma forma de garantir a ordem de execução dos interceptors?
obrigado,
galmeida
Procurei nas docs mas não encontrei, existe alguma forma de garantir a ordem de execução dos interceptors?
obrigado,
galmeida
Sim existe
cria um cara que implementa InterceptorSequence e anota ele com @Intercepts…
e tira o @Intercepts dos interceptors que estiverem dentro da stack
[]'s
não funciou, acho que quando eu tiro o @Intercepts dos interceptors eles nao vao para o container, devo colocar alguma outra anotação neles?
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.com.directtalk.capim.core.vr.ErrorInterceptor] is defined: no bean for this type registered
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:194)
br.com.directtalk.capim.core.vr.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:45)
br.com.caelum.vraptor.interceptor.DefaultInterceptorRegistry.interceptorsFor(DefaultInterceptorRegistry.java:56)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:54)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
br.com.caelum.vraptor.core.URLParameterExtractorInterceptor.intercept(URLParameterExtractorInterceptor.java:45)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:70)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:57)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:71)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:71)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:99)
br.com.directtalk.capim.core.vr.spring.SpringProvider.provideForRequest(SpringProvider.java:41)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:97)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
coloca @Component em cima deles
Obrigado Lucas,
funcionou, apesar de que ele se comportou da forma contraria do que eu esperava
@Intercepts
@RequestScoped
public class CapimInterceptors implements InterceptorSequence {
@SuppressWarnings("unchecked")
@Override
public Class<? extends Interceptor>[] getSequence() {
return new Class[]{ SegundoFiltro.class, PrimeiroFiltro.class, };
}
}
mais uma pergunta, o @RequestScoped continua no filtro, certo?
Obrigado,
galmeida
por padrão é request scoped…
então… o vraptor tá executando os interceptors na ordem inversa dos que estão retornados no getSequence?
exato
registrei o bug… mas é provavel que se você estiver usando a lógica do interceptor depois do stack.next, ele execute ao inverso mesmo…
verdade, se a logica estivesse depois do stack.next() ela seria executada ao contrario, mas nao foi esse o caso, a lógica estava antes.
galmeida