// 1. ReflexServletextendsしてRESTful機能をもたせる

public class InvoiceServlet extends ReflexServlet {

 

       // MODELPackage名を指定

       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パラメータをEntityInvoice)にセットする

                     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の場合、検索結果dataXMLもしくは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();

                     }

              }

       }

}