本文介紹如何根據實驗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的集成流上直接修改,單擊發起調用時,系統會自動將最新的元數據下發到集成應用實例中,稍等片刻后即可查看到調用結果。
關閉調用接口面板后,您可以查看節點的輸入輸出信息,據此調整集成流邏輯。