【问题标题】:Get property value in JavaScript with script mediator使用脚本中介获取 JavaScript 中的属性值
【发布时间】:2014-05-15 04:34:47
【问题描述】:

有没有办法在 WSO2 ESB 的 Script mediator 的 javascript 代码中,在该属性的范围不同于“默认”时获取该属性的值?

如果属性具有默认范围:

get-property('MyProperty') 

<script language="js">
   mc.getProperty("MyProperty");
</script>

如果属性具有“运输”范围:

get-property('transport','FILE_NAME')

<script language="js">
   mc.????????
</script>

【问题讨论】:

  • 使用 mc.get-property() 似乎无法获取属性

标签: javascript wso2 wso2esb synapse


【解决方案1】:

似乎您无法使用突触获取其他范围的属性

mc.get-property("属性名称")

因为 mc 是 Synapse.MessageContext 的实例,为了获取其他消息上下文属性,我在 java 中做了类似的事情,我不知道它是否适用于 javascript。我为axis2消息上下文属性执行此操作。 这里的“上下文”是 Synapse.MessageContext 的实例。

org.apache.axis2.context.MessageContext axis2MessageContext;
            axis2MessageContext = ((Axis2MessageContext)context).getAxis2MessageContext();

【讨论】:

    【解决方案2】:

    您可以使用以下代码获取属性:

    <property name="ComingRoles" expression="your property or value" scope="default"  />
    <script language="js">var rolelist = mc.getProperty('ComingRoles');</script>
    

    我用 WSO2ESB 4.9.0 测试它

    更新

    如果你的属性没有在默认范围内定义,首先你必须在默认范围内定义它。

    例如:

    <property name="authheader" expression="get-property('transport','X-JWT-Assertion')"></property>
    <script language="js"> var temp_auth = mc.getProperty('authheader')
    </script>
    

    它应该适用于 ESB 4.5.0 及更高版本

    【讨论】:

    • 当这个属性的范围不同于“默认”时?
    • 我用默认范围测试它。我认为它适用于其他范围。如果没有,请在默认范围内定义它。看到这个:sanjeewamalalgoda.blogspot.com/2014/08/…
    • 我找到了一篇从转移范围获取财产的文章。作者在默认范围内定义属性。可以看这个链接:wso2.com/library/articles/2013/07/…。我用这个事实更新了我的答案。你的问题非常有用。如果这个答案是真的,请告诉我。
    【解决方案3】:

    我不认为mcget-property 方法。
    Script Mediator 使用 Apache Bean Scripting Framework 来支持脚本语言。而mc 变量代表MessageContext 的一个实现,名为ScriptMessageContext.java

    [这里是ScriptMessageContext的类][1]

    [1]:https://synapse.apache.org/apidocs/org/apache/synapse/mediators/bsf/ScriptMessageContext.html
    您可以在其中检查任何 DEFAULT 范围属性(方法)。

    如果没有,您可能需要将这些范围属性放在自定义属性中。 喜欢:

    <property name="CustomAction" expression="get-property('Action')"/>
    

    然后在JS中使用getProperty("CustomAction")获取。

    【讨论】:

      【解决方案4】:

      我做了类似下面的事情

       <property expression="json-eval($.)" name="JSONPayload"
            scope="default" type="STRING"/>
          <script language="js"><![CDATA[var pl_string = mc.getProperty("JSONPayload");
                          var newPayload="{\"event\": " + pl_string + "}";
                          mc.setPayloadJSON(newPayload);]]></script>
      

      【讨论】:

        猜你喜欢
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        • 2016-03-10
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多