public Optional invokeByName()

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();
        }
    }