shouldn't this be:

else if (mostSpecificSupportsInSecondHandler.isAssignableFrom(mostSpecificSupportsInFirstHandler))

Because they supported classes won't always be sub and super class to each other, here you are assuming it is e.g Patient and Person but it could be Patient and Encounter, i think you should still throw the exception as before if none of the classes is a subclass of the other and the order is the same