如何在 WSO2 ESB 中创建全局变量 - 必须是可更新的
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]
这样我就可以编写一个脚本到 运行 通过这个并产生一个有效载荷到 return 如下所示:
{
"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>
您可以迭代所有 "value" :
<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></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>
我已经编写了一个 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]
这样我就可以编写一个脚本到 运行 通过这个并产生一个有效载荷到 return 如下所示:
{
"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>
您可以迭代所有 "value" :
<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></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>