wso2 ei 660。使用脚本中介时的严重错误

wso2 ei 660. Critical BUG when use script mediator

我使用了资源中的代码

<resource faultSequence="fault_simple" methods="GET" protocol="https" uri-template="/all">
        <inSequence>
            <property expression="get-property('SYSTEM_TIME')" name="REQUEST_TIMESTAMP" scope="default" type="STRING"/>
            <send>
                <endpoint key="get_balancing"/>
            </send>
        </inSequence>
        <outSequence>
            <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
            <property expression="get-property('SYSTEM_TIME')" name="RESPONSE_TIMESTAMP" scope="default" type="STRING"/>
            <script language="js"><![CDATA[var requestTimeStamp = mc.getProperty("REQUEST_TIMESTAMP");  
                      var responseTimeStamp = mc.getProperty("RESPONSE_TIMESTAMP");  
                      var responseTime = (responseTimeStamp - requestTimeStamp)/1000;  
                      mc.setProperty("RESPONSE_TIME", responseTime);]]>
            </script>
            <log>
                    <property expression="$ctx:RESPONSE_TIMESTAMP" name="RESPONSE_TIMESTAMP"/>
                    <property expression="$ctx:REQUEST_TIMESTAMP" name="REQUEST_TIMESTAMP"/>
                    <property expression="$ctx:RESPONSE_TIME" name="RESPONSE_TIME"/>
            </log>
            <send/>
        </outSequence>
    </resource>

当发送端点工作时间 < 1 秒时,这也有效,但如果发送工作时间超过 8-9 秒,我就会出错

INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:613d12e7-d692-4ac7-8a20-6b798f811edb, Direction: response, RESPONSE_TIMESTAMP = 1592573342279, REQUEST_TIMESTAMP = 1592573333377
ERROR {org.apache.synapse.mediators.bsf.ScriptMediator} - The script engine returned an Exception executing the external js script : null function mediate java.lang.IllegalArgumentException: out of range index
INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:613d12e7-d692-4ac7-8a20-6b798f811edb, Direction: response, MESSAGE = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = The script engine returned an Exception executing the external js script : null function mediate

当我从代码中删除中介脚本时,服务也正常工作(发送工作超过 8-9 秒)

p.s。我试过使用 JS/Groovy/Python - 结果是一样的。

此错误是由于脚本中介试图读取大量响应(总是)造成的。

解决方法如下:

<resource faultSequence="fault_simple" methods="GET" protocol="https" uri-template="/all">
    <inSequence>
        <property expression="get-property('SYSTEM_TIME')" name="REQUEST_TIMESTAMP" scope="default" type="STRING"/>
        <send>
            <endpoint key="get_balancing"/>
        </send>
    </inSequence>
    <outSequence>
        <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
        <property expression="get-property('SYSTEM_TIME')" name="RESPONSE_TIMESTAMP" scope="default" type="STRING"/>
        <property name="RESPONSE_TIME" scope="default" expression="$ctx:RESPONSE_TIMESTAMP - $ctx:REQUEST_TIMESTAMP"/>
        <log>
                <property expression="$ctx:RESPONSE_TIMESTAMP" name="RESPONSE_TIMESTAMP"/>
                <property expression="$ctx:REQUEST_TIMESTAMP" name="REQUEST_TIMESTAMP"/>
                <property expression="$ctx:RESPONSE_TIME" name="RESPONSE_TIME"/>
        </log>
        <send/>
    </outSequence>
</resource>

改为 JS 脚本 - 这个

<property name="RESPONSE_TIME" scope="default" expression="$ctx:RESPONSE_TIMESTAMP - $ctx:REQUEST_TIMESTAMP"/>