docs: public Stat exists(final String path, Watcher watcher)
              throws KeeperException, InterruptedException {
          verbotenThreadCheck();
          final String clientPath = path;
          PathUtils.validatePath(clientPath);
  
          // the watch contains the un-chroot path
          WatchRegistration wcb = null;
          if (watcher != null) {
              wcb = new ExistsWatchRegistration(watcher, clientPath);
          }
  
          final String serverPath = prependChroot(clientPath);
  
          RequestHeader h = new RequestHeader();
          h.setType(ZooDefs.OpCode.exists);
          ExistsRequest request = new ExistsRequest();
          request.setPath(serverPath);
          request.setWatch(watcher != null);
          SetDataResponse response = new SetDataResponse();
          ReplyHeader r = cnxn.submitRequest(h, request, response, wcb);
          if (r.getErr() != 0) {
              if (r.getErr() == KeeperException.Code.NONODE.intValue()) {
                  return null;
              }
              throw KeeperException.create(KeeperException.Code.get(r.getErr()),
                      clientPath);
          }
  
          return response.getStat().getCzxid() == -1 ? null : response.getStat();
      }