Ako spracovať JSON/XML string v SAP Cloud Applications Studiu? – 2. časť
Napísali: Kristián Kačinetz, SAP Developer & Ondrej Rimovský, SAP Developer
V predchádzajúcej časti série článkov sme si ukázali akým spôsobom je v Jave možné implementovať jednoduchú SOAP službu. Cieľom tejto časti série bude rozšírenie našej jednoduchej SOAP služby o volania na REST službu a teda získanie dát z REST služby a ich následné spracovanie do SOAP služby. V tejto časti zároveň ukončíme implementáciu, ktorú je potrebné vykonať v Jave.
V tejto časti série článkov budeme využívať kód vytvorený v predchádzajúcej časti, ktorý je možné stiahnuť v predchádzajúcej časti série. Kód vytvorený v predchádzajúcej časti rozšírime o triedy a metódy implementujúce volania na REST službu a spracovanie získaných dát. Pre ilustráciu sme sa rozhodli využiť voľne dostupnú REST službu, ktorá získava dáta o vývoji ochorenia Covid-19 vo svete. Dokumentácia tejto služby je dostupná na odkaze:
Na stiahnutie soap guide
Implementácia
V package types si vytvoríme dve nové triedy, jednu na popísanie štruktúry dát, ktoré chceme poslať na výstupe a druhú na uchovanie týchto dát v liste. Naše triedy nazveme CountryData a CountryDataList. Implementáciu týchto tried znázorňujú ukážky nižšie:
package types; import java.util.Calendar; public class CountryData { private String Country; private int Confirmed, Dead, Recovered; private Calendar Updated; public String getCountry() { return Country; } public void setCountry(String country) { Country = country; } public int getConfirmed() { return Confirmed; } public void setConfirmed(int confirmed) { Confirmed = confirmed; } public int getDead() { return Dead; } public void setDead(int dead) { Dead = dead; } public int getRecovered() { return Recovered; } public void setRecovered(int recovered) { Recovered = recovered; } public Calendar getUpdated() { return Updated; } public void setUpdated(Calendar updated) { Updated = updated; } }
package types; import java.util.List; public class CountryDataList { private List CountryDataList; public List getCountryDataList() { return CountryDataList; } public void setCountryDataList(List countryDataList) { CountryDataList = countryDataList; } }
V priečinku Java si vytvoríme nový package a nazveme ho utils. V tomto package si vytvoríme dve nové Java triedy s názvom ApiCalls a DataParser. Trieda ApiCalls bude obsahovať implementáciu metódy na získavanie odpovedí z využívaných služieb. Obsah metódy ApiCalls je uvedený v ukážke kódu nižšie:
package utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class ApiCalls { public static String getResponse(URL url, String restMethod) throws IOException { String response = ""; HttpURLConnection con = null; con = (HttpURLConnection) url.openConnection(); con.setRequestMethod(restMethod); int status = con.getResponseCode(); if(status == 200) { BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { response += inputLine; } in.close(); } con.disconnect(); return response; } }
Pred ďalším krokom je v koreňovom adresári potrebné editovať súbor pom.xml a do závislostí pridať nasledujúcu závislosť:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.4</version> </dependency>
V metóde DataParser implementujeme logiku spracovania údajov, ktoré sme obdržali pri volaní REST služby. Obsah metódy DataParser je ilustrovaný nasledujúcou ukážkou kódu:
package utils; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import types.CountryData; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.List; public class DataParser { public static List getCountryDataList() { List CountryDataList = new ArrayList<>(); String serviceResponse = callService("https://www.trackcorona.live/api/countries", "GET"); if (serviceResponse != null) { JsonArray JsonRespArr; JsonObject JsonObjectResp; JsonElement JsonElementResp = new JsonParser().parse(serviceResponse); if (JsonElementResp.getAsJsonObject() != null) { JsonObjectResp = JsonElementResp.getAsJsonObject(); if (JsonObjectResp.has("data")) { JsonRespArr = JsonObjectResp.getAsJsonArray("data"); for (JsonElement Item : JsonRespArr ) { CountryDataList.add(getDataForCountry(Item)); } } } } return CountryDataList; } public static CountryData getDataForCountry(JsonElement Item) { CountryData data = new CountryData(); JsonObject DataObj = Item.getAsJsonObject(); data.setCountry(DataObj.get("location").getAsString()); data.setUpdated(GregorianCalendar.from(ZonedDateTime.parse(DataObj.get("updated").getAsString().replace(" ", "T")))); data.setConfirmed(DataObj.get("confirmed").getAsInt()); data.setDead(DataObj.get("dead").getAsInt()); data.setRecovered(DataObj.get("recovered").getAsInt()); return data; } public static String callService(String Url, String restMethod) { URL url = null; try { url = new URL(Url); } catch (MalformedURLException e) { e.printStackTrace(); } String response = null; try { response = ApiCalls.getResponse(url, restMethod); } catch (IOException e) { e.printStackTrace(); } return response; } }
Upravíme triedu GuideService, do ktorej pridáme nasledujúcu metódu:
@WebMethod(operationName = "getCountryDataList") public CountryDataList getCountryDataList() { CountryDataList countryDataList = new CountryDataList(); countryDataList.setCountryDataList(DataParser.getCountryDataList()); return countryDataList; }
Na záver je potrebné opätovne vygenerovať war súbor za pomoci príkazu „mvn package“, podrobný postup bol popísaný v predchádzajúcej časti. Taktiež je projekt potrebný opätovne nahrať na SAP Cloud Platform pričom odporúčame aplikáciu nahrať s novým menom.
Výsledkom tejto časti blogu je SOAP služba, ktorá načíta a spracuje údaje z REST služby a poskytne výstup v SOAP formáte.
Pokračovanie nabudúce…
V nasledujúcej časti série článkov si ukážeme ako je možné využiť našu SOAP službu pri zakladaní objektov v SAP Cloud for Customer za pomoci Application Studia.