import java.io.PrintStream;

public class ApplicationException extends Exception {
    private Throwable exception;

    public ApplicationException(String message, Throwable exception) {
        super(message);
        this.exception = exception;
    }

    public void printStackTrace() {
        printStackTrace(System.err);
    }

    public void printStackTrace(PrintStream out) {
        synchronized(out) {
            super.printStackTrace(out);
            if (exception != null) {
                out.print("Caused by: ");
                exception.printStackTrace(out);
            }
        }
    }
}

