Skip to content

Commit 7d66a5c

Browse files
Xu, VictoriaXu, Victoria
authored andcommitted
Fix for SDK-555, encode returned object keys for list objects request
1 parent 4a2883b commit 7d66a5c

File tree

3 files changed

+42
-32
lines changed

3 files changed

+42
-32
lines changed

src/main/java/com/emc/object/s3/bean/ListObjectsResult.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public class ListObjectsResult implements UrlEncodable {
4545
private String marker;
4646
private String nextMarker;
4747
private boolean truncated;
48+
private boolean encoded = false;
4849
private List<S3Object> objects = new ArrayList<S3Object>();
4950
private List<CommonPrefix> _commonPrefixes = new ArrayList<CommonPrefix>();
5051

@@ -135,6 +136,18 @@ public void setTruncated(boolean truncated) {
135136

136137
@XmlElement(name = "Contents")
137138
public List<S3Object> getObjects() {
139+
if (encodingType == EncodingType.url && !encoded) {
140+
List<S3Object> encodedObjects = new ArrayList<S3Object>();
141+
if(objects != null && objects.size() != 0) {
142+
for(S3Object object: objects) {
143+
S3Object encodedObject = object;
144+
encodedObject.setKey(RestUtil.urlEncode(object.getKey()));
145+
encodedObjects.add(encodedObject);
146+
}
147+
encoded = true;
148+
return encodedObjects;
149+
}
150+
}
138151
return objects;
139152
}
140153

src/test/java/com/emc/object/s3/AbstractS3ClientTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ protected void createBucket(String bucketName) throws Exception {
7979
protected void cleanUpBucket(String bucketName) throws Exception {
8080
if (client != null && client.bucketExists(bucketName)) {
8181
if (client.getBucketVersioning(bucketName).getStatus() != null) {
82-
for (AbstractVersion version : client.listVersions(new ListVersionsRequest(bucketName).withEncodingType(EncodingType.url)).getVersions()) {
82+
for (AbstractVersion version : client.listVersions(new ListVersionsRequest(bucketName)).getVersions()) {
8383
client.deleteVersion(bucketName, version.getKey(), version.getVersionId());
8484
}
8585
} else {
86-
for (S3Object object : client.listObjects(new ListObjectsRequest(bucketName).withEncodingType(EncodingType.url)).getObjects()) {
86+
for (S3Object object : client.listObjects(new ListObjectsRequest(bucketName)).getObjects()) {
8787
client.deleteObject(bucketName, object.getKey());
8888
}
8989
}

src/test/java/com/emc/object/s3/S3JerseyClientTest.java

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -430,21 +430,31 @@ public void testListObjectsPagingWithEncodedDelim() {
430430

431431
ListObjectsResult result = client.listObjects(new ListObjectsRequest(getTestBucket()).withPrefix(prefix)
432432
.withDelimiter(delim).withMaxKeys(3).withEncodingType(EncodingType.url));
433-
Assert.assertNotNull("ListObjectsResult was null and should NOT be", result);
434-
Assert.assertEquals("The correct number of objects were NOT returned", 3, result.getObjects().size());
435-
Assert.assertTrue(result.isTruncated());
436-
Assert.assertEquals("/", result.getDelimiter());
437-
Assert.assertEquals(prefix, result.getPrefix());
438-
Assert.assertEquals(prefix + key + 1, result.getObjects().get(0).getKey());
439-
440-
// get next page
441-
result = client.listMoreObjects(result);
442-
Assert.assertNotNull("ListObjectsResult was null and should NOT be", result);
443-
Assert.assertEquals("The correct number of objects were NOT returned", 2, result.getObjects().size());
444-
Assert.assertFalse(result.isTruncated());
445-
Assert.assertEquals("/", result.getDelimiter());
446-
Assert.assertEquals(prefix, result.getPrefix());
447-
Assert.assertEquals(prefix + key + 4, result.getObjects().get(0).getKey());
433+
try {
434+
Assert.assertNotNull("ListObjectsResult was null and should NOT be", result);
435+
Assert.assertEquals("The correct number of objects were NOT returned", 3, result.getObjects().size());
436+
Assert.assertTrue(result.isTruncated());
437+
Assert.assertEquals("/", result.getDelimiter());
438+
Assert.assertEquals(prefix, result.getPrefix());
439+
Assert.assertEquals(RestUtil.urlEncode(prefix + key) + 1, result.getObjects().get(0).getKey());
440+
441+
// get next page
442+
result = client.listMoreObjects(result);
443+
Assert.assertNotNull("ListObjectsResult was null and should NOT be", result);
444+
Assert.assertEquals("The correct number of objects were NOT returned", 2, result.getObjects().size());
445+
Assert.assertFalse(result.isTruncated());
446+
Assert.assertEquals("/", result.getDelimiter());
447+
Assert.assertEquals(prefix, result.getPrefix());
448+
Assert.assertEquals(RestUtil.urlEncode(prefix + key) + 4, result.getObjects().get(0).getKey());
449+
}
450+
finally {
451+
client.deleteObject(getTestBucket(), prefix + key + 1);
452+
client.deleteObject(getTestBucket(), prefix + key + 2);
453+
client.deleteObject(getTestBucket(), prefix + key + 3);
454+
client.deleteObject(getTestBucket(), prefix + key + 4);
455+
client.deleteObject(getTestBucket(), prefix + key + 5);
456+
client.deleteBucket(getTestBucket());
457+
}
448458
}
449459

450460
@Test
@@ -513,6 +523,7 @@ public void testListObjectsPagingWithPrefix() {
513523
@Test
514524
public void testListObjectsWithEncoding() {
515525
String key = "foo\u001do", content = "Hello List!";
526+
String urlEncodedKey = RestUtil.urlEncode(key);
516527
client.putObject(getTestBucket(), key, content, null);
517528

518529
try {
@@ -525,7 +536,7 @@ public void testListObjectsWithEncoding() {
525536
Assert.assertEquals(1, resultObjects.size());
526537

527538
S3Object object = resultObjects.get(0);
528-
Assert.assertEquals(key, object.getKey());
539+
Assert.assertEquals(urlEncodedKey, object.getKey());
529540

530541
} finally {
531542
client.deleteObject(getTestBucket(), key);
@@ -572,8 +583,6 @@ public void testListAndReadVersions() throws Exception {
572583
Assert.assertEquals("b13f87dd03c70083eb3e98ca37372361", ((Version) version).getRawETag());
573584
Assert.assertEquals(content, client.readObject(getTestBucket(), key, version.getVersionId(), String.class));
574585
}
575-
// Delete all the versions
576-
client.deleteVersion(getTestBucket(), key, version.getVersionId());
577586
}
578587
}
579588

@@ -606,11 +615,6 @@ public void testListVersionsPaging() {
606615
} while (result.isTruncated());
607616

608617
assertForListVersionsPaging(versions.size(), requestCount);
609-
610-
for (AbstractVersion version : versions) {
611-
// Delete all the versions
612-
client.deleteVersion(getTestBucket(), version.getKey(), version.getVersionId());
613-
}
614618
}
615619

616620
protected void assertForListVersionsPaging(int size, int requestCount)
@@ -645,13 +649,6 @@ public void testListVersionsPagingPrefixDelim() throws Exception {
645649
Assert.assertEquals(1, result.getCommonPrefixes().size());
646650
Assert.assertEquals("prefix/prefix2/", result.getCommonPrefixes().get(0));
647651
Assert.assertFalse(result.isTruncated());
648-
649-
request = new ListVersionsRequest(getTestBucket());
650-
result = client.listVersions(request);
651-
for (AbstractVersion version : result.getVersions()) {
652-
// Delete all the versions
653-
client.deleteVersion(getTestBucket(), version.getKey(), version.getVersionId());
654-
}
655652
}
656653

657654
protected void createTestObjects(String prefix, int numObjects) {

0 commit comments

Comments
 (0)