WSO2 ESB 迭代 DSS 响应(json 数组)
WSO2 ESB Iterate over DSS response (json array)
我在迭代 dss 的呼叫响应时遇到问题。我有 2 个服务器
WSO2 ESB 服务器 (4.9.0)
安装了数据服务 (4.3.4) 功能的 WSO2 应用服务器 (5.3.0)
我做了一个payload
<payloadFactory media-type="xml">
<format>
<p:valoresReport xmlns:p="ReportsDataService">
<xs:uuid xmlns:xs="ReportsDataService"></xs:uuid>
</p:valoresReport>
</format>
<args>
<arg value="123456789"/>
</args>
</payloadFactory>
并通过端点进行调用
<call blocking="true">
<endpoint key="ReportsDataServiceEndPoint"/>
</call>
响应是:
<ReportRowSet xmlns="ReportsDataService">
<reportRow>
<column1>1</column1>
<column2>2</column2>
<column3>3</column3>
</reportRow>
<reportRow>
<column1>columna 1</column1>
<column2>olumna 2</column2>
<column3>columna 3</column3>
</reportRow>
</ReportRowSet>
为了阅读回复,我将 de messageType 更改为 json
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
并使用 json-eval 获取值。
<property expression="json-eval($.ReportRowSet.reportRow)" name="rows"
scope="default" type="STRING"/>
我可以登录属性
<log level="custom">
<property expression="$ctx:rows" name="ROWS"/>
</log>
输出:
[2016-05-31 16:21:38,489] INFO - LogMediator ROWS = [{"column1":1,"column3":3,"column2":2},{"column1":"columna 1","column3":"columna 3","column2":"olumna 2"}]
但是当我尝试迭代行时,我不知道该怎么做(这种方法不起作用)
<iterate continueParent="true" expression="$ctx:rows"
id="MyIterator" sequential="true">
<target>
<sequence>
...
我也尝试过但没有成功(没有改变消息类型):
<iterate continueParent="true" expression="//ReportRowSet/reportRow"
id="MyIterator" sequential="true">
执行此集成和迭代的正确形式是什么。
我给你我的dss和顺序:
ReportsDataService.dbs: [https://drive.google.com/open?id=0B44t8SdKZz79ellKVmpkM0t6Rmc ]
GenerarReporteSequence.xml: [https://drive.google.com/open?id=0B44t8SdKZz79YlkxMnNnNm8weGs ]
尝试在迭代器调解器中使用适当的命名空间,示例如下,
<iterate xmlns:ns1="ReportsDataService" id="MyIterator" expression="//ns1:ReportRowSet/ns1:reportRow" sequential="true">
<target>
<sequence>
<log level="custom">
<property name="col" expression="//ns1:column1"/>
</log>
<call>
<endpoint>
<http uri-template="http://endpoint.url"/>
</endpoint>
</call>
</sequence>
</target>
</iterate>
我在迭代 dss 的呼叫响应时遇到问题。我有 2 个服务器
WSO2 ESB 服务器 (4.9.0) 安装了数据服务 (4.3.4) 功能的 WSO2 应用服务器 (5.3.0)
我做了一个payload
<payloadFactory media-type="xml">
<format>
<p:valoresReport xmlns:p="ReportsDataService">
<xs:uuid xmlns:xs="ReportsDataService"></xs:uuid>
</p:valoresReport>
</format>
<args>
<arg value="123456789"/>
</args>
</payloadFactory>
并通过端点进行调用
<call blocking="true">
<endpoint key="ReportsDataServiceEndPoint"/>
</call>
响应是:
<ReportRowSet xmlns="ReportsDataService">
<reportRow>
<column1>1</column1>
<column2>2</column2>
<column3>3</column3>
</reportRow>
<reportRow>
<column1>columna 1</column1>
<column2>olumna 2</column2>
<column3>columna 3</column3>
</reportRow>
</ReportRowSet>
为了阅读回复,我将 de messageType 更改为 json
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
并使用 json-eval 获取值。
<property expression="json-eval($.ReportRowSet.reportRow)" name="rows"
scope="default" type="STRING"/>
我可以登录属性
<log level="custom">
<property expression="$ctx:rows" name="ROWS"/>
</log>
输出:
[2016-05-31 16:21:38,489] INFO - LogMediator ROWS = [{"column1":1,"column3":3,"column2":2},{"column1":"columna 1","column3":"columna 3","column2":"olumna 2"}]
但是当我尝试迭代行时,我不知道该怎么做(这种方法不起作用)
<iterate continueParent="true" expression="$ctx:rows"
id="MyIterator" sequential="true">
<target>
<sequence>
...
我也尝试过但没有成功(没有改变消息类型):
<iterate continueParent="true" expression="//ReportRowSet/reportRow"
id="MyIterator" sequential="true">
执行此集成和迭代的正确形式是什么。
我给你我的dss和顺序:
ReportsDataService.dbs: [https://drive.google.com/open?id=0B44t8SdKZz79ellKVmpkM0t6Rmc ]
GenerarReporteSequence.xml: [https://drive.google.com/open?id=0B44t8SdKZz79YlkxMnNnNm8weGs ]
尝试在迭代器调解器中使用适当的命名空间,示例如下,
<iterate xmlns:ns1="ReportsDataService" id="MyIterator" expression="//ns1:ReportRowSet/ns1:reportRow" sequential="true">
<target>
<sequence>
<log level="custom">
<property name="col" expression="//ns1:column1"/>
</log>
<call>
<endpoint>
<http uri-template="http://endpoint.url"/>
</endpoint>
</call>
</sequence>
</target>
</iterate>