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; }
}