in src/main/java/feign/error/ExceptionGenerator.java [187:219]
private Constructor<? extends Exception> getConstructor(Class<? extends Exception> exceptionClass) {
Constructor<? extends Exception> preferredConstructor = null;
for (Constructor<?> constructor : exceptionClass.getConstructors()) {
FeignExceptionConstructor exceptionConstructor =
constructor.getAnnotation(FeignExceptionConstructor.class);
if (exceptionConstructor == null) {
continue;
}
Class<?>[] parameterTypes = constructor.getParameterTypes();
if (parameterTypes.length == 0) {
continue;
}
if (preferredConstructor == null) {
preferredConstructor = (Constructor<? extends Exception>) constructor;
} else {
throw new IllegalStateException(
"Too many constructors marked with @FeignExceptionConstructor");
}
}
if (preferredConstructor == null) {
try {
return exceptionClass.getConstructor();
} catch (NoSuchMethodException e) {
throw new IllegalStateException(
"Cannot find any suitable constructor in class [" + exceptionClass.getName()
+ "] - did you forget to mark one with @FeignExceptionConstructor or at least have a public default constructor?",
e);
}
}
return preferredConstructor;
}