我正在尝试使用AWS Java API向S3存储桶中添加一组新的标签,但出现如下错误:

com.amazonaws.services.s3.model.AmazonS3Exception: The XML you provided was not well-formed or did not validate against our published schema (Service: Amazon S3; Status Code: 400; Error Code: MalformedXML; Request ID: 5B3401CBDB133A88), S3 Extended Request ID: z1EDhMH5vN7o/9Tk93K5R1gWmmqUr49WjEz2rovD9HRCGJ54yHBfoTuUURvnpoizlCUK3Fy9qbY=


这是我编写的代码(newTagsMap<String, String>):

List<TagSet> tags = amazonS3.getBucketTaggingConfiguration(bucketName).getAllTagSets();
tags.add(new TagSet(newTags));
s3Service.setBucketTaggingConfiguration(bucketName, new BucketTaggingConfiguration(tags));


我什至没有亲自使用XML,而且该错误对于实际出了什么问题没有帮助。怎么了?

最佳答案

Java API和REST API之间存在很小的不匹配。看看PUT Bucket Tag request。它没有明确说明,但这意味着每个TagSet集合只能有一个Tagging。但是,BucketTaggingConfiguration允许列出TagSet。

无需添加新的TagSet,而是从配置中的第一个TagSet获取Map<String, String>,将标签添加到该映射,然后从中创建一个新的TagSet。将BucketTaggingConfiguration视为仅允许TagSet的单项列表。

关于java - 标记S3存储桶时格式不正确的XML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30521046/

10-11 08:46