【问题标题】:javax.validation.ValidationException: Unable to find a default provider - 10javax.validation.ValidationException:找不到默认提供程序 - 10
【发布时间】:2015-05-05 12:20:24
【问题描述】:

我在 stackoverflow 上发现了许多类似的问题,但答案对我没有帮助。我在我的 Rest api 项目中使用 JSR-303 Bean 验证来为现有的 bean 类提供验证。我已添加所有依赖项,但出现此错误。

javax.validation.ValidationException: Unable to find a default provider
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264)[272:wrap_mvn_javax.validation_validation-api_1.0.0.GA:0]
    at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)[272:wrap_mvn_javax.validation_validation-api_1.0.0.GA:0]
    at com.uk.aviva.integration.LookupUkAddress.ValidateAddress.validateRequest(ValidateAddress.java:27)[277:ukAddress:0.0.8.SNAPSHOT]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601)[:1.7.0_11]
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:407)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:278)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:251)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:166)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.processor.interceptor.HandleFaultInterceptor.process(HandleFaultInterceptor.java:41)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:91)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)[144:org.apache.camel.camel-core:2.12.0.redhat-611412]

我看到很多人面临同样的问题,但是给出的解决方案是将 hibernate-validator 4.0 或更高版本添加到类路径中。但我已经在使用 hibernate-validator 版本 5.0.1.FINAL。这是我的 pom 条目

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.0.1.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>5.0.1.Final</version>
    </dependency>

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
    </dependency>

有什么我错过的吗?

【问题讨论】:

    标签: java bean-validation hibernate-validator


    【解决方案1】:

    所以我找到了一种避免错误的方法并且它有效。为了避免它使用 hibernate-validator 依赖版本 4.2.1.FINAL 和 javax.validation 版本 1.1.0.FINAL。并将这两个添加到您的类路径中。这为我解决了错误。

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.FINAL</version>
        </dependency>
    
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator-annotation-processor</artifactId>
            <version>4.2.0.FINAL</version>
        </dependency>
    
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
    

    【讨论】:

    • 您将 Bean Validation 1.1 API jar 与基于 Bean Validation 1.0 的 Hibernate Validator 4.x jar 混合。您要么需要将 Bean Validation 1.0 与 Validator 4.x 一起使用,要么升级到 Validator 5.x 并使用 Bean Validation 1.1 API。如果你是一些依赖管理工具(maven、ivy、...),你应该能够只指定你想要使用的验证器版本,并且可以传递地添加正确的 Bean 验证版本。
    • 那么,只需添加 Hibernate Validator 5.x 版就可以解决这个问题吗?
    • 使用正确的罐子组合就可以了。带有 Bean Validation 1.0 的 Validator 4.x 和带有 Bean Validation 1.1 的 Validator 5.x。
    • 是的,我尝试使用 Validator 5.x 和 Bean Validation 1.1。而且我缺少要求 [318.0] osgi.wiring.package; (&(osgi.wiring.package=com.fasterxml.classmate)(version>=0.8.0)),这个错误。
    猜你喜欢
    • 2011-10-14
    • 2012-04-04
    • 1970-01-01
    • 2016-04-23
    • 2011-01-14
    • 1970-01-01
    • 2023-03-29
    • 2014-02-28
    • 2012-08-21
    相关资源
    最近更新 更多