diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/AutocommitFailedException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/AutocommitFailedException.java index 9d5f5425e..d22d98c6e 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/AutocommitFailedException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/AutocommitFailedException.java @@ -11,9 +11,4 @@ public class AutocommitFailedException extends TaskanaRuntimeException { public AutocommitFailedException(Throwable cause) { super("Autocommit failed", ErrorCode.of(ERROR_KEY), cause); } - - @Override - public String toString() { - return "AutocommitFailedException{}"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/ConcurrencyException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/ConcurrencyException.java index b0ba3df68..5fa8ae728 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/ConcurrencyException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/ConcurrencyException.java @@ -23,9 +23,4 @@ public class ConcurrencyException extends TaskanaException { public String getEntityId() { return entityId; } - - @Override - public String toString() { - return "ConcurrencyException{}"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/ConnectionNotSetException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/ConnectionNotSetException.java index 73b57f79c..4c6549ee8 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/ConnectionNotSetException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/ConnectionNotSetException.java @@ -12,9 +12,4 @@ public class ConnectionNotSetException extends TaskanaRuntimeException { public ConnectionNotSetException() { super("Connection not set", ErrorCode.of(ERROR_KEY)); } - - @Override - public String toString() { - return "ConnectionNotSetException{}"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/DomainNotFoundException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/DomainNotFoundException.java index 78e136a1f..ae2ecf307 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/DomainNotFoundException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/DomainNotFoundException.java @@ -18,9 +18,4 @@ public class DomainNotFoundException extends NotFoundException { public String getDomain() { return domain; } - - @Override - public String toString() { - return "DomainNotFoundException [domain=" + domain + "]"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/InvalidArgumentException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/InvalidArgumentException.java index f85203818..05ac3d49b 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/InvalidArgumentException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/InvalidArgumentException.java @@ -12,9 +12,4 @@ public class InvalidArgumentException extends TaskanaException { public InvalidArgumentException(String msg, Throwable cause) { super(msg, ErrorCode.of(ERROR_KEY), cause); } - - @Override - public String toString() { - return "InvalidArgumentException{}"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/MismatchedRoleException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/MismatchedRoleException.java index 745fd4064..0bdaefa88 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/MismatchedRoleException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/MismatchedRoleException.java @@ -33,13 +33,4 @@ public class MismatchedRoleException extends NotAuthorizedException { public String getCurrentUserId() { return currentUserId; } - - @Override - public String toString() { - return "MismatchedRoleException [currentUserId=" - + currentUserId - + ", roles=" - + Arrays.toString(roles) - + "]"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/NotAuthorizedException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/NotAuthorizedException.java index d12ac6bd6..bbe76ba49 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/NotAuthorizedException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/NotAuthorizedException.java @@ -6,9 +6,4 @@ public class NotAuthorizedException extends TaskanaException { protected NotAuthorizedException(String msg, ErrorCode errorCode) { super(msg, errorCode); } - - @Override - public String toString() { - return "NotAuthorizedException{}"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/NotFoundException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/NotFoundException.java index 8d8a70a64..766ef1e33 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/NotFoundException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/NotFoundException.java @@ -6,9 +6,4 @@ public class NotFoundException extends TaskanaException { protected NotFoundException(String message, ErrorCode errorCode) { super(message, errorCode); } - - @Override - public String toString() { - return "NotFoundException{}"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/SystemException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/SystemException.java index 834d38068..76e1f60f8 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/SystemException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/SystemException.java @@ -13,8 +13,4 @@ public class SystemException extends TaskanaRuntimeException { super(msg, ErrorCode.of(ERROR_KEY), cause); } - @Override - public String toString() { - return "SystemException{}"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/TaskanaException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/TaskanaException.java index 71c419510..75bd71b82 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/TaskanaException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/TaskanaException.java @@ -20,6 +20,6 @@ public class TaskanaException extends Exception { @Override public String toString() { - return "TaskanaException [errorCode=" + errorCode + "]"; + return "TaskanaException [errorCode=" + errorCode + ", message=" + getMessage() + "]"; } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/TaskanaRuntimeException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/TaskanaRuntimeException.java index 0bbf23ba8..7bb8de132 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/TaskanaRuntimeException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/TaskanaRuntimeException.java @@ -20,6 +20,6 @@ public class TaskanaRuntimeException extends RuntimeException { @Override public String toString() { - return "TaskanaRuntimeException [errorCode=" + errorCode + "]"; + return "TaskanaRuntimeException [errorCode=" + errorCode + ", message=" + getMessage() + "]"; } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/UnsupportedDatabaseException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/UnsupportedDatabaseException.java index 2037aacfc..e16c42422 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/UnsupportedDatabaseException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/UnsupportedDatabaseException.java @@ -20,9 +20,4 @@ public class UnsupportedDatabaseException extends TaskanaRuntimeException { public String getDatabaseProductName() { return databaseProductName; } - - @Override - public String toString() { - return "UnsupportedDatabaseException [databaseProductName=" + databaseProductName + "]"; - } } diff --git a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/WrongCustomHolidayFormatException.java b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/WrongCustomHolidayFormatException.java index c2fd65289..fc708b27f 100644 --- a/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/WrongCustomHolidayFormatException.java +++ b/common/taskana-common/src/main/java/pro/taskana/common/api/exceptions/WrongCustomHolidayFormatException.java @@ -22,9 +22,4 @@ public class WrongCustomHolidayFormatException extends TaskanaException { public String getCustomHoliday() { return customHoliday; } - - @Override - public String toString() { - return "WrongCustomHolidayFormatException [customHoliday=" + customHoliday + "]"; - } } diff --git a/lib/taskana-core/src/test/java/acceptance/ArchitectureTest.java b/lib/taskana-core/src/test/java/acceptance/ArchitectureTest.java index 510b89819..0c55da7ac 100644 --- a/lib/taskana-core/src/test/java/acceptance/ArchitectureTest.java +++ b/lib/taskana-core/src/test/java/acceptance/ArchitectureTest.java @@ -20,6 +20,7 @@ import com.tngtech.archunit.lang.ArchCondition; import com.tngtech.archunit.lang.ArchRule; import com.tngtech.archunit.lang.ConditionEvents; import com.tngtech.archunit.lang.SimpleConditionEvent; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -153,6 +154,34 @@ class ArchitectureTest { myRule.check(importedClasses); } + @Test + void exceptionsThatShouldNotHaveToStringMethod() { + ArchRule myRule = + classes() + .that() + .areAssignableTo(TaskanaException.class) + .or() + .areAssignableTo(TaskanaRuntimeException.class) + .and() + .doNotBelongToAnyOf(TaskanaRuntimeException.class, TaskanaException.class) + .should(notImplementToString()); + + myRule.check(importedClasses); + } + + @Test + void exceptionsThatShouldHaveToStringMethod() { + ArchRule myRule = + classes() + .that() + .areAssignableFrom(TaskanaRuntimeException.class) + .or() + .areAssignableFrom(TaskanaException.class) + .should(implementToString()); + + myRule.check(importedClasses); + } + @Test void onlyExceptionsShouldResideInExceptionPackage() { ArchRule myRule = @@ -320,6 +349,43 @@ class ArchitectureTest { rule.check(importedClasses); } + private ArchCondition implementToString() { + return new ArchCondition("implement toString()") { + @Override + public void check(JavaClass javaClass, ConditionEvents conditionEvents) { + boolean implementToString = + Arrays.stream(javaClass.reflect().getDeclaredMethods()) + .map(Method::getName) + .anyMatch("toString"::equals); + if (!implementToString) { + conditionEvents.add( + SimpleConditionEvent.violated( + javaClass, + String.format( + "Class '%s' does not implement toString()", javaClass.getFullName()))); + } + } + }; + } + + private ArchCondition notImplementToString() { + return new ArchCondition("not implement toString()") { + @Override + public void check(JavaClass javaClass, ConditionEvents conditionEvents) { + boolean implementToString = + Arrays.stream(javaClass.reflect().getDeclaredMethods()) + .map(Method::getName) + .anyMatch("toString"::equals); + if (implementToString) { + conditionEvents.add( + SimpleConditionEvent.violated( + javaClass, + String.format("Class '%s' does implement toString()", javaClass.getFullName()))); + } + } + }; + } + private ArchCondition beAnnotatedWithTestInstancePerClass() { return new ArchCondition("be annotated with @TestInstance(Lifecycle.PER_CLASS)") { @Override