通过 Jets3t 读取 aws-s3 的 LastModifiedDate 在 Java-8 中失败但在 Java-7 中成功

Reading LastModifiedDate for aws-s3 via Jets3t fails in Java-8 but succeeds in Java-7

JetS3t 无法在 Java 8 中获取现有 S3 object 的 LastModifiedDate,但在 Java 7 中成功。

package JsTest

import org.jets3t.service.S3Service;
import org.jets3t.service.ServiceException;
import org.jets3t.service.impl.rest.httpclient.RestS3Service;
import org.jets3t.service.model.S3Object;
import org.jets3t.service.security.AWSCredentials;

public class Jetsettester {

public static void main(String[] args) {
    String awsAccessKey = "<access_key>";
    String awsSecretKey = "<secret>";
    AWSCredentials awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey);
    S3Service s3Service = new RestS3Service(awsCredentials);
    try {
        S3Object objectDetailsOnly = (S3Object) s3Service.getObjectDetails("ENTER_BUCKET_NAME", "EXISTING_SAMPLE_KEY.TXT");
        Object md = objectDetailsOnly.getMetadata("Last-Modified"); // Object type is 'String' in Java 8 - and 'Date' in Java 7
        Date dt = objectDetailsOnly.getLastModifiedDate(); // Hence, raises ClassCastException only in Java 8 . In Java 7 - it is correct Date class
    } catch (ServiceException e) {
        e.printStackTrace();
    }
}
}
  1. 确保 Amazon S3 中存在存储桶和密钥。将它与 AWS 秘密和密钥一起添加到下面的代码中
  2. 运行 上面的代码使用 Java 7 它运行成功。更具体地说,Object md的return类型是String类型,return类型的Date dt是Date。
  3. 重复 Java 8 它因 ClassCastException 而失败。更具体地说,JetS3t 是 returning 字符串日期 - 而不是日期 object。

我认为有两个 header 值 - 一个用于 'Last-Modified',另一个用于小写 'last-modified',但我不知道的不止这些。有人可以帮忙吗?

这是 JetS3t 0.9.3 中的错误。我提出了这个错误,James Murty 在去年发布时慷慨地修复了它 0.9.4 将它张贴在这里以防其他人遇到它。 详情 bitbucket bug link for jets3t