标记S3存储桶时的MalformedXML

时间:2015-05-29 04:16:35

标签: java amazon-s3

我正在尝试使用AWS Java API向S3存储桶添加一组新标记,但我收到的错误是这样的:

3p

这是我写的代码(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>

我自己甚至没有使用XML,错误对于实际出错的情况无益。发生了什么事?

2 个答案:

答案 0 :(得分:2)

Java API和REST API之间存在小的不匹配。看看PUT Bucket Tag request。它没有明确说明,但暗示您每List<TagSet> tags = amazonS3.getBucketTaggingConfiguration(bucketName).getAllTagSets(); tags.add(new TagSet(newTags)); s3Service.setBucketTaggingConfiguration(bucketName, new BucketTaggingConfiguration(tags)); TagSet集合只能有一个Tagging。但是,BucketTaggingConfiguration允许使用TagSets列表。

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

答案 1 :(得分:1)

好的终于弄明白了,但这里是我的代码,我是如何在S3存储桶上放置多个标签的。虽然代码暗示我可以添加多个tagSets,但如果我这样做,它似乎会失败并出现上述错误。我刚用mu

创建了一个TagSet
int ip_addr = Some integer

printf("ip address = %g", ip_addr);