@Override
    public ListObjectsResult parse(Response response) throws IOException {
      try {
        ListObjectsResult result = parseObjectListResponse(response.body().byteStream());

        result.setRequestId(response.header(OSSHeaders.OSS_HEADER_REQUEST_ID));
        result.setStatusCode(response.code());
        result.setResponseHeader(parseResponseHeader(response));

        return result;
      } catch (Exception e) {
        throw new IOException(e.getMessage(), e);
      } finally {
        safeCloseResponse(response);
      }
    }
  /**
   * 解析listObjectInBucket请求的响应体
   *
   * @param in
   * @return
   * @throws Exception
   */
  private static ListObjectsResult parseObjectListResponse(InputStream in)
      throws ParserConfigurationException, IOException, SAXException, ParseException {
    ListObjectsResult result = new ListObjectsResult();
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    Document dom = builder.parse(in);
    Element element = dom.getDocumentElement();
    OSSLog.logD("[parseObjectListResponse] - " + element.getNodeName());

    NodeList list = element.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
      Node item = list.item(i);
      String name = item.getNodeName();
      if (name == null) {
        continue;
      } else if (name.equals("Name")) {
        result.setBucketName(checkChildNotNullAndGetValue(item));
      } else if (name.equals("Prefix")) {
        result.setPrefix(checkChildNotNullAndGetValue(item));
      } else if (name.equals("Marker")) {
        result.setMarker(checkChildNotNullAndGetValue(item));
      } else if (name.equals("Delimiter")) {
        result.setDelimiter(checkChildNotNullAndGetValue(item));
      } else if (name.equals("EncodingType")) {
        result.setEncodingType(checkChildNotNullAndGetValue(item));
      } else if (name.equals("MaxKeys")) {
        String maxKeys = checkChildNotNullAndGetValue(item);
        if (maxKeys != null) {
          result.setMaxKeys(Integer.valueOf(maxKeys));
        }
      } else if (name.equals("NextMarker")) {
        result.setNextMarker(checkChildNotNullAndGetValue(item));
      } else if (name.equals("IsTruncated")) {
        String isTruncated = checkChildNotNullAndGetValue(item);
        if (isTruncated != null) {
          result.setTruncated(Boolean.valueOf(isTruncated));
        }
      } else if (name.equals("Contents")) {
        if (item.getChildNodes() == null) {
          continue;
        }
        result.getObjectSummaries().add(parseObjectSummaryXML(item.getChildNodes()));
      } else if (name.equals("CommonPrefixes")) {
        if (item.getChildNodes() == null) {
          continue;
        }
        String prefix = parseCommonPrefixXML(item.getChildNodes());
        if (prefix != null) {
          result.getCommonPrefixes().add(prefix);
        }
      }
    }
    return result;
  }