Tem algo estranho e bizarro no que vc esta fazendo… acabei de testar aqui, e funciona corretamente…
Não fiz com Hibernate pq meu projeto usa um base, e não tenho como extender ele 2 vezes… então segue aki meu teste, que foi bem sucedido…
Criei um Recurso com 2 lógica, uma onde ocorre uma exceção, e outra pra onde a exceção deve ir parar
@Resource
public class TestController {
public void lancaErro() throws Exception {
throw new IllegalStateException("Voa voa exceção...");
}
public void seguraEx() {}
}
A ideia é a exceção ser lançada em lancaErro() e ir para em seguraEx()
crie então uma página em
WEB-INF/test/seguraEx.jsp
com o conteudo abaixo
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
ERRO!!!! === ${ex.message}
<br/><br/>
${ex.cause}
<br/><br/>
${ex}
</body>
</html>
Então fiz um interceptor, que agarra exceções e envia pra seguraEx
@Intercepts
public class TestInterceptor implements Interceptor{
private final Result result;
public TestInterceptor(Result result) {
this.result = result;
}
@Override
public boolean accepts(ResourceMethod method) {
return true;
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
try {
stack.next(method, resourceInstance);
} catch (Exception ex) {
result.include("ex", ex);
result.forwardTo(TestController.class).seguraEx();
}
}
}
Então acessei => http://localhost:8080/contexto/test/lancaErro
e o resultado foi o experado… a exceção foi lançada no método lancaErro(); foi para no interceptor, foi incluida dentro de ${ex} e então o fluxo foi enviado para o TestController.class para a lógica seguraEx(), e então a página seguraEx.jsp é exibida, produzindo o texto abaixo!
[code]ERRO!!! === an exception was raised while executing resource method
java.lang.IllegalStateException: Voa voa exceção…
br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method[/code]
tem algo estranho ai na sua lógica