wso2 / micro-integrator

The cloud-native configuration driven runtime that helps developers implement composite microservices.
https://wso2.com/integration/
Apache License 2.0
196 stars 208 forks source link

[Amazon Lambda Connector] Getting ArrayIndexOutOfBoundsException while invoking a Lambda function #1193

Open KasunAratthanage opened 4 years ago

KasunAratthanage commented 4 years ago

Description: While invoking a Lambda function using Amazon Lambda Connector getting ArrayIndexOutOfBoundsException.

Suggested Labels: Amazon Lambda Connector

Affected Product Version: wso2mi-1.1.0

OS, DB, other environment details and versions:
Ubuntu

Steps to reproduce:

  1. Create a Lambda function. (Example function : addingNumbers.py)
import json

print('Loading function')

def addingNumbers(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    value1 = event['key1']
    value2 = event['key2']
    print("value1 = " + value1)
    print("value2 = " + value2)
    value3 = float(value1) + float(value2)
    return {"value3 is" : value3} # Echo back the addition of two keys
  1. Invoke the created function using following proxy service.
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="invokeLambdaFunction" startOnLoad="true" transports="http https" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <property expression="json-eval($.secretAccessKey)" name="secretAccessKey" scope="default" type="STRING"/>
            <property expression="json-eval($.accessKeyId)" name="accessKeyId" scope="default" type="STRING"/>
            <property expression="json-eval($.region)" name="region" scope="default" type="STRING"/>
            <property expression="json-eval($.blocking)" name="blocking" scope="default" type="STRING"/>
            <property expression="json-eval($.functionName)" name="functionName" scope="default" type="STRING"/>
            <property expression="json-eval($.apiVersionInvoke)" name="apiVersionInvoke" scope="default" type="STRING"/>
            <property expression="json-eval($.qualifier)" name="qualifier" scope="default" type="STRING"/>
            <property expression="json-eval($.x-amz-invocation-type)" name="x-amz-invocation-type" scope="default" type="STRING"/>
            <property expression="json-eval($.x-amz-log-type)" name="x-amz-log-type" scope="default" type="STRING"/>
            <property expression="json-eval($.x-amz-client-context)" name="x-amz-client-context" scope="default" type="STRING"/>
            <property expression="json-eval($.payload)" name="payload" scope="default" type="STRING"/>
            <amazonlambda.init>
                <region>{$ctx:region}</region>
                <accessKeyId>{$ctx:accessKeyId}</accessKeyId>
                <secretAccessKey>{$ctx:secretAccessKey}</secretAccessKey>
                <blocking>{$ctx:blocking}</blocking>
            </amazonlambda.init>
            <amazonlambda.invoke>
                <functionName>{$ctx:functionName}</functionName>
                <apiVersionInvoke>{$ctx:apiVersionInvoke}</apiVersionInvoke>
                <qualifier>{$ctx:qualifier}</qualifier>
                <x-amz-invocation-type>{$ctx:x-amz-invocation-type}</x-amz-invocation-type>
                <x-amz-log-type>{$ctx:x-amz-log-type}</x-amz-log-type>
                <x-amz-client-context>{$ctx:x-amz-client-context}</x-amz-client-context>
                <payload>{$ctx:payload}</payload>
            </amazonlambda.invoke>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
</proxy>

Request

{ "secretAccessKey":"xxxx", "accessKeyId":"xxxx", "region":"us-east-2", "blocking":"false", "functionName":"eiLambdaConnector", "apiVersionInvoke":"2015-03-31", "payload":{"key1":"10","key2":"15"} }

Expected output :

Response: { "Sum of two numbers ": 25 }

Actual output :

[2020-03-02 12:04:07,425]  INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: /services/invokeLambdaFunction?wsdl, MessageID: urn:uuid:f08f71d7-fc29-4262-a203-2e511a94e14e, Direction: request, payload = as
[2020-03-02 12:04:07,429] ERROR {org.apache.synapse.mediators.transform.PayloadFactoryMediator} - #replace. Mis-match detected between number of formatters and arguments java.lang.ArrayIndexOutOfBoundsException: 0
    at org.apache.synapse.mediators.transform.PayloadFactoryMediator.replace(PayloadFactoryMediator.java:292)
    at org.apache.synapse.mediators.transform.PayloadFactoryMediator.regexTransform(PayloadFactoryMediator.java:225)
    at org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(PayloadFactoryMediator.java:167)
    at org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(PayloadFactoryMediator.java:117)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
    at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37)
    at org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:203)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
    at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:133)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:148)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:84)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:224)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:367)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:412)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:181)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
saradhakmk commented 10 months ago

Hi,any solutions for this?Am facing the same error