Package com.almende.eve.transport.http

Source Code of com.almende.eve.transport.http.RestServlet

package com.almende.eve.transport.http;

import java.io.IOException;
import java.util.Enumeration;
import java.util.logging.Logger;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.almende.eve.agent.AgentFactory;
import com.almende.eve.agent.annotation.Sender;
import com.almende.eve.config.Config;
import com.almende.eve.rpc.RequestParams;
import com.almende.eve.rpc.jsonrpc.JSONRequest;
import com.almende.eve.rpc.jsonrpc.JSONResponse;


@SuppressWarnings("serial")
public class RestServlet extends HttpServlet {
  private Logger logger = Logger.getLogger(this.getClass().getSimpleName());
  private AgentFactory factory = null;
 
  @Override
  public void init() {
    try {
      initAgentFactory()
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException {
    try {
      // get method from url
      String uri = req.getRequestURI();
      String[] path = uri.split("\\/");
      String agentId = (path.length > 2) ? path[path.length - 2] : null;
      String method = (path.length > 1) ? path[path.length - 1] : null;

      // get query parameters
      JSONRequest request = new JSONRequest();
      request.setMethod(method);
      Enumeration<String> params = req.getParameterNames();
      while (params.hasMoreElements()) {
        String param = params.nextElement();
        request.putParam(param, req.getParameter(param));
      }

      // TODO: provide authorized sender url
      RequestParams requestParams = new RequestParams();
      requestParams.put(Sender.class, null);
     
      // invoke the agent
      JSONResponse response = factory.invoke(agentId, request, requestParams);

      // return response
      resp.addHeader("Content-Type", "application/json");
      resp.getWriter().println(response.getResult());
    } catch (Exception err) {
      resp.getWriter().println(err.getMessage());
    }
  }

  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws IOException {
    doGet(req, resp);
  }

  /**
   * initialize the agent factory
   * @throws Exception
   */
  private void initAgentFactory() throws Exception {
    factory = AgentFactory.getInstance();
    if (factory == null) {
      // instance not yet loaded. initiate a new instance
      String filename = getInitParameter("config");
      if (filename == null) {
        filename = "eve.yaml";
        logger.warning(
          "Init parameter 'config' missing in servlet configuration web.xml. " +
          "Trying default filename '" + filename + "'.");
      }
      String fullname = "/WEB-INF/" + filename;
      logger.info("loading configuration file '" +
          getServletContext().getRealPath(fullname) + "'...");
      Config config = new Config(getServletContext().getResourceAsStream(fullname));

      factory = AgentFactory.createInstance(config);
    }
  }
}
TOP

Related Classes of com.almende.eve.transport.http.RestServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.