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
相关产品推荐
相关产品推荐

