Possível Bug no Vraptor

mas vc conseguiu pegar o /404 dentro do filtro do VRaptor?

Consegui…

ok… o problema é que o RequestInfo é setado na thread atual para uso interno do VRaptor.

quando acontece um 404, ele redireciona para a error-page, mas dentro da mesma request, ou seja, mesma thread.

Por causa disso, o RequestInfo é o da primeira requisição, não o do redirecionamento para o erro…

não tem um jeito muito fácil de resolver esse problema, mas a idéia seria tentar melhorar o escopo de request pra saber tratar esse caso.

Vc tá usando o Guice, certo?
tenta usar o Spring, só pra testar isso, se for fácil.

[quote=Lucas Cavalcanti]ok… o problema é que o RequestInfo é setado na thread atual para uso interno do VRaptor.

quando acontece um 404, ele redireciona para a error-page, mas dentro da mesma request, ou seja, mesma thread.

Por causa disso, o RequestInfo é o da primeira requisição, não o do redirecionamento para o erro…

não tem um jeito muito fácil de resolver esse problema, mas a idéia seria tentar melhorar o escopo de request pra saber tratar esse caso.

Vc tá usando o Guice, certo?
tenta usar o Spring, só pra testar isso, se for fácil.[/quote]

Não sei qual eu estou usando. Como faz pra saber? E como faz pra mudar?

só olhar no WEB-INF/lib… se só tiver o jar do guice, vc está usando ele :stuck_out_tongue:

pra usar o spring, se vc estiver usando o maven é só adicionar essas dependencias:

[quote=Lucas Cavalcanti]só olhar no WEB-INF/lib… se só tiver o jar do guice, vc está usando ele :stuck_out_tongue:

pra usar o spring, se vc estiver usando o maven é só adicionar essas dependencias:

Mas em qual projeto vc diz pra ver isso: vraptor-core ou no blank-project? No vraptor-core não tem nenhuma pasta WEB-INF e no pom dele tem as 2 dependências (guice e spring). Já o blank-project usa o guice, mas ele não é um projeto maven. Nesse caso como eu faço? É só baixar os jars do Spring e substituir?

use esse projeto (o do meu livro =) )

entre em livraria-site, por exemplo, execute “ant resolve” e importe o projeto no eclipse.

se conseguir rodar ele normalmente, mude o ivy.xml para adicionar as dependencias do spring.

<dependency org="org.springframework" name="spring-aop" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-asm" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-beans" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-context" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-core" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-expression" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-web" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.aspectj" name="aspectjrt" rev="1.6.9" conf="default" />

depois execute “ant resolve”

[quote=Lucas Cavalcanti]use esse projeto (o do meu livro =) )

entre em livraria-site, por exemplo, execute “ant resolve” e importe o projeto no eclipse.

se conseguir rodar ele normalmente, mude o ivy.xml para adicionar as dependencias do spring.

<dependency org="org.springframework" name="spring-aop" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-asm" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-beans" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-context" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-core" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-expression" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.springframework" name="spring-web" rev="3.0.5.RELEASE" conf="default" />
<dependency org="org.aspectj" name="aspectjrt" rev="1.6.9" conf="default" />

depois execute “ant resolve”[/quote]

O “ant resolve” deu “build successful”, mas quando eu importo o projeto no Eclipse, aparecem alguns erros:

[quote]The project cannot be built until build path errors are resolved
Project ‘livraria-site’ is missing required source folder: 'src/test/resources’
Unbound classpath container: ‘JRE System Library [Java SE 6 (MacOS X Default)]’ in project 'livraria-site’
The method print(String) from the type JspWriter refers to the missing type String
The type java.io.Writer cannot be resolved. It is indirectly referenced from required .class files
java.lang.Exception cannot be resolved to a type
No exception of type ServletException can be thrown; an exception type must be a subclass of Throwable
java.io.IOException cannot be resolved to a type
Object cannot be resolved to a type
The method getPageContext(Servlet, ServletRequest, ServletResponse, String, boolean, int, boolean) from the type JspFactory refers to the missing type String[/quote]

Eu tentei rodar mesmo assim. Eu consigo acessar arquivos estáticos, mas nenhuma URL que passa pelo back-end.

vc precisa apontar para o java instalado na sua máquina

botão direito no projeto > Properties > Java Build Path > Libraries

Escolha a JRE System Library, clique em edit e escolha a do seu sistema

Assim ele deve resolver o problema.

[quote=Lucas Cavalcanti]vc precisa apontar para o java instalado na sua máquina

botão direito no projeto > Properties > Java Build Path > Libraries

Escolha a JRE System Library, clique em edit e escolha a do seu sistema

Assim ele deve resolver o problema.[/quote]

Já estava com a do meu sistema: jre7.

Dá um clean no projeto e veja se os erros param

Não param.

estranho…

Quais erros aparecem na aba de Errors/Warnings do projeto?

[quote=Lucas Cavalcanti]estranho…

Quais erros aparecem na aba de Errors/Warnings do projeto?[/quote]

Aqueles que eu citei:

[quote]The project cannot be built until build path errors are resolved
Project ‘livraria-site’ is missing required source folder: 'src/test/resources’
Unbound classpath container: ‘JRE System Library [Java SE 6 (MacOS X Default)]’ in project 'livraria-site’
The method print(String) from the type JspWriter refers to the missing type String
The type java.io.Writer cannot be resolved. It is indirectly referenced from required .class files
java.lang.Exception cannot be resolved to a type
No exception of type ServletException can be thrown; an exception type must be a subclass of Throwable
java.io.IOException cannot be resolved to a type
Object cannot be resolved to a type
The method getPageContext(Servlet, ServletRequest, ServletResponse, String, boolean, int, boolean) from the type JspFactory refers to the missing type String[/quote]

Project ‘livraria-site’ is missing required source folder: ‘src/test/resources’

-> crie essa pasta

Unbound classpath container: ‘JRE System Library [Java SE 6 (MacOS X Default)]’ in project ‘livraria-site’

-> siga os passos do build path que eu te falei, escolha a sua JRE, confirme e salve a escolha (Apply)

[quote=Lucas Cavalcanti]Project ‘livraria-site’ is missing required source folder: ‘src/test/resources’

-> crie essa pasta

Unbound classpath container: ‘JRE System Library [Java SE 6 (MacOS X Default)]’ in project ‘livraria-site’

-> siga os passos do build path que eu te falei, escolha a sua JRE, confirme e salve a escolha (Apply)[/quote]

Agora funcionou… Mas tá dando um erro quando inicio o servidor:

[quote]13-10-10 00:52:39,203 [ERROR] br.com.caelum.vraptor.scan.ScannotationComponentScanner - There’s no occurence of package br.com.caelum.vraptor.util.jpa in classpath
Out 10, 2013 12:52:39 AM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter vraptor
com.google.inject.CreationException: Guice creation errors:

  1. No implementation for br.com.casadocodigo.livraria.site.modelo.Acervo was bound.
    while locating br.com.casadocodigo.livraria.site.modelo.Acervo
    for parameter 0 at br.com.casadocodigo.livraria.site.controlador.HomeController.(HomeController.java:13)
    at br.com.caelum.vraptor.ioc.guice.GuiceComponentRegistry.bindToConstructor(GuiceComponentRegistry.java:151)

1 error
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:154)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:83)
at br.com.caelum.vraptor.ioc.guice.GuiceProvider.start(GuiceProvider.java:97)
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.initFilter(ApplicationFilterConfig.java:277)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:103)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4650)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5306)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)[/quote]

Procure a classe AcervoNoAdmin e anote-a com @Component… se ela não existir, crie uma classe que implementa essa interface e deixe os métodos em branco.

Agora funcionou. Rodou o servidor certinho e iniciou a aplicação. A página /home/inicio não funcionou, lançou uma exceção, mas eu criei um novo método no HomeController e consegui acessar a página desse método.

Depois eu coloquei as dependências do Spring que você falou e dei ant resolve. O projeto continuou funcionando. Aí eu configurei a página de erro no web.xml, mas não consegui fazer funcionar esse mapeamento… Nessa versão do Vraptor também era assim?

[code]
404
/404

vraptor /* FORWARD REQUEST ERROR [/code] Obs: eu não removi nenhuma dependência do Guice. Tem que remover?

o que aconteceu? deu erro?

Não… Ele simplesmente ignora o mapeamento e mostra a mensagem de 404 padrão. Não consegui configurar nem pra estáticos.
Obs: eu adicionei os 3 dispatchers no web.xml. Antes não tinha nenhum.