Olá.
Resolvi atualizar o VRaptor num sistema em que estou trabalhando.
Nele utilizo o SACI para controle de acesso.
Porém, ao atualizar o pom para a última versão do VRaptor, não consigo mais subir a aplicação. Recebo o seguinte erro:
INFO [main] (LinkToHandler.java:54) - Registering linkTo component
May 12, 2013 1:11:29 AM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter vraptor
br.com.caelum.vraptor.http.route.RouteNotFoundException: The selected route is invalid for redirection: br.com.xpto.backoffice.controller.LoginController.login
at br.com.caelum.vraptor.http.route.DefaultRouter.urlFor(DefaultRouter.java:141)
at net.diegomaia.vraptor.saci.component.startup.PageHandler.definePagesURLs(PageHandler.java:77)
at net.diegomaia.vraptor.saci.component.startup.PageHandler.handle(PageHandler.java:68)
at br.com.caelum.vraptor.ioc.guice.GuiceProvider.executeStereotypeHandlers(GuiceProvider.java:109)
at br.com.caelum.vraptor.ioc.guice.GuiceProvider.start(GuiceProvider.java:98)
at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:108)
at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:102)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4071)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4725)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
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 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Esse erro ocorre quando o SACI, no start da aplicação, tenta resolver os caminhos das páginas de login e acesso negado.
Se nenhum método for especificado como sendo o da tela de login (nenhum método anotado com @LoginPage), works like a charm!
Mas quando anoto o devido método com @LoginPage, a zica volta.
Dei uma olhada na classe br.com.caelum.vraptor.http.route.DefaultRouter:
public <T> String urlFor(Class<T> type, Method method, Object... params) {
Iterator<Route> matches = Iterators.filter(routes.iterator(), Filters.canHandle(type, method));
if (matches.hasNext()) {
try {
return matches.next().urlFor(type, method, params);
} catch (Exception e) {
throw new VRaptorException("The selected route is invalid for redirection: " + type.getName() + "."
+ method.getName(), e);
}
}
throw new RouteNotFoundException("The selected route is invalid for redirection: " + type.getName() + "."
+ method.getName());
}
Tentei debugar e ver o que tava rolando, mas não consegui. O debugger se perdia nos proxies gerados pelo guice.
O máximo que consegui foram uns “CTRL+CLICKs” pra tentar entender o fluxo.
Pelo que entendi, a exceção é lançada se não houver uma rota para o método em questão. Mas existe!
Acho que o VRaptor mudou a ordem em que processa as coisas. Deve estar chamando o PageHandler antes de obter as rotas, e por isso se perde.
Alguém saberia me dizer se é isso mesmo?
Sendo isso ou não, sabem me dizer o que fazer para contornar o problema?
Por ora, me resta voltar para a 3.4.1…=/