标记 S3 存储桶时出现 MalformedXML
MalformedXML when tagging an S3 bucket
我正在尝试使用 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。没有明确说明,但暗示每个 Tagging
集合只能有一个 TagSet
。但是,BucketTaggingConfiguration 允许 TagSet 列表。
不要添加新的 TagSet,而是从配置中的第一个 TagSet 中获取 Map<String, String>
,将您的标签添加到该地图,然后从中创建一个新的 TagSet。将 BucketTaggingConfiguration 视为仅允许 TagSet 的单项列表。
好的,终于弄明白了,但这是我的代码,用于说明如何在 S3 存储桶上放置多个标签。虽然代码暗示我可以添加多个 tagSet,但如果我这样做似乎会失败并出现上述错误。我刚刚用 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);
}
}
我正在尝试使用 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。没有明确说明,但暗示每个 Tagging
集合只能有一个 TagSet
。但是,BucketTaggingConfiguration 允许 TagSet 列表。
不要添加新的 TagSet,而是从配置中的第一个 TagSet 中获取 Map<String, String>
,将您的标签添加到该地图,然后从中创建一个新的 TagSet。将 BucketTaggingConfiguration 视为仅允许 TagSet 的单项列表。
好的,终于弄明白了,但这是我的代码,用于说明如何在 S3 存储桶上放置多个标签。虽然代码暗示我可以添加多个 tagSet,但如果我这样做似乎会失败并出现上述错误。我刚刚用 mu
创建了一个 TagSetpublic 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);
}
}