VRaptor se perde para redirecionar quando controller possui um path muito grande

Boa noite,

Alterei a convenção do VRaptor para utilizar minha hierarquia de pacotes (removendo a necessidade de anotar com @Path), mas percebi ao acaso que estou tendo problemas quando o path do Controller começa a crescer. O VRaptor simplesmente não sabe para onde direcionar e, mesmo que ele mostre no log o path encontrado correto, mesmo assim a página fica em branco.

A alteração da convenção foi a seguinte:

@Component
public class PackagePathResolver implements PathResolver {

	@Override
	public String pathFor(ResourceMethod method) {
		final Class<?> clazz = method.getResource().getType();
		final String clazzName = clazz.getSimpleName();
		final Package pkg = clazz.getPackage();

		final StringBuilder s = new StringBuilder();
		s.append("/WEB-INF/jsp/");
		String lastPackage = StringUtils.substringAfter(pkg.getName(), "controller.").replaceAll("\\.", "/");
		s.append(lastPackage);
		if (!StringHelper.isEmpty(lastPackage)) {
			s.append("/");
		}
		s.append(StringUtils.substringBefore(clazzName, "Controller").toLowerCase());
		s.append("/");
		s.append(method.getMethod().getName().toLowerCase());
		s.append(".jsp");

		return s.toString();
	}

@Component
@ApplicationScoped
public class PackageRoutesParser extends PathAnnotationRoutesParser {

	//delegate constructor
	public PackageRoutesParser(Router router) {
		super(router);
	}

	@Override
	protected String extractControllerNameFrom(Class<?> type) {
		return extractPackage(type) + super.extractControllerNameFrom(type);
	}

	private String extractPackage(Class<?> type) {
		String[] subpackages = type.getPackage().getName().split("\\.");
		String path = "";
		boolean appendPackageName = false;
		for (String s : subpackages) {
			if (appendPackageName) {
				path += "/" + s;
			}

			if ("controller".equals(s)) {
				appendPackageName = true;
			}
		}
		return path;
	}
}

Com log habilitado, tenho os seguintes outputs:

...
INFO  b.c.c.v.h.route.DefaultRouteBuilder - /recepcaodocumentos/recebimentoDocumento/inicio   [ALL] -> RecebimentoDocumentoController.inicio()
DEBUG b.c.c.vraptor.view.DefaultPageResult - forwarding to /WEB-INF/jsp/recepcaodocumentos/recebimentodocumento/inicio.jsp

Tenho uma JSP EXATAMENTE nesse path que foi mostrado no log e mesmo assim ao tentar acessar a URL informada, a página simplesmente fica em branco e aparece o seguinte log:

19:40:02.268 [http-bio-8080-exec-5] DEBUG br.com.caelum.vraptor.VRaptor - VRaptor received a new request
19:40:02.270 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ResourceLookupInterceptor
19:40:02.270 [http-bio-8080-exec-5] DEBUG b.c.c.v.h.DefaultResourceTranslator - trying to access /recepcaodocumentos/recebimentoDocumento/inicio
19:40:02.270 [http-bio-8080-exec-5] DEBUG b.c.c.v.h.DefaultResourceTranslator - found resource [DefaultResourceMethod: RecebimentoDocumentoController.inicio()]
19:40:02.271 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor InstantiateInterceptor
19:40:02.275 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ExceptionHandlerInterceptor
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor FlashInterceptor
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ExecuteMethodInterceptor
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.i.ExecuteMethodInterceptor - Invoking RecebimentoDocumentoController.inicio()
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ForwardToDefaultViewInterceptor
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.i.ForwardToDefaultViewInterceptor - forwarding to the dafault page for this logic
19:40:02.278 [http-bio-8080-exec-5] DEBUG b.c.c.vraptor.view.DefaultPageResult - forwarding to /WEB-INF/jsp/recepcaodocumentos/recebimentodocumento/inicio.jsp
19:40:02.279 [http-bio-8080-exec-5] DEBUG br.com.caelum.vraptor.VRaptor - VRaptor received a new request
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ResourceLookupInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.h.DefaultResourceTranslator - trying to access /recepcaodocumentos/recebimentoDocumento/inicio
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.h.DefaultResourceTranslator - found resource [DefaultResourceMethod: RecebimentoDocumentoController.inicio()]
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor InstantiateInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ExceptionHandlerInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor FlashInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ExecuteMethodInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.i.ExecuteMethodInterceptor - Invoking RecebimentoDocumentoController.inicio()
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ForwardToDefaultViewInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.i.ForwardToDefaultViewInterceptor - Request already dispatched and commited somewhere else, not forwarding.
19:40:02.280 [http-bio-8080-exec-5] DEBUG br.com.caelum.vraptor.VRaptor - VRaptor ended the request
19:40:02.280 [http-bio-8080-exec-5] DEBUG br.com.caelum.vraptor.VRaptor - VRaptor ended the request

Alguém poderia me dar uma luz? Estou sem idéias do que fazer…

Obrigado.

se vc está usando o VRaptor 3.5.2, tente voltar para o 3.5.1, estamos investigando um bug que deve ter a ver com o seu problema.

Voltar a versão e fazer um clean/build do projeto toda vez que eu me deparo com o problema “resolveu”. Não é o ideal devido ao tempo dos builds, mas está funcionando.