6.4.1 RESTアプリケーションの実装例
RESTアプリケーションを構成するJavaプログラムの実装例を示します。この例では,RESTアプリケーションは3つのJavaプログラムで構成されています。
(1) PartsInfoService.java
PartsInfoService.javaは,RESTアプリケーションのルートリソースクラスのソースファイルです。「<コンテキストルート> + "/parts/order"」のURLに対するPOSTリクエストを受信するリソースメソッドorderを持っています。
PartsInfoService.javaの実装例
package xxx.usrapp; import java.util.List; import java.util.Calendar; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; /** * BPMSから呼び出されるRESTアプリケーションです。 */ @Path("/parts") public class PartsInfoService { /** * BPMSから呼び出されるメソッドです。 * @param reqData リクエストデータ * @return レスポンスデータ */ @POST @Produces({"application/xml;charset=UTF-8"}) @Path("order") public CSCIWRestBody order(CSCIWRestBody reqData) { //リクエストデータの取得 if (reqData != null) { List<CSCIWData> list = reqData.getDataList(); if (list != null) { for (CSCIWData d : list) { System.out.println( String.format("AppInfo: key=%1$s, value=%2$s", d.getKey(), d.getValue()) ); } } } //レスポンスデータの作成 Calendar cal = Calendar.getInstance(); cal.set(Calendar.DATE, cal.get(Calendar.DATE)+5); CSCIWData data = new CSCIWData("schedule", cal.getTime().toString()); CSCIWRestBody res = new CSCIWRestBody(); res.add(data); return res; } }
(2) CSCIWRestBody.java
CSCIWRestBody.javaは,RESTアプリケーションが送受信するエンティティのcsciwRestBody要素のソースファイルです。CSCIWRestBody.javaは,data要素を子要素として持っています。data要素は,任意の数を指定できます。
CSCIWRestBody.javaの実装例
package xxx.usrapp; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * RESTアプリケーション送受信データのクラスです。 */ @XmlRootElement(name="csciwRestBody") public class CSCIWRestBody { private List<CSCIWData> list = new ArrayList<CSCIWData>(); @XmlElement(name="data") public List<CSCIWData> getDataList() { return list; } public void setDataList(List<CSCIWData> l) { list = l; } /** * 指定されたデータをリストに追加します。 * @param data 追加するデータ */ public void add(CSCIWData data) { list.add(data); } }
(3) CSCIWData.java
CSCIWData.javaは,RESTアプリケーションが送受信するエンティティのcsciwRestBody要素の子要素である,data要素のソースファイルです。data要素は,子要素としてkey要素およびvalue要素を1つずつ持っています。key要素およびvalue要素のデータ型は,string型です。
CSCIWData.javaの実装例
package xxx.usrapp; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * RESTアプリケーション送受信データのクラスです。 */ @XmlRootElement(name="data") public class CSCIWData { private String key = ""; //キー private String value = ""; //値 /** コンストラクタ */ public CSCIWData(){} public CSCIWData(String k, String v){ key = k; value = v; } @XmlElement(name="key") public String getKey() { return key; } public void setKey(String k) { key = k; } @XmlElement(name="value") public String getValue() { return value; } public void setValue(String v) { value = v; } }