// 1. ReflexServletをextendsしてRESTful機能をもたせる
public class InvoiceServlet extends ReflexServlet {
// MODELのPackage名を指定
private static final String MODEL_PACKAGE = "jp.reflexworks.invoice.model";
public void doGet(HttpServletRequest req,
HttpServletResponse resp) throws IOException {
// 2. リクエストパラメータにxmlがあればXMLで出力、なければJSONで出力
boolean toJSON = true;
if (req.getParameter("xml") != null) {
toJSON
= false; // toJSON
}
try {
JdoUtils
jdoUtils = new JdoUtils();
// 2. RequestパラメータをEntity(Invoice)にセットする
Invoice
param = new Invoice();
(new
RequestMapper()).setValue(req, param);
// Pagesize(検索結果レコード数)とnextid(検索開始レコード番号)を取得
String
nextid = req.getParameter("nextid");
String
pagesize = req.getParameter("pagesize");
// 3. パラメータInvoiceを与えてdatastoreを検索
InvoiceBase
invoiceBase = new InvoiceBase();
invoiceBase.invoiceList =
jdoUtils.getEntriesByParam(param, pagesize, nextid);
// 5. 検索件数がない場合、“No data“を出力
if (invoiceBase.invoiceList == null || invoiceBase.invoiceList.size() == 0) {
Status
status = new Status();
status.code = HttpStatus.SC_NO_CONTENT;
status.message = "No data.";
try {
doResponse(resp,
status, toJSON, MODEL_PACKAGE);
}
catch (Exception ee) {
ee.printStackTrace();
}
}
else {
// 4. 検索件数>0の場合、検索結果dataをXMLもしくはJSONで出力
jdoUtils.complementInvoiceRecord(invoiceBase.invoiceList);
doResponse(resp,
invoiceBase, toJSON, MODEL_PACKAGE); // true:JSON
}
// 5. エラー発生の場合、エラー内容を出力
}
catch (Exception e) {
e.printStackTrace();
Status
status = new Status();
status.code = HttpStatus.SC_INTERNAL_SERVER_ERROR;
status.message = e.getMessage();
try {
doErrorPage(resp,
e);
}
catch (Exception ee) {
ee.printStackTrace();
}
}
}
}