I have a Lambda function written in Java, which I would like to invoke from NodeJS. Is this possible? I get the following error:
An error occurred during JSON parsing: java.lang.RuntimeException
java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: java.io.UncheckedIOException: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: lambdainternal.util.NativeMemoryAsInputStream@5dc0ff7d; line: 1, column: 1]
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: lambdainternal.util.NativeMemoryAsInputStream@5dc0ff7d; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:857)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:62)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1511)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1102)
Here's the code for my Lambda:
public String handleRequest(String input, Context context) {
context.getLogger().log("input: " + input + "\n");
JSONObject obj = new JSONObject(input);
String dest_key = obj.getString("key");
context.getLogger().log("key: " + dest_key + "\n");
...
}
And here's my JavaScript invoking the above Lambda:
const AWS = require('aws-sdk');
const payload = "{\"key\": \"slide.pptx\"}"
AWS.config.loadFromPath('./config.json');
const lambda = new AWS.Lambda({ region: "ap-south-1" });
const params = {
FunctionName : 'slide-builder',
InvocationType : 'RequestResponse',
Payload: payload // I get the same error even without a payload
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(JSON.stringify(data));
});