in aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/EventHandlerLoader.java [266:311]
private static LambdaRequestHandler wrapRequestHandlerClass(final Class<? extends RequestHandler> clazz) {
Type[] ptypes = findInterfaceParameters(clazz, RequestHandler.class);
if (ptypes == null) {
return new UserFaultHandler(makeUserFault("Class "
+ clazz.getName()
+ " does not implement RequestHandler with concrete type parameters"));
}
if (ptypes.length != 2) {
return new UserFaultHandler(makeUserFault(
"Invalid class signature for RequestHandler. Expected two generic types, got " + ptypes.length));
}
for (Type t : ptypes) {
if (t instanceof TypeVariable) {
Type[] bounds = ((TypeVariable) t).getBounds();
boolean foundBound = false;
if (bounds != null) {
for (Type bound : bounds) {
if (!Object.class.equals(bound)) {
foundBound = true;
break;
}
}
}
if (!foundBound) {
return new UserFaultHandler(makeUserFault("Class " + clazz.getName()
+ " does not implement RequestHandler with concrete type parameters: parameter "
+ t + " has no upper bound."));
}
}
}
final Type pType = ptypes[0];
final Type rType = ptypes[1];
final Constructor<? extends RequestHandler> constructor;
try {
constructor = getConstructor(clazz);
return wrapPojoHandler(newInstance(constructor), pType, rType);
} catch (UserFault f) {
return new UserFaultHandler(f);
} catch (Throwable e) {
return new UserFaultHandler(makeUserFault(e));
}
}