private static Throwable createException(Class<? extends Throwable> c, Throwable exceptionSource, String message) {
		try {
			return c.getConstructor(String.class, Throwable.class).newInstance(message, exceptionSource);
		} catch (NoSuchMethodException e) {
			logger.error("The implementation class of substituteBy must have getConstructor(String.class, Throwable.class).", e);
			try {
				return c.getConstructor(Throwable.class).newInstance(exceptionSource);
			} catch (Exception e1) {
				logger.error("The implementation class of substituteBy must have getConstructor(Throwable.class).", e1);
				return exceptionSource;
			}
		} catch (Throwable e) {
			logger.error("Oops! Something happen.", e);
			return exceptionSource;
		}
	}