VRaptor e integração com Hibernate Validator 4.x

40 respostas
G
seufagner:
O VRaptor suporta Hibernate Validator 4x ?

Sim, existe, eu mesmo que implementei :oops:

seufagner:
Como injeto através do VRaptor, é possível ao invés de ficar criando ValidatorFactory/Validator "na mão" ?

Basta você colocar o jar do Hibernate Validator 4x no classpath (WEB-INF/lib) que o Vraptor registra o converter automagico. Para usar basta você injetar o Validator via construtor e chamar o método validate.

public class MeuController {
    public MeuController(Validator validator) {
        this.validator = validator;
    }

    public void foo() {
        validator.validate(meuBean);
        validator.onErrorUse(blah-blah-blah);
    }
}
seufagner:
Pelo visto tenho que usar JPA (Estou usando Hibernate puro) ou é impressão minha ?

Creio que sim, pois o Hibernate Validator 4x é implementada baseado na spec Bean Validator do JPA 2x.

40 Respostas

Lavieri

Creio que sim, pois o Hibernate Validator 4x é implementada baseado na spec Bean Validator do JPA 2x.

nop, não senhor… a spec JSR303 é uma coisa… e do JPA é outra… não tem nada a ver uma com a outra…

vc não precisa de JPA para usar validações, e não precisa ser o JPA do Hiberante, caso resolva usar JPA…

o bean validator é totalmente independente… e funciona tanto em Satand alone, como em aplicações maiores…

A única coisa é que o Hiberante é a implementação de referencia do Bean Validator, porem o Hiberante 4, é um fork do 3, para ser compativel com a JSR 303, tanto que os 2 não são compativeis…

Lucas_Cavalcanti

já tá implementado, só que foi lançado com um bug (por culpa minha, não do garcia-jj =S)

o fix tá no último snapshot:
http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.3-SNAPSHOT/

G

Desculpe, na correria troquei as bolas :smiley:

Lavieri

Desculpe, na correria troquei as bolas :smiley:

com Hibernate ate tem =PP uuhuhuhuh pra falar a verdade…

o Hiberante implementa um Listener, (por padrão, afinal vc pode desativar ele) … esse listener na presença do pacote do bean validator na lib, faz a validação automaticamente antes de persit/marge fazendo parecerque é ralmente integrado…

Não sei se o toplink faz o mesmo no JPA2 quando vê a JSR303 na lib, enfim… é isso ai…

o.O … Lucas, vcs podiam fingir que nada aconteceu, e deixar o snapshot com o bug-fix como sendo o 3.1.2 =P … assim para os downloads futuros, a turma não vai baixar com esse bug… como no site do vraptor a versão estavel para download é a 3.1.2, acaba que nego pega a versão com esse bug… =/

G

Mas falando do erro, estou achando estranho esse stacktrace. Analisando os componentes que envolvem o JSR303Validator apenas as classes de javax.validator são usadas (vide links abaixo). E no stacktrace estamos com o seguinte erro:

Caused by: java.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil; at org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33) at org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112) at org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47) at org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:764) at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:331) at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:278) at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:260) at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:213) at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119) at br.com.caelum.vraptor.validator.JSR303Validator.validate(JSR303Validator.java:67)

A classe JSR303Validator está envolvida, porém na linha 67 é chamado apenas o validate da factory. Creio que há sim alguma dependencia do validator quanto ao JPA, pois todas as classes acima são do pacote org.hibernate.validator.engine.

http://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/validator/JSR303Validator.java
http://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/validator/JSR303ValidatorFactory.java

Lucas_Cavalcanti

a partir da factory, ele usa automaticamente a implementação…

se vc estivesse com a implementação bolinha no classpath, nesse mesmo ponto do stack estaria:
br.com.bolinha…

G

Lucas Cavalcanti:
a partir da factory, ele usa automaticamente a implementação…

se vc estivesse com a implementação bolinha no classpath, nesse mesmo ponto do stack estaria:
br.com.bolinha…

O que eu quero dizer que o toplevel são classes do Hibernate Validator, ou seja, a dependencia está sendo do HV4 e não Vr3. Ainda mais estranho essa org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)

sergiolopes

To usando o Hibernate Validator 4 com a JSR303 com sucesso no VRaptor 3.1.2 no Google AppEngine após corrigir o bug que o Lucas comentou. Eu precisei chamar JSR303Validator.getFactory() no início da aplicação senão tomava o NullPointer que reportei lá.

Sobre a dependência: pelo menos no GAE, onde as coisas são meio estranhas com a JPA, precisei tirar aquele JAR jpa-api-BETA-2 que vem junto com o Validator. Se deixar lá ele procura por JPA 2 e cria essa dependência que vocês falaram. Mas basta tirar o tal jar e tudo funciona

[]'s

G

Na verdade esse erro é o teu, eu não estou tendo esse erro não porque não uso o Hibernate Validator. Apenas repliquei teu stacktrace para comentar que estou achando tudo isso muito estranho. Creio que não tem nada a ver com o Vraptor, mas sim alguma dependencia do Hibernate.

Vou analisar a documentação para ver as dependencias certinho, mas por alguma razão que não sei qual está sendo chamado as classes do JPA.

Acho que pode ser esse o problema então. Deve haver alguma classe do JPA no classpath, então o Hibernate Validator tenta chamar algo. Seufagner, verifique se há alguma classe dessas no teu classpath como o Sérgio falou.

G

Estive nessa semana mexendo nesse componente do Bean Validator no Vraptor, e conforme uma issue aberta pelo Sérgio (http://github.com/caelum/vraptor/issues/issue/213) estive alterando algumas coisas nesse componente.

E para minha surpresa todos os testes do JUnit falham levantando a exception conforme o seufagner falou. Bastou então eu tirar o jar do JPA1 do classpath e os testes do JUnit funcionaram. Ou seja, o Hibernate Validator procura por um JPA no classpath, e se encontrar ele faz um shift para o JPATraversableResolver que chama um método que só tem no jPA2. Aliás, estou chutando esse comportamento, preciso analisar os fontes do Hibernate Validator e ver isso nos fóruns do Hibernate.

Se eu estiver certo mesmo quando a ele procurar pelo JPA e se perder pegando a implementação errada, creio ser um bug, não? Afinal, sendo assim você nunca poderá usar HIbernate Validator com JPA1?

G

seufagner, achei um post interessante sobre esse caso. Dê uma olhada aqui: https://forum.hibernate.org/viewtopic.php?p=2422115#p2422115

Na verdade como o Lavieri citou o Hibernate Validator é standalone, e deve sim funcionar sem JPA. Fazendo testes nesse componente do Vraptor eu noto que ele funciona sim standalone, porém quando eu coloco um jar do JPA1 ele fica louco e acha que tem JPA2 e dá essa zica. No tópico que te passei o pessoal comenta sobre isso. Um dos desenvolvedores do Hibernate diz que acha ser algo do Toplink… mas sei lá, hehe.

Fiz o que ele indicou nesse link aí, que é criar um custom TransversableResult retornando null em ambos métodos e o problema se resolve. Fiz isso e agora todos os testes desse componente passaram com as barras verdes :lol:

Publiquei as correções no meu fork: http://github.com/garcia-jj/vraptor/commit/3b64b8dc6faab54a87573894c4cc3eb11080a25c

Lucas, o que você acha?

sergiolopes

Oi Garcia!

Eu estou usando aqui o Hibernate Validator com JPA 1 sem problemas na implementação do DataNucleus no AppEngine.
O meu problema foi quando eu coloquei o JAR da JPA2 no classpath (aquele que vem dentro do Validator, o jpa2-spec-BETA ou algo assim). Com JPA1 as coisas estão funcionando ok por aqui.

PS. inclusive a solução de apagar o JAR da JPA2 eu achei no fórum do Hibernate também, em algum lugar.

[]'s

G

Sérgio, que coisa bem estranha. No caso do Vraptor tem no classpath tanto o JPA1 como o JPA2, aí realmente pode ter algum problema. Mas com aquele custom transversable resolveu esse problema.

No caso do problema do seufagner não sei bem o que pode ser, talvez ele esteja com ambos jars no classpath. Seufagner, qual o appserver e versão você está usando? Vem tem quais jars referente a persistencia no seu classpath?

Lucas_Cavalcanti

em aplicações normais vc não deveria ter o JPA 1 e 2 no classpath ao mesmo tempo mesmo…

o problema é conseguir testar isso no código do vraptor, já que ele depende tanto do jpa 1 qto do 2… =/

G

Lucas Cavalcanti:
em aplicações normais vc não deveria ter o JPA 1 e 2 no classpath ao mesmo tempo mesmo…

o problema é conseguir testar isso no código do vraptor, já que ele depende tanto do jpa 1 qto do 2… =/

Acho importante saber o que está acontecendo com o seufagner. Se for problema apenas nos testes podemos deixar aquela classe JSR303TraversableResolver apenas nos testes. Creio que assim resolvemos todos os problemas.

sergiolopes

nao sei se essa frase faz sentido, ja que JPA2 é uma evolucao da JPA1. tecnicamente, qdo vc tiver a JPA2, vc tem a JPA1 tbm :smiley:

o problema todo acho que é estar com a spec de uma versao e a impl de outra versao. o validator deve descobrir a versao a usar pela spec e ai da pau qdo ele tenta inicializar e a impl nao esta no classpath

Yokomizo

Também estou com esse problema…

Eu tenho pouca experiência com JAVA, então na maioria das vezes voje vcs discutindo e não entendo nada :smiley:

Primeiro problema:
Quando eu chamava validator.validade(obj) recebia nullpointerexception… Ai fiz o que o Sergio falou: JSR303Validator.getFactory();

Mas ai veio o problema 2:

Caused by: java.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil;
	at org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)
	at org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112)
	at org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)
	at org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:764)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:331)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:278)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:260)
	at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:213)
	at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119)
	at br.com.caelum.vraptor.validator.JSR303Validator.validate(JSR303Validator.java:67)
	at br.com.caelum.vraptor.validator.DefaultValidator.validate(DefaultValidator.java:72)
	at com.teste.control.RegistroController.index(RegistroController.java:75)
	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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
	... 40 more

então eu acessei o snapshot que o lucas disse, e baixei vraptor-3.1.3-20100428.160403-2.jar, e substitui pelo 3.1.2 na minha lib… mas ainda assim estou tendo esse problema.
Já tentei apagar o jpa-api-2.0.Beta-20090815.jar da lib mas também não adiantou…

Sou extremamente leigo nesse assunto, e tudo que fiz até agora foi seguindo o passo a passo das apostilas e documentação, mas essa validação pelo hibernate não estou conseguindo de jeito nenhum… vou pular essa parte e fazer na mão a validação por enquanto…

Ajuda…
Obrigado.

G

Yokomizo, qual o appserver que você está usando? Você está usando apenas Hibernate ou Hibernate via JPA?

Yokomizo

Estou usando tomcat

esse é meu primeiro projeto em java, e ainda não conheço nada da área, portanto não sei se estou usando apenas hibernate ou jpa também…

na minha lib, há um jar jpa-api-2.0.Beta-20090815.jar.

Eu cheguei a deletar esse jar ao ler o que o Sérgio falou… mas o erro continuou então eu resolvi colocar esse jar na lib novamente…

Lucas_Cavalcanti

vc tem um ejb-persistence.jar no classpath? tenta tirá-lo

Yokomizo

Retirei esse jar, mas continua dando erro…

obs.: depois que mudei do vraptor 3.1.2 para o 3.1.3 depois que o vraptor inicia, quando ocorre algum erro, não acontece nada… não mostra a exception, e retorna uma página em branco… nada é executado após o erro, porém ele não mostra as exception nem no eclipse.

Se eu forço um erro ne NullPointer nos interceptors, ele mostra… Masss o mesmo erro de NullPointer, se eu forço ele no controller, ele para de executar mas não mostra a exception…

Será que eu setei algum debug=off na mão aqui sem saber ou o 3.1.3 está assim mesmo?

Yokomizo

Comecei um novo projeto com vraptor e forcei nullpointer no controller… agora mostrou o erro, mas fiquei sem saber o pq :S

vou tentar validar com hibernate novamente, e posto qualquer evolução…

Yokomizo

desconsiderem esses meus ultimos posts… não estava trazendo as exception pq eu havia criado um insterceptor assim:

try {
//abre conexao
stack.next(method, instance);
//comita
}catch(InterceptionException e){
//rollback
}

desculpa ai…

Yokomizo

Se eu tiro o ejb3-persistence-1.0.1.GA.jar

Caused by: java.lang.ClassNotFoundException: javax.persistence.spi.PersistenceProvider
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at sun.misc.Launcher$ExtClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
Lucas_Cavalcanti

tenta dar uma olhada nos jars da sua aplicação e ver se esses jars existem:

http://github.com/caelum/vraptor/tree/master/vraptor-core/lib/mandatory

http://github.com/caelum/vraptor/tree/master/vraptor-core/lib/optional

G

Lucas, tem um jar com o snapshot com aquelas últimas correções?

Lucas_Cavalcanti

http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.3-SNAPSHOT/vraptor-3.1.3-20100510.222134-3.jar

Yokomizo

Realmente faltavam algumas jars…

agora voltei ao erro:

Caused by: java.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil;
	at org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)
	at org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112)
	at org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)
	at org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:764)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:331)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:278)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:260)
	at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:213)
	at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119)
	at br.com.caelum.vraptor.validator.JSR303Validator.validate(JSR303Validator.java:67)
	at br.com.caelum.vraptor.validator.DefaultValidator.validate(DefaultValidator.java:72)
	at com.teste.control.RegistroController.index(RegistroController.java:84)
	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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
	... 40 more

Como nunca fiz a validação de um bean, talvez eu tenho pulado alguma parte… não precisa criar nenhum arquivo auxiliar?

Meu bean:

@Component
public class Usuario {

	@Email
	@Max(50)
	@NotEmpty
	private String			email;
	
	@Size(min = 6, max = 30)
	@NotEmpty
	private String			senha;

Como é a primeira vez que uso hibernate, mapiei ele pro hibernate por xml… Pois não consegui mapear as relações com annotation :confused: e ficou facil fazer com xml, ja que estava na documentação… em breve dou uma estudada nessas annotations.

<hibernate-mapping>
	<class name="com.teste.model.administracao.Usuario" table="adm_usuario" where="delete_flag = 0">
	
		<id type="int" column="usuario_id" >
			<generator class="native"/>
		</id>
		
		<property name="email">
			<column name="email" />
		</property>
		
		<property name="senha">
			<column name="senha" />
		</property>
...

Ai na hora de validar eu executo isso:

JSR303Validator.getFactory();
		
		usuario = new Usuario();
		usuario.setEmail("[email removido]");
		usuario.setSenha("asdfgh");
		
		validator.validate(usuario);

esqueci algo?
Sou iniciante :?

Lucas_Cavalcanti

não precisa dessa linha: JSR303Validator.getFactory();

é só usar o último snapshot do vraptor, que mandei na última mensagem minha…

dá um dir (ou ls) na sua pasta WEB-INF/lib e posta aqui por favor?

Yokomizo

segue:

11/05/2010 15:03 .
11/05/2010 15:03 …
08/01/2010 19:27 443.432 antlr-2.7.6.jar
22/12/2009 13:01 4.467 aopalliance.jar
08/10/2009 16:05 114.916 aspectjrt.jar
08/10/2009 16:05 324.238 cglib-nodep-2.1_3.jar
08/01/2010 19:27 559.366 commons-collections-3.1.jar
26/10/2009 18:37 147.788 commons-email-1.2-javadoc.jar
26/10/2009 18:37 33.413 commons-email-1.2-sources.jar
26/10/2009 18:37 32.321 commons-email-1.2.jar
15/10/2009 13:57 57.779 commons-fileupload-1.2.1.jar
09/11/2009 16:28 87.776 commons-io-1.3.2.jar
21/02/2010 20:38 279.193 commons-lang-2.5.jar
08/10/2009 16:05 60.841 commons-logging.jar
08/10/2009 16:05 362.717 commons-vfs-1.0.jar
08/10/2009 16:05 1.360 dependencies.txt
08/10/2009 16:05 313.898 dom4j-1.6.1.jar
17/11/2009 12:13 18.073 dsn.jar
08/10/2009 16:05 52.847 ejb3-persistence-1.0.1.GA.jar
30/12/2009 10:35 577.311 google-collect-1.0.jar
08/10/2009 16:05 280.973 hamcrest-all-1.2RC3.jar
22/12/2009 13:01 2.421.736 hibernate-3.3.2.jar
22/12/2009 13:01 279.714 hibernate-annotations-3.4.0.jar
22/12/2009 13:01 66.993 hibernate-commons-annotations-3.4.0.jar
08/01/2010 19:27 62.574 hibernate-validator-3.1.ga.jar
24/04/2010 13:05 226.653 hibernate-validator-4.0.2.GA.jar
14/04/2010 18:52 3.898.089 hibernate3.jar
17/11/2009 12:13 172.582 imap.jar
01/02/2010 22:55 60.617 iogi-0.8.1.jar
08/01/2010 19:27 597.476 javassist-3.9.0.GA.jar
08/10/2009 16:05 534.827 joda-time-1.6.jar
16/09/2009 12:31 97.810 jpa-api-2.0.Beta-20090815.jar
08/10/2009 16:05 5.848 jsr250-api-1.0.jar
09/01/2010 23:29 30.692 jstl-api-1.2.jar
09/01/2010 23:29 392.434 jstl-impl-1.2.jar
22/12/2009 13:01 13.236 jta-1.1.jar
25/07/2008 17:02 431.422 kaptcha-2.3.jar
16/09/2009 12:40 367.444 log4j-1.2.14.jar
08/10/2009 16:05 391.834 log4j-1.2.15.jar
17/11/2009 12:13 462.098 mail.jar
17/11/2009 12:13 250.234 mailapi.jar
08/10/2009 16:05 74.546 mirror-1.5.1.jar
18/02/2010 02:16 732.695 mysql-connector-java-5.1.12-bin.jar
08/10/2009 16:05 31.582 objenesis-1.1.jar
08/10/2009 16:05 239.803 ognl-2.7.3.jar
22/12/2009 13:01 324.242 org.springframework.aop-3.0.0.RELEASE.jar
22/12/2009 13:01 53.081 org.springframework.asm-3.0.0.RELEASE.jar
06/01/2010 11:06 30.482 org.springframework.aspects-3.0.0.RELEASE.jar
22/12/2009 13:01 551.967 org.springframework.beans-3.0.0.RELEASE.jar
22/12/2009 13:01 657.492 org.springframework.context-3.0.0.RELEASE.jar
22/12/2009 13:01 359.338 org.springframework.core-3.0.0.RELEASE.jar
22/12/2009 13:01 154.200 org.springframework.expression-3.0.0.RELEASE.jar
22/12/2009 13:01 359.154 org.springframework.web-3.0.0.RELEASE.jar
08/10/2009 16:05 28.415 paranamer-1.5.jar
08/10/2009 16:05 286.827 picocontainer-2.8.jar
17/11/2009 12:13 36.334 pop3.jar
08/10/2009 16:05 49.511 reflections-0.9.4.jar
16/09/2009 12:31 22.338 slf4j-api-1.5.6.jar
22/12/2009 13:01 23.445 slf4j-api-1.5.8.jar
16/09/2009 12:40 9.678 slf4j-log4j12-1.5.6.jar
22/12/2009 13:01 9.679 slf4j-log4j12-1.5.8.jar
17/11/2009 12:13 44.993 smtp.jar
11/05/2010 15:03 0 teste.txt
24/04/2010 13:05 47.433 validation-api-1.0.0.GA.jar
10/05/2010 15:18 776.499 vraptor-3.1.3-20100428.160403-2.jar
08/10/2009 16:05 576.625 vraptor2-2.6.2.jar
06/11/2009 16:09 24.956 xpp3_min-1.1.4c.jar
06/01/2010 11:06 431.406 xstream-1.3.1.jar
66 arquivo(s) 20.453.743 bytes
2 pasta(s) 34.843.885.568 bytes dispon¡veis

G

Yokomizo, desculpe a brincadeira… mas meu deus, nunca ví tanto jar em uma única aplicação, hehehe.

Acho que você precisa fazer uma limpa aí removendo algumas coisas que você não precisa. isso podem causar muitos conflitos. Um exemplo, você tem duas versões de hibernate-validator, olhe só:

08/01/2010 19:27 62.574 hibernate-validator-3.1.ga.jar 24/04/2010 13:05 226.653 hibernate-validator-4.0.2.GA.jar

Você também possui 2 hibernates:

14/04/2010 18:52 3.898.089 hibernate3.jar 22/12/2009 13:01 2.421.736 hibernate-3.3.2.jar

Duas vezes o log4j, além de redundantes implementações do SLF4J:

16/09/2009 12:40 367.444 log4j-1.2.14.jar 08/10/2009 16:05 391.834 log4j-1.2.15.jar

Seu projeto é novo? Você usa apenas Vraptor? Porque não apagar todas essas libs, e pegar apenas o jar do Vraptor e suas dependencias obrigatórias? Conforme o Lucas te disse, no diretório /lib/required do projeto do vraptor você encontra uma lista das dependencias obrigatórias.

Lucas_Cavalcanti

vc pode tirar os jars:

commons-email-1.2-javadoc.jar
commons-email-1.2-sources.jar
hibernate3.jar
hibernate-validator-3.1.ga.jar
jpa-api-2.0.Beta-20090815.jar (se vc não usar jpa2)
log4j-1.2.14.jar
slf4j-api-1.5.6.jar
slf4j-log4j12-1.5.6.jar

tenta tirar isso e ver no que dá

[]'s

Yokomizo

Removi os jars e tomei a mesma exception

java.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil;
	org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)
	org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112)
	org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)
	org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:764)
	org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:331)
	org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:278)
	org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:260)
	org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:213)
	org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119)
	br.com.caelum.vraptor.validator.JSR303Validator.validate(JSR303Validator.java:67)
	br.com.caelum.vraptor.validator.DefaultValidator.validate(DefaultValidator.java:72)
	com.teste.control.RegistroController.cadastroUsuario(RegistroController.java:97)
	com.teste.control.RegistroController.usuario(RegistroController.java:155)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
	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.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	com.teste.interceptor.DatabaseInterceptor.intercept(DatabaseInterceptor.java:29)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	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)
Yokomizo

Ao remover a jpa-api-2.0.Beta-20090815.ja alguns relacionamentos pararam de funcionar… então coloquei hibernate-jpa-2.0-api-1.0.0.Final.jar e tudo voltou ao normal

mas ainda não consigo validar

Lucas_Cavalcanti

tá dando algum erro? ou simplesmente não valida?

qual código de validação vc tah usando?

Yokomizo

Só queria dizer que instalei o maven e peguei o hibernate por la, junto com as dependências, e agora está uma maravilha.

Obrigado

seufagner

O VRaptor suporta Hibernate Validator 4x ?

Como injeto através do VRaptor, é possível ao invés de ficar criando ValidatorFactory/Validator “na mão” ?

Obg!

seufagner

Código do Controller

@Post
	@Path("/manager/produto/add")
	public void add(final Produto produto) {

		for (BeanValidator validator : validators) {
			List<Message> validateMessages = validator.validate(produto);

			if (!validateMessages.isEmpty()) {
				result.include("errors", validateMessages);
				result.of(ProdutoManagerController.class).form();
			}
		}

		produtoDao.saveOrUpdate(produto);

		result.of(ProdutoManagerController.class).list();

	}

De qualquer forma, preciso ccontrolar as mensasgens de erro na mão ? E a internacionalização?

Trace

Caused by: java.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil;
	at org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)
	at org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112)
	at org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)
	at org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:764)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:331)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:278)
	at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:260)
	at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:213)
	at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119)
	at br.com.caelum.vraptor.validator.JSR303Validator.validate(JSR303Validator.java:67)
	at br.com.atttecnologia.ecommerce.web.controller.admin.ProdutoManagerController.add(ProdutoManagerController.java:68)
	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:585)
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
	... 43 more

Pelo visto tenho que usar JPA (Estou usando Hibernate puro) ou é impressão minha ?

seufagner

Estou tomando o mesmo bug que o garcia.

No site do Hibernate Validator eles sugerem que adicione a lib do jpa2 no classpath, logo, na minha opinião, há dependência que gera tal erro.

seufagner

Garcia

Eu estou com o jar da JPA 2 que é distribuído e indicado pelo próprio Hibernate Validator. Por isso eu vou além, eu não posso usar Bean Validator sem usar JPA seja qual for a versão?

A dependência é opcional, porém, ao fazer download, o readme.txt que vem com a distribuição sugere:

"Using Hibernate Validator

  • Copy hibernate-validator-*.jar together will all jar files from lib into the
    classpath of your application. In case you are running on JDK5 you have to also include
    all the jar files from the jdk5 subdirectory.

or …"

E entre os jars está o da JPA 2 (jpa-api-2.0.Beta-20090815.jar)

Issue que cita dependência com JPA

http://opensource.atlassian.com/projects/hibernate/browse/HV-191

Criado 4 de maio de 2010
Ultima resposta 8 de mai. de 2010
Respostas 40
Participantes 6