in paimon-filesystems/paimon-s3-impl/src/main/java/com/amazonaws/services/s3/model/transform/XmlResponsesSaxParser.java [651:767]
protected void doEndElement(String uri, String name, String qName) {
if (atTopLevel()) {
if (name.equals("ListBucketResult")) {
/*
* S3 only includes the NextMarker XML element if the
* request specified a delimiter, but for consistency we'd
* like to always give easy access to the next marker if
* we're returning a list of results that's truncated.
*/
if (objectListing.isTruncated() && objectListing.getNextMarker() == null) {
String nextMarker = null;
if (!objectListing.getObjectSummaries().isEmpty()) {
nextMarker =
objectListing
.getObjectSummaries()
.get(objectListing.getObjectSummaries().size() - 1)
.getKey();
} else if (!objectListing.getCommonPrefixes().isEmpty()) {
nextMarker =
objectListing
.getCommonPrefixes()
.get(objectListing.getCommonPrefixes().size() - 1);
} else {
log.error(
"S3 response indicates truncated results, "
+ "but contains no object summaries or "
+ "common prefixes.");
}
objectListing.setNextMarker(nextMarker);
}
}
} else if (in("ListBucketResult")) {
if (name.equals("Name")) {
objectListing.setBucketName(getText());
if (log.isDebugEnabled()) {
log.debug("Examining listing for bucket: " + objectListing.getBucketName());
}
} else if (name.equals("Prefix")) {
objectListing.setPrefix(
decodeIfSpecified(
checkForEmptyString(getText()), shouldSDKDecodeResponse));
} else if (name.equals("Marker")) {
objectListing.setMarker(
decodeIfSpecified(
checkForEmptyString(getText()), shouldSDKDecodeResponse));
} else if (name.equals("NextMarker")) {
objectListing.setNextMarker(
decodeIfSpecified(getText(), shouldSDKDecodeResponse));
} else if (name.equals("MaxKeys")) {
objectListing.setMaxKeys(parseInt(getText()));
} else if (name.equals("Delimiter")) {
objectListing.setDelimiter(
decodeIfSpecified(
checkForEmptyString(getText()), shouldSDKDecodeResponse));
} else if (name.equals("EncodingType")) {
objectListing.setEncodingType(
shouldSDKDecodeResponse ? null : checkForEmptyString(getText()));
} else if (name.equals("IsTruncated")) {
String isTruncatedStr = StringUtils.lowerCase(getText());
if (isTruncatedStr.startsWith("false")) {
objectListing.setTruncated(false);
} else if (isTruncatedStr.startsWith("true")) {
objectListing.setTruncated(true);
} else {
throw new IllegalStateException(
"Invalid value for IsTruncated field: " + isTruncatedStr);
}
} else if (name.equals("Contents")) {
objectListing.getObjectSummaries().add(currentObject);
currentObject = null;
}
} else if (in("ListBucketResult", "Contents")) {
if (name.equals("Key")) {
lastKey = getText();
currentObject.setKey(decodeIfSpecified(lastKey, shouldSDKDecodeResponse));
} else if (name.equals("LastModified")) {
currentObject.setLastModified(ServiceUtils.parseIso8601Date(getText()));
} else if (name.equals("ETag")) {
currentObject.setETag(ServiceUtils.removeQuotes(getText()));
} else if (name.equals("Size")) {
currentObject.setSize(parseLong(getText()));
} else if (name.equals("StorageClass")) {
currentObject.setStorageClass(getText());
} else if (name.equals("Owner")) {
currentObject.setOwner(currentOwner);
currentOwner = null;
}
} else if (in("ListBucketResult", "Contents", "Owner")) {
if (name.equals("ID")) {
currentOwner.setId(getText());
} else if (name.equals("DisplayName")) {
currentOwner.setDisplayName(getText());
}
} else if (in("ListBucketResult", "CommonPrefixes")) {
if (name.equals("Prefix")) {
objectListing
.getCommonPrefixes()
.add(decodeIfSpecified(getText(), shouldSDKDecodeResponse));
}
}
}