VRaptor 3 - java.lang.NoClassDefFoundError: org/hamcrest/Description [Resolvido]

3 respostas
Guevara

Oi pessoal!
Continuando a saga do exercicio da apostila da Caelum, esbarrei no seguinte erro;

SEVERE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: java.lang.NoClassDefFoundError: org/hamcrest/Description
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NoClassDefFoundError: org/hamcrest/Description
	at br.com.bruno.jmovie.controller.FilmeController.adiciona(FilmeController.java:35)
	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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:50)
	... 37 more
Caused by: java.lang.ClassNotFoundException: org.hamcrest.Description
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	... 43 more

Meu método adiciona() na classe FilmeController:

public void adiciona( final Filme filme) {
	    
		validator.checking(new Validations() {{
			that(filme.getControle() == null, "filme.controle","controle.obrigatorio");
			that(filme.getNome().isEmpty(),"filme.nome","nome.obrigatorio");
			that(filme.getGenero().isEmpty(),"filme.genero","genero.obrigatorio");
		}});
		
		// Redirecionando para o formulario em caso de erro na validaçao
		validator.onErrorUse(Results.page()).of(FilmeController.class).formulario();
		
	    filmeDao.adiciona(filme);
	    
	    //redirecionamento para a lista após a inclusao
	    result.use(Results.logic()).redirectTo(FilmeController.class).lista();
	}

O message.properties coloquei na pasta WEB-INF/classes/message.properties, li isso em algum lugar mas não sei se está correto.

Estou fazendo a maneira “fluente” de validação, o Eclipse acusou a falta dessa biblioteca Hamcrest, baixei, criei na Libraries uma pasta Hamcrest e coloquei os JARs lá, peguei o matchers.xml (que vêm no Hamcrest) e coloquei junto com o web.xml na WEB-INF e não resolveu, pensei que o VRaptor já tivesse td embutido pra fazer esse tipo de validação.
O que está faltando?

[]s

3 Respostas

Guevara

Adicionei o jar do Hamcrest versão full na lib, agora a mensagem é que não encontra meu message_pt_BR.properties que está na pasta /src:

br.com.caelum.vraptor.InterceptionException: java.util.MissingResourceException: Can't find bundle for base name messages, locale pt_BR

Onde configuro pra ele achar o meu properties e onde ele deve ficar?

Abraço!

Lucas_Cavalcanti

tire o _pt_BR que vai funcionar… tem que ter um arquivo chamado messages.properties… se vc quiser deixar uma OPÇÃO para inglês vc criaria um messages_en.properties ou messages_en_US.properties

Guevara

Obrigado mais uma vez Lucas!

Resolvi! O messages.properties ficou na pasta /WEB-INF/classes.

Abraço!

Criado 25 de janeiro de 2010
Ultima resposta 25 de jan. de 2010
Respostas 3
Participantes 2