예제 #1
0
  private JSONObject getResponse(HttpServletRequest request) throws IOException, JSONException {
    JSONObject requestJSON = null;
    if (request.getInputStream() != null) {
      BufferedReader rd = new BufferedReader(new InputStreamReader(request.getInputStream()));
      StringBuilder s = new StringBuilder();
      String line;
      while ((line = rd.readLine()) != null) {
        s.append(line);
      }
      rd.close();
      String json = s.toString();
      if (json != null && !"".equals(json)) {
        requestJSON = new JSONObject(json);
      }
    }

    JSONObject res = new JSONObject();
    res.put("success", false);

    // the id can be specified via a param, or in the json request.
    String id;
    if (requestJSON == null) {
      id = request.getParameter("id");
    } else {
      if (!requestJSON.has("id")) {
        res.put("msg", "you need to specify at least an id when call the node  status service.");
        return res;
      } else {
        id = requestJSON.getString("id");
      }
    }

    // see RegistrationRequest.ensureBackwardCompatibility()
    try {
      URL u = new URL(id);
      id = "http://" + u.getHost() + ":" + u.getPort();
    } catch (MalformedURLException ignore) {
    }

    // id is defined from here.
    RemoteProxy proxy = getRegistry().getProxyById(id);
    if (proxy == null) {
      res.put("msg", "Cannot find proxy with ID =" + id + " in the registry.");
      return res;
    } else {
      res.put("msg", "proxy found !");
      res.put("success", true);
      res.put("id", proxy.getId());
      res.put("request", proxy.getOriginalRegistrationRequest().getAssociatedJSON());

      // maybe the request was for more info
      if (requestJSON != null) {
        // use basic (= no objects ) reflexion to get the extra stuff
        // requested.
        List<String> methods = getExtraMethodsRequested(requestJSON);

        List<String> errors = new ArrayList<String>();
        for (String method : methods) {
          try {
            Object o = getValueByReflection(proxy, method);
            res.put(method, o);
          } catch (Throwable t) {
            errors.add(t.getMessage());
          }
        }
        if (!errors.isEmpty()) {
          res.put("success", false);
          res.put("errors", errors.toString());
        }
      }
      return res;
    }
  }