@VisibleForTesting
 void parseLastModifiedOrThrowException(
     HttpResponse from, MutableContainerPropertiesWithMetadata metadata) throws HttpException {
   String lastModified = from.getFirstHeaderOrNull(HttpHeaders.LAST_MODIFIED);
   if (lastModified == null)
     throw new HttpException(
         HttpHeaders.LAST_MODIFIED + " header not present in response: " + from);
   metadata.setLastModified(dateParser.rfc822DateParse(lastModified));
   if (metadata.getLastModified() == null)
     throw new HttpException(
         "could not parse: " + HttpHeaders.LAST_MODIFIED + ": " + lastModified);
 }
 public void endElement(String uri, String name, String qName) {
   if (inMetadata && !qName.equals("Metadata")) {
     currentMetadata.put(qName, currentText.toString().trim());
   } else if (qName.equals("Metadata")) {
     inMetadata = false;
   } else if (qName.equals("MaxResults")) {
     maxResults = Integer.parseInt(currentText.toString().trim());
   } else if (qName.equals("Marker")) {
     marker = currentText.toString().trim();
     marker = (marker.equals("")) ? null : marker;
   } else if (qName.equals("Prefix")) {
     prefix = currentText.toString().trim();
     prefix = (prefix.equals("")) ? null : prefix;
   } else if (qName.equals("Delimiter")) {
     delimiter = currentText.toString().trim();
     delimiter = (delimiter.equals("")) ? null : delimiter;
   } else if (qName.equals("NextMarker")) {
     nextMarker = currentText.toString().trim();
     nextMarker = (nextMarker.equals("")) ? null : nextMarker;
   } else if (qName.equals("BlobType")) {
     currentBlobType = BlobType.fromValue(currentText.toString().trim());
   } else if (qName.equals("LeaseStatus")) {
     currentLeaseStatus = LeaseStatus.fromValue(currentText.toString().trim());
   } else if (qName.equals("Blob")) {
     BlobProperties md =
         new BlobPropertiesImpl(
             currentBlobType,
             currentName,
             containerUrl.getPath().replace("/", ""),
             currentUrl,
             currentLastModified,
             currentETag,
             currentSize,
             currentContentType,
             currentContentMD5,
             currentContentEncoding,
             currentContentLanguage,
             currentLeaseStatus,
             currentMetadata);
     blobMetadata.add(md);
     currentBlobType = null;
     currentName = null;
     currentUrl = null;
     currentLastModified = null;
     currentETag = null;
     currentSize = -1;
     currentContentType = null;
     currentContentEncoding = null;
     currentContentLanguage = null;
     currentContentMD5 = null;
     currentLeaseStatus = null;
     currentMetadata = Maps.newHashMap();
   } else if (qName.equals("Url")) {
     currentUrl = HttpUtils.createUri(currentText.toString().trim());
   } else if (qName.equals("Last-Modified")) {
     currentLastModified = dateParser.rfc822DateParse(currentText.toString().trim());
   } else if (qName.equals("Etag")) {
     currentETag = currentText.toString().trim();
   } else if (qName.equals("Name")) {
     if (inBlob) currentName = currentText.toString().trim();
     else if (inBlobPrefix) blobPrefixes.add(currentText.toString().trim());
   } else if (qName.equals("Content-Length")) {
     currentSize = Long.parseLong(currentText.toString().trim());
   } else if (qName.equals("Content-MD5")) {
     if (!currentText.toString().trim().equals(""))
       currentContentMD5 = CryptoStreams.base64(currentText.toString().trim());
   } else if (qName.equals("Content-Type")) {
     currentContentType = currentText.toString().trim();
   } else if (qName.equals("Content-Encoding")) {
     currentContentEncoding = currentText.toString().trim();
     if (currentContentEncoding.equals("")) currentContentEncoding = null;
   } else if (qName.equals("Content-Language")) {
     currentContentLanguage = currentText.toString().trim();
     if (currentContentLanguage.equals("")) currentContentLanguage = null;
   }
   currentText = new StringBuilder();
 }