package org.cryptocoinpartners.service; import org.apache.commons.beanutils.PropertyUtils; public class PortfolioServiceException extends RuntimeException { public PortfolioServiceException() { // Documented empty block } public PortfolioServiceException(Throwable throwable) { super(findRootCause(throwable)); } public PortfolioServiceException(String message) { super(message); } public PortfolioServiceException(String message, Throwable throwable) { super(message, findRootCause(throwable)); } private static Throwable findRootCause(Throwable th) { if (th != null) { // Reflectively get any exception causes. try { Throwable targetException = null; // java.lang.reflect.InvocationTargetException String exceptionProperty = "targetException"; if (PropertyUtils.isReadable(th, exceptionProperty)) { targetException = (Throwable) PropertyUtils.getProperty(th, exceptionProperty); } else { exceptionProperty = "causedByException"; //javax.ejb.EJBException if (PropertyUtils.isReadable(th, exceptionProperty)) { targetException = (Throwable) PropertyUtils.getProperty(th, exceptionProperty); } } if (targetException != null) { th = targetException; } } catch (Exception ex) { // just print the exception and continue ex.printStackTrace(); } if (th.getCause() != null) { th = th.getCause(); th = findRootCause(th); } } return th; } private Object[] messageArguments; public Object[] getMessageArguments() { return this.messageArguments; } public void setMessageArguments(Object[] messageArgumentsIn) { this.messageArguments = messageArgumentsIn; } }