Script Mediator Javascript 在 WSO2 EI ESB 上无法正常工作

Script Mediator Javascript does not work properly on WSO2 EI ESB

下午好,我是 WSO2 ESB 的新手,我正在使用一个 api,其中我们使用一个带有 javascript 的中介脚本,但是我发现该脚本不起作用正确地,基本上是获取值并对其进行一些转换的脚本,但是,在日志级别,我看到该变量仅指示 True 值,就好像它是布尔值

我的API如下:

 <filter xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" source="get-property('axis2', 'HTTP_SC')" regex="200">
    <then>
       <property xmlns:ns3="http://www.ericsson.com/OCS/OCS_Provision_types/v1" name="balance" expression="$body/ns3:queryTotalBalanceResponse/ns3:balance/text()"/>
       <property xmlns:ns3="http://www.ericsson.com/OCS/OCS_Provision_types/v1" name="negativeBalance" expression="$body/ns3:queryTotalBalanceResponse/ns3:negativeBalance/text()"/>
       <property xmlns:ns3="http://www.ericsson.com/OCS/OCS_Provision_types/v1" name="exponentBalance" expression="$body/ns3:queryTotalBalanceResponse/ns3:balance/@exponent"/>
       <property xmlns:ns3="http://www.ericsson.com/OCS/OCS_Provision_types/v1" name="exponentNegativeBalance" expression="$body/ns3:queryTotalBalanceResponse/ns3:negativeBalance/@exponent"/>
       <property name="balanceLength" expression="fn:string-length(get-property('balance'))"/>
       <property name="negativeBalanceLength" expression="fn:string-length(get-property('negativeBalance'))"/>
       <script language="js">var exponent = mc.getProperty('exponentBalance');                  var balance = mc.getProperty('balance');                  if(exponent > 0) {         var itera = exponent * -1;                    var zero = '0';          for (i = 0; i &lt; itera; ++i) {           zero = zero.concat('0');    }             var result = balance.concat(zero);                   }   mc.setProperty("RESULT", String(result));</script>
       <filter xpath="fn:number(get-property('exponentBalance')) > 0">
          <then>
             <property name="beforeBalance" expression="fn:concat($ctx:balance,'0000000000000000000')"/>
             <property name="balanceResponse" expression="fn:substring($ctx:beforeBalance,1,$ctx:balanceLength+$ctx:exponentBalance)"/>
          </then>
          <else>
             <filter xpath="fn:number(get-property('exponentBalance')) = 0">
                <then>
                   <property name="balanceResponse" expression="$ctx:balance"/>
                </then>
                <else>
                   <filter xpath="fn:number(get-property('balance')) = 0">
                      <then>
                         <property name="beforeBalance" expression="fn:substring($ctx:balance,1,$ctx:balanceLength+$ctx:exponentBalance)"/>
                         <property name="stringToInsertbalance" value="."/>
                         <property name="afterBalance" expression="fn:substring($ctx:balance,$ctx:balanceLength+$ctx:exponentBalance+1)"/>
                         <property name="balanceResponse" expression="fn:concat(0,$ctx:beforeBalance,$ctx:stringToInsertbalance,$ctx:afterBalance)"/>
                      </then>
                      <else>
                         <property name="beforeBalance" expression="fn:substring($ctx:balance,1,$ctx:balanceLength+$ctx:exponentBalance)"/>
                         <property name="stringToInsertbalance" value="."/>
                         <property name="afterBalance" expression="fn:substring($ctx:balance,$ctx:balanceLength+$ctx:exponentBalance+1)"/>
                         <property name="balanceResponse" expression="fn:concat($ctx:beforeBalance,$ctx:stringToInsertbalance,$ctx:afterBalance)"/>
                      </else>
                   </filter>
                </else>
             </filter>
          </else>
       </filter>
       <log>
          <property name="balance" expression="$ctx:balance"/>
          <property name="balanceLength" expression="$ctx:balanceLength"/>
          <property name="negativeBalanceLength" expression="$ctx:negativeBalanceLength"/>
          <property name="exponentBalance" expression="$ctx:exponentBalance"/>
          <property name="exponentNegativeBalance" expression="$ctx:exponentNegativeBalance"/>
          <property name="beforeBalance" expression="$ctx:beforeBalance"/>
          <property name="beforeNegativeBalance" expression="$ctx:beforeNegativeBalance"/>
          <property name="stringToInsertbalance" expression="$ctx:stringToInsertbalance"/>
          <property name="stringToInsertNegativeBalance" expression="$ctx:stringToInsertNegativeBalance"/>
          <property name="afterBalance" expression="$ctx:afterBalance"/>
          <property name="afterBalanceNegative" expression="$ctx:afterBalanceNegative"/>
          <property name="balanceResponse" expression="$ctx:balanceResponse"/>
          <property name="negativeBalanceResponse" expression="$ctx:negativeBalanceResponse"/>
          <property name="result" expression="get-property('result')"/>
          <property name="absolute" expression="get-property('absolute')"/>
       </log>

我在 javascript 级别使用的脚本如下:

<script language="js">var exponent = mc.getProperty('exponentBalance');                  var balance = mc.getProperty('balance');                  if(exponent > 0) {             var itera = exponent * -1;                    var zero = '0';               for (i = 0; i &lt; itera; ++i) {           zero = zero.concat('0');                        }             var result = balance.concat(zero);                   }                  mc.setProperty("RESULT", String(result));</script>

同样如果我给Result变量加一个固定值,它总是显示True,我用的是WSO2 EI 6.5

可能发生了什么?

更新

更新行以设置如下定义的变量:

<script language="js">var exponent = mc.getProperty('exponentBalance');                  var balance = mc.getProperty('balance');                  if(exponent > 0) {             var itera = exponent * -1;                    var zero = '0';               for (i = 0; i &lt; itera; ++i) {           zero = zero.concat('0');                        }             var result = balance.concat(zero);                   }                  mc.setProperty("result", String(result));</script>

修改了以下行:

mc.setProperty("result", String(result))

但是,我在日志级别得到以下信息:

您可能已将 属性“结果”的值设置为“真”。这是因为您没有在脚本调解器中为 属性“结果”设置任何值。

在脚本介体中,您正在设置 属性 名称“RESULT”的值,而您正在获取 属性 名称 属性 名称“result”的值。

mc.setProperty("RESULT", String(result));
<property name="result" expression="get-property('result')"/>

如果要访问脚本中介中设置的值,需要按如下方式设置值。

mc.setProperty("result", String(result));

根据第一条评论更新

此行为的原因是,您在脚本中介的 if 条件中定义了变量“result”。如果 if 条件没有被执行,“result”将是未定义的。您需要在具有默认值的 if 条件之前定义 var "result"。