@Override public ObjectListing listObjects(ListObjectsRequest listObjectsRequest) throws SdkClientException, AmazonServiceException { listObjectsRequest = beforeClientExecution(listObjectsRequest); rejectNull(listObjectsRequest.getBucketName(), "The bucket name parameter must be specified when listing objects in a bucket"); /** * This flag shows whether we need to url decode S3 key names. This flag is enabled * only when the customers don't explicitly call {@link ListObjectsRequest#setEncodingType(String)}, * otherwise, it will be disabled for maintaining backwards compatibility. */ final boolean shouldSDKDecodeResponse = listObjectsRequest.getEncodingType() == null; Request<ListObjectsRequest> request = createRequest(listObjectsRequest.getBucketName(), null, listObjectsRequest, HttpMethodName.GET); request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "ListObjects"); addParameterIfNotNull(request, "prefix", listObjectsRequest.getPrefix()); addParameterIfNotNull(request, "marker", listObjectsRequest.getMarker()); addParameterIfNotNull(request, "delimiter", listObjectsRequest.getDelimiter()); if (listObjectsRequest.getMaxKeys() != null && listObjectsRequest.getMaxKeys().intValue() >= 0) request.addParameter("max-keys", listObjectsRequest.getMaxKeys().toString()); request.addParameter("encoding-type", shouldSDKDecodeResponse ? Constants.URL_ENCODING : listObjectsRequest.getEncodingType()); populateRequesterPaysHeader(request, listObjectsRequest.isRequesterPays()); return invoke(request, new Unmarshallers.ListObjectsUnmarshaller(shouldSDKDecodeResponse), listObjectsRequest.getBucketName(), null); }
@Test public void testUsesBatchSizeForMaxKeys() throws Exception { s3Objects.withBatchSize(12).iterator().hasNext(); ArgumentCaptor<ListObjectsRequest> listCaptor = ArgumentCaptor .forClass(ListObjectsRequest.class); verify(s3).listObjects(listCaptor.capture()); assertEquals((Integer) 12, listCaptor.getValue().getMaxKeys()); }
@Test public void testCallsListObjects() throws Exception { s3Objects.iterator().hasNext(); ArgumentCaptor<ListObjectsRequest> listCaptor = ArgumentCaptor .forClass(ListObjectsRequest.class); verify(s3).listObjects(listCaptor.capture()); assertEquals(s3Objects.getBucketName(), listCaptor.getValue().getBucketName()); assertEquals(s3Objects.getPrefix(), listCaptor.getValue().getPrefix()); assertNull(listCaptor.getValue().getMaxKeys()); }
@Override public ObjectListing listObjects(ListObjectsRequest listObjectsRequest) throws AmazonClientException, AmazonServiceException { assertParameterNotNull(listObjectsRequest.getBucketName(), "The bucket name parameter must be specified when listing objects in a bucket"); /** * This flag shows whether we need to url decode S3 key names. This flag * is enabled only when the customers don't explicitly call * {@link ListObjectsRequest#setEncodingType(String)}, otherwise, it * will be disabled for maintaining backwards compatibility. */ final boolean shouldSDKDecodeResponse = Constants.URL_ENCODING .equals(listObjectsRequest.getEncodingType()); // if the url is encoded, the prefix also has to be encoded. final Request<ListObjectsRequest> request = createRequest( listObjectsRequest.getBucketName(), null, listObjectsRequest, HttpMethodName.GET); addParameterIfNotNull(request, "prefix", listObjectsRequest.getPrefix()); addParameterIfNotNull(request, "delimiter", listObjectsRequest.getDelimiter()); addParameterIfNotNull(request, "marker", listObjectsRequest.getMarker()); addParameterIfNotNull(request, "encoding-type", listObjectsRequest.getEncodingType()); populateRequesterPaysHeader(request, listObjectsRequest.isRequesterPays()); if (listObjectsRequest.getMaxKeys() != null && listObjectsRequest.getMaxKeys().intValue() >= 0) { request.addParameter("max-keys", listObjectsRequest.getMaxKeys().toString()); } return invoke(request, new Unmarshallers.ListObjectsUnmarshaller(shouldSDKDecodeResponse), listObjectsRequest.getBucketName(), null); }
@Override public ObjectListing listObjects(ListObjectsRequest listObjectsRequest) throws AmazonClientException, AmazonServiceException { assertParameterNotNull(listObjectsRequest.getBucketName(), "The bucket name parameter must be specified when listing objects in a bucket"); /** * This flag shows whether we need to url decode S3 key names. This flag * is enabled only when the customers don't explicitly call * {@link ListObjectsRequest#setEncodingType(String)}, otherwise, it * will be disabled for maintaining backwards compatibility. */ final boolean shouldSDKDecodeResponse = Constants.URL_ENCODING .equals(listObjectsRequest.getEncodingType()); // if the url is encoded, the prefix also has to be encoded. final Request<ListObjectsRequest> request = createRequest( listObjectsRequest.getBucketName(), null, listObjectsRequest, HttpMethodName.GET); addParameterIfNotNull(request, "prefix", listObjectsRequest.getPrefix()); addParameterIfNotNull(request, "delimiter", listObjectsRequest.getDelimiter()); addParameterIfNotNull(request, "marker", listObjectsRequest.getMarker()); addParameterIfNotNull(request, "encoding-type", listObjectsRequest.getEncodingType()); populateRequesterPaysHeader(request, listObjectsRequest.isRequesterPays()); if (listObjectsRequest.getMaxKeys() != null && listObjectsRequest.getMaxKeys().intValue() >= 0) { request.addParameter("max-keys", listObjectsRequest.getMaxKeys().toString()); } return invoke(request, new Unmarshallers.ListObjectsUnmarshaller(shouldSDKDecodeResponse), listObjectsRequest.getBucketName(), null); }
@Override public ObjectListing listObjects(ListObjectsRequest listObjectsRequest) throws SdkClientException, AmazonServiceException { listObjectsRequest = beforeClientExecution(listObjectsRequest); rejectNull(listObjectsRequest.getBucketName(), "The bucket name parameter must be specified when listing objects in a bucket"); /** * This flag shows whether we need to url decode S3 key names. This flag is enabled * only when the customers don't explicitly call {@link ListObjectsRequest#setEncodingType(String)}, * otherwise, it will be disabled for maintaining backwards compatibility. */ final boolean shouldSDKDecodeResponse = listObjectsRequest.getEncodingType() == null; Request<ListObjectsRequest> request = createRequest(listObjectsRequest.getBucketName(), null, listObjectsRequest, HttpMethodName.GET); addParameterIfNotNull(request, "prefix", listObjectsRequest.getPrefix()); addParameterIfNotNull(request, "marker", listObjectsRequest.getMarker()); addParameterIfNotNull(request, "delimiter", listObjectsRequest.getDelimiter()); if (listObjectsRequest.getMaxKeys() != null && listObjectsRequest.getMaxKeys().intValue() >= 0) request.addParameter("max-keys", listObjectsRequest.getMaxKeys().toString()); request.addParameter("encoding-type", shouldSDKDecodeResponse ? Constants.URL_ENCODING : listObjectsRequest.getEncodingType()); populateRequesterPaysHeader(request, listObjectsRequest.isRequesterPays()); return invoke(request, new Unmarshallers.ListObjectsUnmarshaller(shouldSDKDecodeResponse), listObjectsRequest.getBucketName(), null); }
for (int i = 0; i < req.getMaxKeys() && i < files.size(); i++) { S3ObjectSummary summary = new S3ObjectSummary(); String key = key(files.get(i)); listing.setMaxKeys(req.getMaxKeys()); listing.setTruncated(files.size() > req.getMaxKeys());