diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ExceptionUtils.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ExceptionUtils.java index ae935308..0dfee18c 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ExceptionUtils.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ExceptionUtils.java @@ -164,4 +164,23 @@ public class ExceptionUtils return (StringUtils.join("; ", messages)); } + + + + /******************************************************************************* + ** Get the messages from the top & bottoms (root) of an exception. + ** + ** If there's no root, just return the top (e.g., parameter)'s message. + ** If they are both found, put ": " between them. + *******************************************************************************/ + public static String getTopAndBottomMessages(Exception e) + { + String rs = e.getMessage(); + Throwable rootException = getRootException(e); + if(rootException != e) + { + rs += ": " + rootException.getMessage(); + } + return (rs); + } } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ExceptionUtilsTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ExceptionUtilsTest.java index 4b68f28b..bf84bb16 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ExceptionUtilsTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ExceptionUtilsTest.java @@ -116,6 +116,19 @@ class ExceptionUtilsTest extends BaseTest + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testGetTopAndBottomMessages() + { + assertEquals("foo", ExceptionUtils.getTopAndBottomMessages(new Exception("foo"))); + assertEquals("foo: bar", ExceptionUtils.getTopAndBottomMessages(new Exception("foo", new Exception("bar")))); + assertEquals("foo: baz", ExceptionUtils.getTopAndBottomMessages(new Exception("foo", new Exception("bar", new Exception("baz"))))); + } + + + /******************************************************************************* ** Test exception class - lets you set the cause, easier to create a loop. *******************************************************************************/