package com.ctc.wstx.util;
import java.io.IOException;
public final class ExceptionUtil
{
private ExceptionUtil() { }
Method that can be used to convert any Throwable to a RuntimeException;
conversion is only done for checked exceptions.
/**
* Method that can be used to convert any Throwable to a RuntimeException;
* conversion is only done for checked exceptions.
*/
public static void throwRuntimeException(Throwable t)
{
// Unchecked? Can re-throw as is
throwIfUnchecked(t);
// Otherwise, let's just change its type:
throw new RuntimeException("[was "+t.getClass()+"] "+t.getMessage(), t);
}
public static IOException constructIOException(String msg, Throwable src)
{
/* Stupid IOException constructors... only 1.6 has
* what we need. Hence must set root cause explicitly
* as we have to support JDK 1.5.
*/
IOException e = new IOException(msg);
setInitCause(e, src);
return e;
}
public static void throwAsIllegalArgument(Throwable t)
{
// Unchecked? Can re-throw as is
throwIfUnchecked(t);
// Otherwise, let's just change its type:
IllegalArgumentException rex = new IllegalArgumentException("[was "+t.getClass()+"] "+t.getMessage());
// And indicate the root cause
setInitCause(rex, t);
throw rex;
}
public static void throwIfUnchecked(Throwable t)
{
// If it's not checked, let's throw it as is
if (t instanceof RuntimeException) {
throw (RuntimeException) t;
}
if (t instanceof Error) {
throw (Error) t;
}
}
This method is just added for convenience, and only to be used for
assertion style of exceptions. For errors that actually occur, method
with the string arg should be called instead.
/**
* This method is just added for convenience, and only to be used for
* assertion style of exceptions. For errors that actually occur, method
* with the string arg should be called instead.
*/
public static void throwGenericInternal()
{
throwInternal(null);
}
public static void throwInternal(String msg)
{
if (msg == null) {
msg = "[no description]";
}
throw new RuntimeException("Internal error: "+msg);
}
public static void setInitCause(Throwable newT, Throwable rootT)
{
/* [WSTX-110]: Better make sure we do not already have
* a chained exception...
*/
if (newT.getCause() == null) {
newT.initCause(rootT);
}
}
}