2015-05-29 58 views
2

我想要一套新的标记添加到使用AWS的Java API的S3桶,但我得到象这样的错误时:MalformedXML标记的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自己,错误是无益的,什么是实际发生错误。发生什么事?

回答

2

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

不是添加一个新的TagSet,而是从配置中的第一个TagSet获取Map<String, String>,将标签添加到该映射中,然后从中创建一个新的TagSet。对待BucketTaggingConfiguration,就像它只允许TagSets的单个项目列表一样。

1

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

public void TagS3(String bucketName, Map<String,String> tags){ 


    if(0 < tags.size()){ 
     TagSet ts = new TagSet(tags); 
     BucketTaggingConfiguration btconfig = new BucketTaggingConfiguration(); 
     btconfig.withTagSets(ts); 
     SetBucketTaggingConfigurationRequest tgRq = new SetBucketTaggingConfigurationRequest(bucketName, btconfig); 
     s3client.setBucketTaggingConfiguration(tgRq); 
    } 

}