2015-05-29 4 views
2

Я пытаюсь добавить новый набор тегов к S3 ведро с использованием API AWS Java, но я получаю сообщение об ошибке, как это: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= 

Это код Я написал (newTags является Map<String, String>):

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

Я даже не используя XML сам, и ошибка не приносит никакой пользы, как к тому, что на самом деле происходит неправильно. Что происходит?

ответ

2

Существует небольшое несоответствие между API Java и REST API. Посмотрите на PUT Bucket Tag request. Это явно не указано, но подразумевается, что у вас может быть только одна TagSet за коллекцию Tagging. Однако BucketTaggingConfiguration позволяет использовать список TagSet.

Вместо добавления нового TagSet, получите Map<String, String> из первого набора TagSet в конфигурации, добавьте теги к этой карте, а затем создайте новый TagSet. Обработайте BucketTaggingConfiguration, как если бы он разрешал только список элементов TagSet с одним элементом.

1

Хорошо, наконец, понял это, но вот мой код, как я получил несколько тегов, размещенных на ведре S3. Несмотря на то, что код подразумевает, что я могу добавить несколько наборов тегов, но, похоже, с ошибкой выше, если я это сделаю. Я только что создал один TagSet с mu

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); 
    } 

} 
Смежные вопросы