[RESOLVIDO] vRaptor - ERRO - IllegalStateException

O Erro é o seguinte

java.lang.IllegalStateException: There are two rules that matches the uri " ..... " with same priority. Consider using @Path priority attribute. br.com.caelum.vraptor.http.route.DefaultRouter.checkIfThereIsAnotherRoute(DefaultRouter.java:106) br.com.caelum.vraptor.http.route.DefaultRouter.parse(DefaultRouter.java:97) br.com.caelum.vraptor.http.DefaultResourceTranslator.translate(DefaultResourceTranslator.java:51) br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:64) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70) br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92) br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56) br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

Ta bem, pelo que entendi estou “mapeando” dois metodos para um mesmo path. Mas como faço para resolver isso?

Exemplo:

:arrow: Tentando passar o Aluno para buscar tudo relacionado ao objeto aluno

	@Path(THIS_PATH + "/lista/{aluno.id}")
	public void listaConcessaoPorAluno(Aluno aluno) { ... }

:arrow: Tentando passar uma String com o nome para outro tipo de busca.

	@Path(THIS_PATH + "/lista/{[a-zA-Z]}")
	public void listaConcessaoPorNomeAluno(String nome) { ... }

Quando tenho esses dois métodos dá o erro lá de cima. Isso no mesmo Controller.

faça o seguinte:

@Path(value = THIS_PATH + "/lista/{aluno.id}", priority=Path.HIGH)  
public void listaConcessaoPorAluno(Aluno aluno) { ... }  

@Path(THIS_PATH + "/lista/{nome}")  
public void listaConcessaoPorNomeAluno(String nome) { ... }  

isso deve funcionar.

Estou usando a lib vraptor-3.1.2

priority=Path.HIGH deu [color=red]cannot be resolved[/color].

Sem essa tag com o restante da modificação. deu a mesma mensagem de erro descrito acima.

Para esse método de busca
@Path(THIS_PATH + "/lista/{nome}") public void listaUsuarioPorNome(String nome) {...}

estou o usando o formulario: 
[code]
" method="post">
Busca por nome de aluno
[/code]

tem como atualizar o VRaptor?

Peguei as novas libs (vraptor-3.4.0.jar e as demais) do Blank Project .
Agora minha aplicação nao inicia mais …
:frowning:

qual erro dá?

29/02/2012 15:18:09 org.apache.catalina.core.StandardContext filterStart SEVERE: Exception starting filter vraptor java.lang.NoSuchMethodError: com.google.common.base.Objects.firstNonNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; at br.com.caelum.vraptor.scan.ScannotationComponentScanner.nullToEmpty(ScannotationComponentScanner.java:201) at br.com.caelum.vraptor.scan.ScannotationComponentScanner.addWebInfClassesStereotypes(ScannotationComponentScanner.java:171) at br.com.caelum.vraptor.scan.ScannotationComponentScanner.findStereotypes(ScannotationComponentScanner.java:143) at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scan(ScannotationComponentScanner.java:60) at br.com.caelum.vraptor.scan.WebAppBootstrapFactory.create(WebAppBootstrapFactory.java:65) at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:83) at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110) at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:103) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4363) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) 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 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 29/02/2012 15:18:09 org.apache.catalina.core.StandardContext start SEVERE: Error filterStart

Engraçado, antes não tava usando a lib scannotation-1.0.2.jar

sim, isso mudou…

troque o jar google-collect pelo guava ou atualize o guava pra última versão.

Tirei o google-collect e a aplicação voltou a funcionar.

Porem aquele método ainda continua dando o erro
HTTP Status 404 - The requested resource (/esporte/concessao/lista/) is not available.

no log do servidor aparecem as rotas sendo criadas? acontece algum outro erro?

na verdade o certo seria /esporte/concessao/lista/algumaOutraCoisa, certo?

No eclipse não printa nada.
e na pagina web

[code]HTTP Status 404 - /teste/concessao/lista/

type Status report

message /teste/concessao/lista/

description The requested resource (/teste/concessao/lista/) is not available.
Apache Tomcat/6.0.18[/code]

vc não precisa passar algo depois desse /lista/ ???

Sim, estou passando.
Olha no formulario que eu coloquei ali em cima como é que estou passando.

obs: Agora ta aplicado o priority=Path.HIGH e na assinatura coloquei @Path(THIS_PATH + "/lista/{[a-zA-Z]}") public void listaConcessaoPorNomeAluno(String nome) { ... } e ta funcionando agora …

isso: /{[a-zA-Z]}

não funciona no vraptor, vc tem que usar

/lista/{nome:[a-zA-Z]}

[quote=Lucas Cavalcanti]isso: /{[a-zA-Z]}

não funciona no vraptor, vc tem que usar

/lista/{nome:[a-zA-Z]} [/quote]

Não deu certo assim …
Acho que to fazendo alguma coisa de muito errado, pq assim /{[a-zA-Z]} deu certo …
hehehe :roll:

deu certo e vc conseguiu capturar esse parâmetro na url?

utilizando meu método no controller

@Path(THIS_PATH + "/lista/{[0-9A-Za-z]}") public void listaConcessaoPorNomeAluno(String nome) { ... }
a variavel nome vem direitinho. Consigo usa-la normalemnte.

mas qual url vc está chamando?

No caso to usando um formulario para busca, o action dele fica assim:

:arrow: Outra coisa, tem como passar um Objeto para a URL sem ser por POST ? lista/${aluno}"/ não consegui fazer isso …