wso2 esb PayloadFactory如何支持数组
wso2 esb PayloadFactory how to support array
在ESB中,我们可以使用payloadFactory创建请求。但是payload factory是预配置的json格式,用值替换占位符。
如果请求中包含数组,则非常困难。有什么建议吗?
负载工厂示例
<payloadFactory media-type="json">
<format>
{
"tableId":"",
"min":"",
"max":""
}
</format>
<args>
<arg evaluator="xml" expression="$func:tableId"/>
<arg evaluator="xml" expression="$func:min"/>
<arg evaluator="xml" expression="$func:max"/>
</args>
</payloadFactory>
如需更多 dynamic/complex 负载修改,您可以使用 Script Mediator,您可以在其中编写一些 javascript 代码来构建负载。
就像 Rajeev 已经提到的那样,这可以使用脚本调解器来实现。我这样做是为了实现分页功能,以便从包中的数据库中读取全部内容。
这是我所做的一个例子,希望对您有所帮助。
<script language="js">print("Start JS");
var pageSize = 500;
var pagesRest = mc.getProperty("result_count") % pageSize;
var pages = ((mc.getProperty("result_count")-pagesRest)/pageSize)+1;
var xmlResponse = mc.getPayloadXML();
var rowCount= mc.getProperty("result_count");
print("rowCount: " + rowCount+" pages:"+pages);
var rowData = {
rows : []
};
var resultCount=0;
for(var i=1;i<=pages;i++)
{
print("Building page "+i);
rowData.rows[i] = {};
rowData.rows[i].from = "" + (i-1)*pageSize ;
rowData.rows[i].to= "" + (pageSize * i);
rowData.rows[i].orderBy = "caseid";
resultCount+=pageSize;
}
mc.setPayloadJSON(rowData);
问候
马丁
在ESB中,我们可以使用payloadFactory创建请求。但是payload factory是预配置的json格式,用值替换占位符。 如果请求中包含数组,则非常困难。有什么建议吗? 负载工厂示例
<payloadFactory media-type="json">
<format>
{
"tableId":"",
"min":"",
"max":""
}
</format>
<args>
<arg evaluator="xml" expression="$func:tableId"/>
<arg evaluator="xml" expression="$func:min"/>
<arg evaluator="xml" expression="$func:max"/>
</args>
</payloadFactory>
如需更多 dynamic/complex 负载修改,您可以使用 Script Mediator,您可以在其中编写一些 javascript 代码来构建负载。
就像 Rajeev 已经提到的那样,这可以使用脚本调解器来实现。我这样做是为了实现分页功能,以便从包中的数据库中读取全部内容。
这是我所做的一个例子,希望对您有所帮助。
<script language="js">print("Start JS");
var pageSize = 500;
var pagesRest = mc.getProperty("result_count") % pageSize;
var pages = ((mc.getProperty("result_count")-pagesRest)/pageSize)+1;
var xmlResponse = mc.getPayloadXML();
var rowCount= mc.getProperty("result_count");
print("rowCount: " + rowCount+" pages:"+pages);
var rowData = {
rows : []
};
var resultCount=0;
for(var i=1;i<=pages;i++)
{
print("Building page "+i);
rowData.rows[i] = {};
rowData.rows[i].from = "" + (i-1)*pageSize ;
rowData.rows[i].to= "" + (pageSize * i);
rowData.rows[i].orderBy = "caseid";
resultCount+=pageSize;
}
mc.setPayloadJSON(rowData);
问候 马丁