Websphere Liberty with Spring 从 4.2.1 升级到 Spring 5.3.29 问题 原因:java.lang.NoSuchMethodError: javax/validation/Configuration

问题描述 投票:0回答:1

这是我的第一篇文章,如果我错过任何描述该问题的内容,我深表歉意。

我正在将应用程序从 Spring 4.2.1.Final(Hibernate 4.2.18.Final) 升级到 Spring 5.3.29(Hibernate 5.2.15.Final)。该项目使用 Spring MVC、Java 8(当前),前端和后端解耦,我有两台 IBM Liberty 服务器各一台。我在运行服务器时遇到这个问题。

引起:java.lang.NoSuchMethodError:javax/validation/Configuration.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider

  1. 我使用 jakarta 验证 jar 和 hibernate 而不是 javax.validation 1.0.0.GA,仍然面临相同的错误

        <dependency>
         <groupId>jakarta.validation</groupId>
         <artifactId>jakarta.validation-api</artifactId>
         <version>3.0.2</version>
        </dependency>
        <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-validator</artifactId>
         <version>4.3.1.Final</version>
        </dependency>
    
  2. 我根据 stackoverflow 和其他在线建议尝试了一些其他 jar,但仍然面临同样的错误。

  3. 我关注了这篇文章 Websphere 8.5 与 Spring-5 并将依赖项升级到 pom.xml 中的以下

            <dependency>
             <groupId>javax.validation</groupId>
             <artifactId>validation-api</artifactId>
             <version>1.1.0.Final</version>
             <type>jar</type>
             <scope>compile</scope>
           </dependency>
           <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-validator</artifactId>
             <version>5.1.3.Final</version>
           </dependency>
    

我无法在 IBM Liberty 中找到部署.xml 或类似文件以按照上述建议进行编辑。如果我使用上面的内容,我会收到以下错误

org.springframework.beans.factory.BeanCreationException:创建 ServletContext 资源 [/WEB-INF/project-portlet-beans.xml] 中定义的名为“refDataLoader”的 bean 时出错:调用 init 方法失败;嵌套异常是 com.thoughtworks.xstream.io.StreamException: 2024-02-05T13:28:25,309 DEBUG (LargeThreadPool-thread-49) [EhCacheManagerFactoryBean(关闭 EhCache CacheManager:)] 关闭 EhCache CacheManager

有谁知道上面第 3 步要在 Liberty 文件夹中编辑哪个文件,或者我可以做什么来修复 javax/validation 错误。预先感谢,非常感谢任何帮助。

hibernate websphere spring5
1个回答
0
投票

您正在尝试使用 Jakarta EE 9 版本的验证,而 Spring Framework 5 需要 Jakarta EE 8 版本。您的 api 依赖项应该是:

<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>2.0.2</version>
</dependency>

我认为您还需要将 Jakarta EE 8 版本的 Hibernate Validator 依赖项增加到 6.2。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.3.1.Final</version>
</dependency>
© www.soinside.com 2019 - 2024. All rights reserved.