GH-1077 Update AWSLambdaUtils.java with null check

Resolves #1077 by checking for a null package, which can happen when the inputType is a Message that encloses a primitive generic type

Update AWSTypesMessageConverter.java

Added additional fixes for #1077 in AWTypesMessageConverter

Update FunctionInvokerTests.java

Added unit tests to verify fix for #1077

Checkstyle fix

Resolves #1078
This commit is contained in:
Rob Cash
2023-10-04 19:20:19 -04:00
committed by Oleg Zhurakousky
parent f33b4e4919
commit 1f188e8e36
3 changed files with 33 additions and 3 deletions

View File

@@ -74,7 +74,9 @@ public final class AWSLambdaUtils {
if (FunctionTypeUtils.isMessage(inputType) || FunctionTypeUtils.isPublisher(inputType)) {
inputType = FunctionTypeUtils.getImmediateGenericType(inputType, 0);
}
return FunctionTypeUtils.getRawType(inputType).getPackage().getName().startsWith("com.amazonaws.services.lambda.runtime.events");
return FunctionTypeUtils.getRawType(inputType).getPackage() != null &&
FunctionTypeUtils.getRawType(inputType).getPackage().getName().startsWith(
"com.amazonaws.services.lambda.runtime.events");
}
@SuppressWarnings("rawtypes")

View File

@@ -63,7 +63,8 @@ class AWSTypesMessageConverter extends JsonMessageConverter {
return ((boolean) message.getHeaders().get(AWSLambdaUtils.AWS_EVENT));
}
//TODO Do we really need the ^^ above? It seems like the line below dows the trick
else if (targetClass.getPackage().getName().startsWith("com.amazonaws.services.lambda.runtime.events")) {
else if (targetClass.getPackage() != null &&
targetClass.getPackage().getName().startsWith("com.amazonaws.services.lambda.runtime.events")) {
return true;
}
return false;
@@ -75,7 +76,8 @@ class AWSTypesMessageConverter extends JsonMessageConverter {
return message.getPayload();
}
if (targetClass.getPackage().getName().startsWith("com.amazonaws.services.lambda.runtime.events")) {
if (targetClass.getPackage() != null &&
targetClass.getPackage().getName().startsWith("com.amazonaws.services.lambda.runtime.events")) {
PojoSerializer<?> serializer = LambdaEventSerializers.serializerFor(targetClass, Thread.currentThread().getContextClassLoader());
Object event = serializer.fromJson(new ByteArrayInputStream((byte[]) message.getPayload()));
return event;