如何在WSO2ESB中创建全局变量-必须是可更新的
How to create a global variable in WSO2 ESB - must be updatable
我已经编写了一个ESB资源,它接受一系列测试用例,如下面的示例:
{
"tests": [
{ "type": "DSS", "url": "http://localhost:8280/testsuite/general/test" },
{ "type": "ESB", "url": "http://localhost:8280/testsuite/general/test" },
{ "type": "GREG", "url": "http://localhost:8280/testsuite/general/test" },
{ "type": "GW", "url": "http://localhost:8280/testsuite/general/test" },
{ "type": "MB", "url": "http://localhost:8280/testsuite/general/test" },
{ "type": "ID", "url": "http://localhost:8280/testsuite/general/test" },
{ "type": "BOGUS", "url": "http://localhost:8280/testsuite/general/test" }
]
}
资源将其作为JSON数组,并使用XPATH表达式//tests/type
在元素中循环,并生成一条状态消息(如果200
可以执行任何操作,则为ERR
)。
理想情况下,我希望能够将类型增量添加到某种全局数组属性中,该属性最终将变为[DSS, ESB, GREG, GW, MB, ID, BOGUS]
,这样我就可以编写一个脚本来运行它,并生成一个有效负载来返回如下内容:
{
"results": [
{ "TYPE": "DSS", "STATUS": "200" },
{ "TYPE": "ESB", "STATUS": "200" },
{ "TYPE": "GREG", "STATUS": "200" },
{ "TYPE": "GW", "STATUS": "200" },
{ "TYPE": "MB", "STATUS": "200" },
{ "TYPE": "ID", "STATUS": "200" },
{ "TYPE": "BOGUS", "STATUS": "ERR" }
]
}
几天来,我一直在寻找一种方法来做到这一点,但没有成功,所以如果这根本不可能,或者如果我只是在寻找错误的东西,我不知道,但我真的想避免产生静态资源,使我能够在未来以最小的参与度进行扩展。
您可以使用以下脚本将有效负载保存在政府注册表中:
<script language="js"><![CDATA[
importPackage(Packages.org.apache.synapse.config);
mc.getConfiguration().getRegistry().newResource("gov:/trunk/Test/TestTypes",false);
mc.getConfiguration().getRegistry().updateResource("gov:/trunk/Test/TestTypes",mc.getPayloadXML().toString());
]]></script>
- newResource如果资源不存在,则创建该资源
- 你可以使用mc.getPayloadJSON()而不是mc.getPayloadXML()
资源"TESTSOF"的示例如下:
<root>
<value><child>1</child></value>
<value><child>2</child></value>
<value><child>3</child></value>
</root>
您可以使用对所有"值"进行iter
<property name="TESTSOF" expression="get-property('registry','gov:/trunk/TESTSOF')" type="OM"/>
<iterate continueParent="true" sequential="false" preservePayload="false" expression="$ctx:TESTSOF//value">
<target>
<sequence>
<log level="full"/>
</sequence>
</target>
</iterate>
带有JSON的示例:加载JSON作为当前消息:
<payloadFactory media-type="json">
<format>$1</format>
<args>
<arg evaluator="xml" expression="get-property('registry','gov:/trunk/Test/TestTypes')"/>
</args>
</payloadFactory>
迭代:
<iterate continueParent="true" sequential="false" preservePayload="false" expression="//tests">
<target>
<sequence>
<log level="full"/>
</sequence>
</target>
</iterate>
相关文章:
- 更新后,父视图未在 Electron 中的
上设置全局变量 - 用javascript更新事件函数中的全局变量
- 从函数更新全局变量
- 在 NodeJS 中使用和更新全局变量是否安全?
- 在 Javascript 中本地更新全局变量
- 在 JavaScript 中回溯,无法更新全局变量
- 更新全局变量javascript/html
- JavaScript更新全局变量
- 通过回调更新全局变量
- 在javascript中更新全局变量
- 如何在WSO2ESB中创建全局变量-必须是可更新的
- 可以't从一个角度内更新全局变量.forEach循环
- 从函数更新全局变量
- 如何在窗口关闭时更新全局变量
- 侦听器调用的Javascript函数不能更新全局变量
- 从eventlistener更新全局变量
- 无法在函数内部更新全局变量并在函数外部调用它(jQuery)
- 用函数中的值更新全局变量;它被存储在一个变量中
- Javascript匿名函数未更新全局变量
- 更新全局变量