/** * Get the best localized message from a Throwable that may contain other Throwables as a cause. * * @param throwable a Throwable that may contain other Throwables as a cause. * @return best localized message, unwrapping as necessary. */ public static String getMessage(final Throwable throwable) { if (throwable.getCause() == null) { final String localizedMessage = throwable.getLocalizedMessage(); if (localizedMessage != null) { return localizedMessage; } final String message = throwable.getMessage(); if (message != null) { return message; } return throwable.toString(); } final String causeToString = throwable.getCause().toString(); final String localized = throwable.getLocalizedMessage(); if (localized == null || localized.equals(causeToString)) { return getMessage(throwable.getCause()); } return localized; }
assert "ioe".equals(Localize.getMessage(ioException)); assert "ioe".equals(Localize.getMessage(e)); assert better.equals(Localize.getMessage(e)): Localize.getMessage(e); assert "ioe".equals(Localize.getMessage(e)); assert "foo".equals(Localize.getMessage(e)); assert "foo".equals(Localize.getMessage(e)); assert "java.lang.IllegalArgumentException".equals(Localize.getMessage(e)) :Localize.getMessage(e); assert "java.lang.IllegalArgumentException".equals(Localize.getMessage(e)) :Localize.getMessage(e);