in paimon-filesystems/paimon-s3-impl/src/main/java/com/amazonaws/services/s3/model/transform/XmlResponsesSaxParser.java [803:913]
protected void doEndElement(String uri, String name, String qName) {
if (atTopLevel()) {
if (name.equals("ListBucketResult")) {
/*
* S3 only includes the NextContinuationToken XML element if the
* request specified a delimiter, but for consistency we'd
* like to always give easy access to the next token if
* we're returning a list of results that's truncated.
*/
if (result.isTruncated() && result.getNextContinuationToken() == null) {
String nextContinuationToken = null;
if (!result.getObjectSummaries().isEmpty()) {
nextContinuationToken =
result.getObjectSummaries()
.get(result.getObjectSummaries().size() - 1)
.getKey();
} else {
log.error(
"S3 response indicates truncated results, "
+ "but contains no object summaries.");
}
result.setNextContinuationToken(nextContinuationToken);
}
}
} else if (in("ListBucketResult")) {
if (name.equals("Name")) {
result.setBucketName(getText());
if (log.isDebugEnabled()) {
log.debug("Examining listing for bucket: " + result.getBucketName());
}
} else if (name.equals("Prefix")) {
result.setPrefix(
decodeIfSpecified(
checkForEmptyString(getText()), shouldSDKDecodeResponse));
} else if (name.equals("MaxKeys")) {
result.setMaxKeys(parseInt(getText()));
} else if (name.equals("NextContinuationToken")) {
result.setNextContinuationToken(getText());
} else if (name.equals("ContinuationToken")) {
result.setContinuationToken(getText());
} else if (name.equals("StartAfter")) {
result.setStartAfter(decodeIfSpecified(getText(), shouldSDKDecodeResponse));
} else if (name.equals("KeyCount")) {
result.setKeyCount(parseInt(getText()));
} else if (name.equals("Delimiter")) {
result.setDelimiter(
decodeIfSpecified(
checkForEmptyString(getText()), shouldSDKDecodeResponse));
} else if (name.equals("EncodingType")) {
result.setEncodingType(checkForEmptyString(getText()));
} else if (name.equals("IsTruncated")) {
String isTruncatedStr = StringUtils.lowerCase(getText());
if (isTruncatedStr.startsWith("false")) {
result.setTruncated(false);
} else if (isTruncatedStr.startsWith("true")) {
result.setTruncated(true);
} else {
throw new IllegalStateException(
"Invalid value for IsTruncated field: " + isTruncatedStr);
}
} else if (name.equals("Contents")) {
result.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")) {
result.getCommonPrefixes()
.add(decodeIfSpecified(getText(), shouldSDKDecodeResponse));
}
}
}