You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK8迁移至JDK17时Java Web服务出现NoSuchMethodError问题求助

JDK8→JDK17迁移问题解决思路

一、报错根源分析

你遇到的NoSuchMethodError是典型的javax与jakarta API冲突:

  • 项目已完成javax→jakarta的转换,当前使用jakarta.mail.internet.MimeBodyPart,其setDataHandler方法参数为jakarta.activation.DataHandler。
  • soapui 5.4.0仍依赖旧版javax API,调用时传入的是javax.activation.DataHandler,导致方法签名不匹配,触发报错。

二、soapui相关问题解决

1. 升级soapui到5.7.1(推荐方案)

soapui从5.7版本开始全面适配jakarta API,彻底解决依赖冲突问题。由于Maven中央仓库未收录5.7.1,可通过以下方式获取:

  • 本地构建安装:
    1. 克隆soapui的GitHub仓库,切换到5.7.1分支。
    2. 执行Maven命令:mvn clean install -DskipTests,将构建好的包安装到本地Maven仓库。
    3. 项目pom.xml中替换soapui依赖版本为5.7.1即可。
  • 使用GitHub Packages:如果仓库作者已上传到GitHub Packages,可在pom.xml中添加GitHub仓库镜像地址,直接引入依赖。

2. 临时兼容方案(无法升级时)

通过Maven依赖排除+替换,强制soapui使用jakarta版本的邮件API:

<dependency>
    <groupId>com.smartbear.soapui</groupId>
    <artifactId>soapui</artifactId>
    <version>5.4.0</version>
    <exclusions>
        <!-- 排除soapui自带的javax依赖 -->
        <exclusion>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 引入jakarta版本的邮件和activation API -->
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>
<dependency>
    <groupId>jakarta.activation</groupId>
    <artifactId>jakarta.activation-api</artifactId>
    <version>2.0.1</version>
</dependency>

⚠️ 注意:该方案可能存在兼容性风险,soapui内部若依赖javax API的特定实现,可能出现其他异常,仅作为临时过渡使用。

三、Tomcat迁移工具使用说明

Tomcat迁移工具(Tomcat 10+自带)主要用于协助将基于javax API的Web应用迁移到Jakarta EE规范,核心功能及使用步骤如下:

  • 核心功能:
    • 自动扫描项目代码,将javax.包路径替换为jakarta.。
    • 替换web.xml、faces-config.xml等配置文件的命名空间(如http://xmlns.jcp.org/xml/ns/javaee→https://jakarta.ee/xml/ns/jakartaee)。
    • 生成迁移报告,标记无法自动处理的API调用或第三方依赖问题。
  • 使用步骤:
    1. 下载并安装Tomcat 10或更高版本,工具位于bin/migrate.bat(Windows)或bin/migrate.sh(Linux)。
    2. 执行命令:
      # Linux/macOS
      ./migrate.sh -source /path/to/your/old/project -destination /path/to/new/migrated/project
      # Windows
      migrate.bat -source C:\path\to\old\project -destination C:\path\to\new\migrated\project
      
    3. 查看生成的迁移报告,手动处理报告中标记的第三方依赖(如soapui这类未适配jakarta的包)。

内容的提问来源于stack exchange,提问作者hset

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:50:29