Skip to content

Commit 3f6fa2c

Browse files
authored
Merge pull request #288 from RachelTucker/filter_empty_metadata
Filter empty metadata
2 parents e6bdaa1 + 3bf8a9b commit 3f6fa2c

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/PutObjectRequest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@
2020
import java.io.InputStream;
2121
import java.nio.channels.SeekableByteChannel;
2222
import com.spectralogic.ds3client.utils.SeekableByteChannelInputStream;
23+
import static com.spectralogic.ds3client.utils.Guard.isStringNullOrEmpty;
24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
2326
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
2427
import java.util.UUID;
2528
import com.google.common.net.UrlEscapers;
2629
import com.spectralogic.ds3client.models.ChecksumType;
2730
public class PutObjectRequest extends AbstractRequest {
2831

32+
final static private Logger LOG = LoggerFactory.getLogger(PutObjectRequest.class);
33+
2934
// Variables
3035
public final static String AMZ_META_HEADER = "x-amz-meta-";
3136

@@ -157,6 +162,10 @@ public ChecksumType.Type getChecksumType() {
157162

158163

159164
public PutObjectRequest withMetaData(final String key, final String value) {
165+
if (isStringNullOrEmpty(value)) {
166+
LOG.warn("Key has not been added to metadata because value was null or empty: " + key);
167+
return this;
168+
}
160169
final String modifiedKey;
161170
if (!key.toLowerCase().startsWith(AMZ_META_HEADER)){
162171
modifiedKey = AMZ_META_HEADER + key;

ds3-sdk/src/test/java/com/spectralogic/ds3client/Ds3Client_Test.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,39 @@ public void createObjectWithMetadata() throws IOException, SignatureException, U
388388
.putObject(por);
389389
}
390390

391+
@Test
392+
public void createObjectWithNullAndEmptyMetadata() throws IOException, SignatureException, URISyntaxException {
393+
final String jobIdString = "a4a586a1-cb80-4441-84e2-48974e982d51";
394+
final Map<String, String> queryParams = new HashMap<>();
395+
queryParams.put("job", jobIdString);
396+
queryParams.put("offset", Long.toString(0));
397+
398+
final Path resourcePath = ResourceUtils.loadFileResource("LoremIpsumTwice.txt");
399+
final byte[] fileBytes = Files.readAllBytes(resourcePath);
400+
final String output = new String(fileBytes, Charset.forName("UTF-8"));
401+
final FileChannel channel = FileChannel.open(resourcePath, StandardOpenOption.READ);
402+
403+
final PutObjectRequest por = new PutObjectRequest(
404+
"bucketName",
405+
"objectName",
406+
channel,
407+
UUID.fromString(jobIdString),
408+
0,
409+
fileBytes.length);
410+
411+
final Multimap<String, String> expectedRequestHeaders = TreeMultimap.create();
412+
expectedRequestHeaders.put("Naming-Convention", "s3"); //default from AbstractRequest
413+
414+
por.withMetaData("test1", null);
415+
por.withMetaData("test2", "");
416+
417+
MockNetwork
418+
.expecting(HttpVerb.PUT, "/bucketName/objectName", queryParams, expectedRequestHeaders, output)
419+
.returning(200, "")
420+
.asClient()
421+
.putObject(por);
422+
}
423+
391424
@Test
392425
public void headObjectWithMetadata() throws IOException, SignatureException {
393426

0 commit comments

Comments
 (0)