anj*_*ava 5 hibernate-validator cdi bean-validation
当WAR文件中包含的JodaTime v。2.5库在GF 5.0中部署失败时,出现以下错误。看来问题出在hibernate-validator中。GF5.0在运行GF 4.1.2时,hibernate-validator捆绑包未加载ReadableInstant,因此未加载FutureValidatorForReadableInstant。
加载应用程序时发生异常:CDI部署失败:Errornstantiating:org.hibernate.validator.cdi.internal.ValidationExtension
Caused by: java.lang.TypeNotPresentException: Type org.joda.time.ReadableInstant not present
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
at sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
at sun.reflect.generics.repository.ClassRepository.getSuperclass(ClassRepository.java:90)
at java.lang.Class.getGenericSuperclass(Class.java:777)
at org.hibernate.validator.internal.util.TypeHelper.resolveTypeForClassAndHierarchy(TypeHelper.java:386)
at org.hibernate.validator.internal.util.TypeHelper.resolveTypes(TypeHelper.java:351)
at org.hibernate.validator.internal.util.TypeHelper.extractType(TypeHelper.java:327)
at org.hibernate.validator.internal.engine.constraintvalidation.ClassBasedValidatorDescriptor.(ClassBasedValidatorDescriptor.java:39)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorDescriptor.forClass(ConstraintValidatorDescriptor.java:49)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at org.hibernate.validator.internal.metadata.core.ConstraintHelper.putConstraints(ConstraintHelper.java:686)
at org.hibernate.validator.internal.metadata.core.ConstraintHelper.(ConstraintHelper.java:386)
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.(ValidatorFactoryImpl.java:155)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:322)
at org.hibernate.validator.cdi.internal.ValidationExtension.(ValidationExtension.java:116)
... 78 more
Run Code Online (Sandbox Code Playgroud)
我认为这可能是Hibernate Validator中的错误。我创建了https://hibernate.atlassian.net/browse/HV-1490来跟踪此问题。
当我们尝试在ConstraintHelper中检测Joda Time时,我们使用LoadClass机制,如果在ConstraintHelper / HV CL中找不到该类,则可能会使用Thread Context类加载器。
就您而言,我认为ReadableInstant类可在TCCL中访问,但不能在HV CL中访问。
当我们尝试从ConstraintValidator获取类型时,我们只有HV CL,因此无法找到该类。
因此,我认为我们应该在HV中解决此问题,但是我不确定它是否会对您有所帮助,因为一旦修复,Joda时间约束验证器将始终无法启用。
对于乔达时间依赖性(https://github.com/javaee/glassfish/blob/master/nucleus/packager/external/bean-validator/pom.xml),可能没有帮助的是,HV的OSGi捆绑包看上去有些过时了。#L124)。我将与GlassFish团队联系,看看他们是否可以更新它。
我创建了一个PR https://github.com/hibernate/hibernate-validator/pull/857,以解决我们这方面的问题。您可能可以获取此分支,进行构建(只是mvn全新安装),然后升级GlassFish中的jar。如上所述,它不允许您对Joda Time类型使用约束,但是至少,您应该能够启动应用程序。如果您可以尝试,我对您的反馈意见很感兴趣。
关于GF部门,我给GF团队发送了电子邮件,并会告知您在这方面是否有所进展。
更新:GF 5.0.1将包含针对此问题的修复程序。如果您将目前的GF升级到HV 6.0.3.Final(今天发布),您应该可以启动您的应用程序(但无法对Joda Time类型设置约束,这将需要等待GF 5.0.1。 )。
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |