@Override
  public Object parseResponse(InputStream is) throws IOTException {

    BufferedReader in = null;
    try {
      in = new BufferedReader(new InputStreamReader(is, "UTF-8"));
      ObjectMapper objectMapper = new ObjectMapper();
      JsonNode node = objectMapper.readTree(in);
      IOTLog.i("HTTP Result", node.toString());
      return objectMapper.readValue(node.toString(), getResultClass());

    } catch (Exception e) {
      e.printStackTrace();
      IOTLog.d("HttpRequestHandle", e.getMessage());
      if (e instanceof IOTException) {
        throw (IOTException) e;
      } else {
        throw new IOTException(-1, "服务器异常");
      }
    }
  }
  public boolean login(String loginName, String password) throws IOTException {

    HttpRequest request =
        new NoneAuthedHttpRequest(
            new HttpConfig.GetHttpConfig(), Constants.ServerAPIURI.GET_SESSION_ID);
    request.addParameter("dataType", "xml");
    ServiceContainer.getInstance()
        .getHttpHandler()
        .doRequest(
            request,
            new RequestListener<Session>() {

              @Override
              public void onRequestStart() {
                // TODO Auto-generated method stub

              }

              @Override
              public void onRequestGetControl(RequestControl control) {
                // TODO Auto-generated method stub

              }

              @Override
              public void onRequestCancelled() {
                // TODO Auto-generated method stub

              }

              @Override
              public void onRequestError(Exception e) {
                succeed = false;
                if (e instanceof IOTException) {
                  exception = (IOTException) e;
                } else {
                  exception = new IOTException(-1, e.getMessage());
                }
              }

              @Override
              public void onRequestResult(Session result) {
                // TODO Auto-generated method stub
                succeed = true;
                sessionID = result.getSessionID();
              }

              @Override
              public void onRequestComplete() {
                // TODO Auto-generated method stub
                synchronized (lock) {
                  lock.notify();
                }
              }
            });
    synchronized (lock) {
      try {
        lock.wait();
      } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }

      IOTLog.d("LOGINService", sessionID == null ? "null" : sessionID);
    }

    if (!succeed && exception != null) throw exception;

    HttpRequest request2 =
        new NoneAuthedHttpRequest(new HttpConfig.GetHttpConfig(), Constants.ServerAPIURI.LOGIN);

    String mangledPwd = EncryptUtil.getStringMD5(password + ":" + sessionID);

    request2.addParameter("dataType", "json");
    request2.addParameter("__session_id", sessionID);
    request2.addParameter("username", loginName);
    request2.addParameter("mangled_password", mangledPwd);
    request2.addParameter("lang", "zh-cn");
    request2.addParameter("timezone", Integer.toString(TimeZone.getDefault().getRawOffset()));

    ServiceContainer.getInstance()
        .getHttpHandler()
        .doRequest(
            request2,
            new RequestListener<User>() {

              @Override
              public void onRequestStart() {
                // TODO Auto-generated method stub

              }

              @Override
              public void onRequestGetControl(RequestControl control) {
                // TODO Auto-generated method stub

              }

              @Override
              public void onRequestCancelled() {
                // TODO Auto-generated method stub

              }

              @Override
              public void onRequestError(Exception e) {
                succeed = false;
                if (e instanceof IOTException) {
                  exception = (IOTException) e;
                } else {
                  exception = new IOTException(-1, e.getMessage());
                }
              }

              @Override
              public void onRequestResult(User result) {
                // TODO Auto-generated method stub
                succeed = true;
                loginUser = result;
              }

              @Override
              public void onRequestComplete() {
                // TODO Auto-generated method stub
                synchronized (lock) {
                  lock.notify();
                }
              }
            });
    synchronized (lock) {
      try {
        lock.wait();
      } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }

      IOTLog.d("LOGINService", loginUser == null ? "null" : loginUser.getUserID());
    }

    if (!succeed && exception != null) throw exception;

    if (succeed) {
      loginUser.setLoginName(loginName);
      loginUser.setPassword(password);
      ServiceContainer.getInstance().getSessionService().setSessionID(sessionID);
      ServiceContainer.getInstance().getSessionService().setLoginUser(loginUser);
    }

    return succeed;
  }