本文介绍如何根据实验1设计的集成流,完成查询城市天气的集成流设计,以及集成流的运行和调试。
前提条件
完成步骤二:实验1-根据车次查询城市信息集成流设计和调试操作。
步骤1:设计集成流
您可以选择创建新的接口和集成流,或者在步骤二:实验1-根据车次查询城市信息集成流的基础上直接修改。本文以在原有实验1的集成流基础上直接修改设计说明。
创建变量
由于使用遍历节点时,需要使用到变量保存循环内的数据,因此需要先创建变量。
将设置变量的节点拖动至查询车次的节点下。
在设置变量面板的设置变量区域,单击添加,将变量名配置为weather,类型配置为List。
单击脚本运行结果文本框,在脚本对话框中输入以下示例代码,完成后单击确定。
package bwifltoayo536281vy; import com.alibaba.bwif.script.core.StepMessage import com.alibaba.bwif.script.core.BwifHandler import java.util.ArrayList class SimpleHandler implements BwifHandler { @Override Object handle(StepMessage message) { //返回空ArrayList return new ArrayList() } }
使用遍历(For Each)节点
添加遍历(For Each)节点,使用脚本方式设置待遍历的集合。将遍历(For Each)的节点拖动至设置变量的节点下。
本实验中是针对查询车次接口中的List部分进行遍历。在遍历(For Each)面板,单击编辑代码,在脚本对话框中输入以下示例代码,完成后单击确定。
package bwifltobrjah62j1xw;
import com.alibaba.bwif.script.core.StepMessage
import com.alibaba.bwif.script.core.BwifHandler
import com.alibaba.bwif.script.core.protocol.http.HttpResponse
import java.util.HashMap
import com.alibaba.bwif.script.core.Entity
class SimpleHandler implements BwifHandler {
@Override
Object handle(StepMessage message) {
//前一节点输出消息的payload中保存了查询车次信息的HTTP返回内容
HttpResponse rep = message.getPayload()
//车次、城市列表等存在body内,类型为Entity
Entity eBody = rep.getBody()
//使用Entity的内置功能,自动将json字符串反序列化为HashMap
HashMap<String,Object> m = eBody.getValue()
//取出城市列表信息,做为目标遍历的集合
return m.get('result').get('list')
}
}
循环查询城市天气
在遍历循环内增加HTTP查询天气信息的节点。描述填写为查询城市天气,连接配置使用实验1中创建的连接配置,URL中的值配置为weather/city,Method配置为GET。
使用脚本方式配置Query位置的参数。选中脚本,单击编辑代码,在脚本对话框中输入以下示例代码,完成后单击确定。
package bwifltobys3b5jb1yk; import com.alibaba.bwif.script.core.StepMessage import com.alibaba.bwif.script.core.BwifHandler import java.util.HashMap class SimpleHandler implements BwifHandler { @Override Object handle(StepMessage message) { //每次遍历的城市信息,保存在消息的payload之中,HashMap结构,参考如下 // { // "sequenceno": "1", // "station": "北京", // "day": "1", // "arrivaltime": "-", // "departuretime": "07:00" // } HashMap<String,Object> payload = message.getPayload() String city = payload.get('station') //将城市名称做为query参数 HashMap<String,Object> q = new HashMap() q.put("cityname",city) return q } }
将查询结果保存到变量中
在查询城市天气的HTTP节点下增加设置变量节点,将查询的城市天气信息保存到weather变量中。描述填写为将查询结果保存到weather中。
单击添加,变量名配置为weather,类型配置为List,单击脚本运行结果,在脚本对话框中输入以下示例代码,完成后单击确定。
package bwifltoc79lr27n1z6; import com.alibaba.bwif.script.core.StepMessage import com.alibaba.bwif.script.core.BwifHandler import com.alibaba.bwif.script.core.protocol.http.HttpResponse import java.util.HashMap import java.util.ArrayList import com.alibaba.bwif.script.core.Entity class SimpleHandler implements BwifHandler { @Override Object handle(StepMessage message) { //从城市的天气查询结果中取出风力情况(wind) HttpResponse rep = message.getPayload() Entity eBody = rep.getBody() HashMap<String,Object> mRep = eBody.getValue() String wind = mRep.get('data').get('now').get('wind_power') //从输入消息的变量中取出weather ArrayList varWeather = message.getVariable().get('weather') //补充本轮查询的结果 varWeather.add(wind) //重新对变量进行赋值 return varWeather } }
HTTP API Reply
修改HTTP API Reply节点。将HTTP Status Code配置为200。
HTTP返回值的Body部分,使用脚本方式配置,单击编辑代码,在脚本对话框中输入以下示例代码,完成后单击确定。
package bwifltoazgaa6361w8; import com.alibaba.bwif.script.core.StepMessage import com.alibaba.bwif.script.core.BwifHandler import com.alibaba.bwif.script.core.Entity class SimpleHandler implements BwifHandler { @Override Object handle(StepMessage message) { //从输入消息的变量中取出weather,构造成Entity对象 ArrayList varWeather = message.getVariable().get('weather') Entity e = Entity.fromObjectValue(varWeather,"application/json","UTF-8") return e } }
步骤2:运行和调试集成流
单击集成流设计器页面右上角的保存,保存成功后可看到最近一次保存成功的时间。
单击集成流设计器页面右上角的调试,页面自动跳转至集成流调试器页面。
选中和实验1调试的相同环境。如果您是在实验1的集成流上直接修改,单击发起调用时,系统会自动将最新的元数据下发到集成应用实例中,稍等片刻后即可查看到调用结果。
关闭调用接口面板后,您可以查看节点的输入输出信息,据此调整集成流逻辑。