in foundation/CDDBaselineJava/src/main/java/com/awslabs/aws/iot/greengrass/cdd/communication/GreengrassCommunication.java [48:78]
public Optional<byte[]> invokeByName(String functionName, Optional<Map> customContext, byte[] binaryData) {
Optional<String> functionArn = environmentProvider.getLocalLambdaArn(functionName);
if (!functionArn.isPresent()) {
log.error("Attempted to invoke Lambda by name [" + functionName + "] but its ARN is not in the environment");
return Optional.empty();
}
String encodedClientContext = ENCODED_EMPTY_CUSTOM_CONTEXT;
if (customContext.isPresent()) {
encodedClientContext = Base64.getEncoder().encodeToString(jsonHelper.toJson(customContext.get()).getBytes());
}
final InvokeRequest invokeRequest = new InvokeRequest()
.withFunctionArn(functionArn.get())
.withInvocationType(InvocationType.RequestResponse)
.withClientContext(encodedClientContext)
.withPayload(ByteBuffer.wrap(binaryData));
try {
final InvokeResponse response;
response = lambdaClientInterface.invoke(invokeRequest);
final byte[] bytes = response.getPayload().array();
return Optional.ofNullable(bytes);
} catch (GGLambdaException e) {
log.error("Lambda invoke failed [" + e.getMessage() + "]");
return Optional.empty();
}
}