Search code examples
jettyjetty-12

Missing class org.eclipse.jetty.util.MultiException in Jetty 12


I have this Java code working in Jetty version:

implementation 'org.eclipse.jetty:jetty-util:11.0.20'

Code:

import org.eclipse.jetty.util.MultiException;

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

But when I update the Jetty version to 12.x.x Java class org.eclipse.jetty.util.MultiException is missing.

Do you know what is the proper way to migrate the code for Jetty 12?


Solution

  • Now that we are using a more modern version of Java, use suppressed exception.

    RuntimeException runtimeEx = new RuntimeException(originalException);
    runtimeEx.addSuppressed(exception);
    runtimeEx.addSuppressed(e);
    throw runtimeEx;
    

    But this can lead to circular references, which some libraries (like logging libraries) really do not like.

    So there's a org.eclipse.jetty.util.ExceptionUtil.addSuppressedIfNotAssociated(Throwable, Throwable) to help with that.

    The above changes to ...

    import org.eclipse.jetty.util.ExceptionUtil;
    
    RuntimeException runtimeEx = new RuntimeException(originalException);
    ExceptionUtil.addSuppressedIfNotAssociated(runtimeEx, exception);
    ExceptionUtil.addSuppressedIfNotAssociated(runtimeEx, e);
    throw runtimeEx;
    

    The ExceptionUtil.addSuppressedIfNotAssociated will not add the suppressed if it would cause a circular reference. (no point anyway, as the information is already present in the stacktrace)