首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android studio中使用hibernate-validator

如何在android studio中使用hibernate-validator
EN

Stack Overflow用户
提问于 2020-10-11 12:33:04
回答 1查看 199关注 0票数 0

获取java.lang.NoSuchMethodError:使用hibernate 6.1.6时没有虚拟方法getAnnotatedInterfaces()异常。我使用的是java8,我想使用hibernate 6.1.6来使用Container element约束。

this post的解决方案运行良好,但它适用于5.1.3版fine。

我的代码和错误

代码语言:javascript
复制
Dependencies

compile group: 'org.hibernate', name: 'hibernate-validator', version: '6.1.6.Final'
compile group: 'org.glassfish', name: 'jakarta.el', version: '3.0.3'
compile group: 'org.hibernate', name: 'hibernate-validator-cdi', version: '6.1.6.Final'

获取错误

代码语言:javascript
复制
2020-10-11 09:52:13.515 20928-20928/com.applab.peermainactivity E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.applab.peermainactivity, PID: 20928
java.lang.NoSuchMethodError: No virtual method getAnnotatedInterfaces()[Ljava/lang/reflect/AnnotatedType; in class Ljava/lang/Class; or its super classes (declaration of 'java.lang.Class' appears in /system/framework/core-oj.jar)
    at org.hibernate.validator.internal.engine.valueextraction.ValueExtractorDescriptor.determineValueExtractorDefinitions(ValueExtractorDescriptor.java:150)
    at org.hibernate.validator.internal.engine.valueextraction.ValueExtractorDescriptor.getValueExtractorDefinition(ValueExtractorDescriptor.java:123)
    at org.hibernate.validator.internal.engine.valueextraction.ValueExtractorDescriptor.<init>(ValueExtractorDescriptor.java:45)
    at org.hibernate.validator.internal.engine.valueextraction.ByteArrayValueExtractor.<clinit>(ByteArrayValueExtractor.java:16)
    at org.hibernate.validator.internal.engine.valueextraction.ValueExtractorManager.<clinit>(ValueExtractorManager.java:60)
    at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:169)
    at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38)
    at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.buildValidatorFactory(AbstractConfigurationImpl.java:448)
    at com.applab.peermainactivity.BaseActivity.<clinit>(BaseActivity.java:27)
    at java.lang.Class.newInstance(Native Method)
    at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
    at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:41)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1216)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6826)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

基础活动

代码语言:javascript
复制
import android.annotation.SuppressLint;
import androidx.appcompat.app.AppCompatActivity;
import com.applab.peermainactivity.utilities.LogUtils;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;

@SuppressLint("Registered")
public class BaseActivity extends AppCompatActivity {
public static final boolean DEBUG=true;
private static final Validator validator;

static {
     validator=Validation
            .byDefaultProvider()
            .configure()
            .ignoreXmlConfiguration()
            .buildValidatorFactory().getValidator();
}

public <T> Set<ConstraintViolation<T>> validate(T object,Class<?>... groups){
    Set<ConstraintViolation<T>> violations= validator.validate(object,groups);

    if (DEBUG){
        for (ConstraintViolation<T> constraintViolation:violations)
            LogUtils.log(constraintViolation);
    }
    return violations;
}

public <T> boolean isValid(T object,Class<?>... groups){
    return validate(object,groups).size()==0;
}

}

EN

回答 1

Stack Overflow用户

发布于 2020-10-13 21:03:23

有意思的。

问题很明显是Android JDK中缺少的方法,但对于内置值提取器,我们可能可以避免所有这些机制,静态地声明ValueExtractor元数据,而不是进行反射调用,从而避免在标准情况下使用此方法。

我创建了https://hibernate.atlassian.net/browse/HV-1812来跟踪这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64300623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档