Consider Foo caused by Bar caused by Baz.
If Bar is categorized TRUE and Baz categorized FALSE, classiy() should
return TRUE (hit on Bar), but it returned FALSE.
The early exit from the cause traversal was not taken because we
were always testing against the top level throwable (Bar).
Add a test to verify this scenario; test against the cause on
each iteration through the loop.
With Spring AMQP, the exception thrown to the
RetryTemplate is a ListenerExecutionFailedException
with the business exception in the cause. This means
Exception categorization does not work.
Provide a retry policy/classifier that can examine
exception causes until a match is found.
If so configured, the retry policy should categorize
exceptions by traversing the cause if the current
exception is not itself categorized.