我正在尝试使用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=
这是我编写的代码(
newTags
是Map<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/