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

Jetty 12中org.eclipse.jetty.util.MultiException缺失的迁移方案咨询

Jetty 12.x 迁移 MultiException 代码方案

Jetty 12.x 对核心API进行了重构,org.eclipse.jetty.util.MultiException类已被移除,可通过以下两种标准方式替代:

方案一:使用Java标准异常抑制机制(推荐)

Java 7及以上版本的Throwable类提供了addSuppressed()方法,可将多个异常附加到主异常中,打印堆栈时会一并输出所有抑制的异常,完全满足原代码的异常聚合需求。

修改后的代码示例:

RuntimeException rethrownException = originalException;
// 创建主异常作为容器(或复用原有异常)
Exception mainException = new Exception("Multiple exceptions occurred");
// 添加异常到抑制列表(注意修正原代码拼写错误:exeption → exception)
mainException.addSuppressed(exception);
mainException.addSuppressed(e);
rethrownException = mainException;

如果需要直接复用originalException而非新建异常:

// 直接在原有异常上添加抑制异常
rethrownException.addSuppressed(exception);
rethrownException.addSuppressed(e);

方案二:自定义多异常容器类(适用于需主动遍历异常的场景)

如果你的业务逻辑需要主动遍历所有聚合的异常进行处理,可以自定义一个简单的多异常容器类,模拟原MultiException的行为:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.io.PrintStream;

public class MultiException extends RuntimeException {
    private final List<Throwable> exceptions = new ArrayList<>();

    public void add(Throwable t) {
        exceptions.add(t);
    }

    public List<Throwable> getExceptions() {
        return Collections.unmodifiableList(exceptions);
    }

    @Override
    public void printStackTrace(PrintStream s) {
        super.printStackTrace(s);
        exceptions.forEach(t -> {
            s.println("Suppressed exception:");
            t.printStackTrace(s);
        });
    }
}

使用方式与原代码一致:

RuntimeException rethrownException = originalException;
MultiException multiException = new MultiException();
multiException.add(exception);
multiException.add(e);
rethrownException = multiException;

注意:原代码中存在变量名拼写错误exeption,建议修正为exception避免编译问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:06:06