This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new d7a823f06bb HDDS-14208. Create constants for query parameter names
(#9525)
d7a823f06bb is described below
commit d7a823f06bbaec78334e87187767b98de513302a
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri Dec 19 08:13:42 2025 +0100
HDDS-14208. Create constants for query parameter names (#9525)
---
.../hadoop/ozone/s3/endpoint/BucketEndpoint.java | 51 +++++-----
.../hadoop/ozone/s3/endpoint/ObjectEndpoint.java | 107 +++++++++++----------
.../ozone/s3/endpoint/ObjectEndpointStreaming.java | 3 +-
.../org/apache/hadoop/ozone/s3/util/S3Consts.java | 26 +++++
4 files changed, 112 insertions(+), 75 deletions(-)
diff --git
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
index 439aa27d1d0..db5d12e52f6 100644
---
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
+++
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
@@ -75,6 +75,7 @@
import org.apache.hadoop.ozone.s3.exception.OS3Exception;
import org.apache.hadoop.ozone.s3.exception.S3ErrorTable;
import org.apache.hadoop.ozone.s3.util.ContinueToken;
+import org.apache.hadoop.ozone.s3.util.S3Consts.QueryParams;
import org.apache.hadoop.ozone.s3.util.S3StorageType;
import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
import org.apache.hadoop.util.Time;
@@ -88,6 +89,8 @@
@Path("/{bucket}")
public class BucketEndpoint extends EndpointBase {
+ private static final String BUCKET = "bucket";
+
private static final Logger LOG =
LoggerFactory.getLogger(BucketEndpoint.class);
@@ -103,19 +106,20 @@ public class BucketEndpoint extends EndpointBase {
@GET
@SuppressWarnings({"parameternumber", "methodlength"})
public Response get(
- @PathParam("bucket") String bucketName,
- @QueryParam("delimiter") String delimiter,
- @QueryParam("encoding-type") String encodingType,
- @QueryParam("marker") String marker,
- @DefaultValue("1000") @QueryParam("max-keys") int maxKeys,
- @QueryParam("prefix") String prefix,
- @QueryParam("continuation-token") String continueToken,
- @QueryParam("start-after") String startAfter,
- @QueryParam("uploads") String uploads,
- @QueryParam("acl") String aclMarker,
- @QueryParam("key-marker") String keyMarker,
- @QueryParam("upload-id-marker") String uploadIdMarker,
- @DefaultValue("1000") @QueryParam("max-uploads") int maxUploads) throws
OS3Exception, IOException {
+ @PathParam(BUCKET) String bucketName,
+ @QueryParam(QueryParams.DELIMITER) String delimiter,
+ @QueryParam(QueryParams.ENCODING_TYPE) String encodingType,
+ @QueryParam(QueryParams.MARKER) String marker,
+ @DefaultValue("1000") @QueryParam(QueryParams.MAX_KEYS) int maxKeys,
+ @QueryParam(QueryParams.PREFIX) String prefix,
+ @QueryParam(QueryParams.CONTINUATION_TOKEN) String continueToken,
+ @QueryParam(QueryParams.START_AFTER) String startAfter,
+ @QueryParam(QueryParams.UPLOADS) String uploads,
+ @QueryParam(QueryParams.ACL) String aclMarker,
+ @QueryParam(QueryParams.KEY_MARKER) String keyMarker,
+ @QueryParam(QueryParams.UPLOAD_ID_MARKER) String uploadIdMarker,
+ @DefaultValue("1000") @QueryParam(QueryParams.MAX_UPLOADS) int maxUploads
+ ) throws OS3Exception, IOException {
long startNanos = Time.monotonicNowNanos();
S3GAction s3GAction = S3GAction.GET_BUCKET;
PerformanceStringBuilder perf = new PerformanceStringBuilder();
@@ -301,9 +305,11 @@ private int validateMaxKeys(int maxKeys) throws
OS3Exception {
}
@PUT
- public Response put(@PathParam("bucket") String bucketName,
- @QueryParam("acl") String aclMarker,
- InputStream body) throws IOException, OS3Exception {
+ public Response put(
+ @PathParam(BUCKET) String bucketName,
+ @QueryParam(QueryParams.ACL) String aclMarker,
+ InputStream body
+ ) throws IOException, OS3Exception {
long startNanos = Time.monotonicNowNanos();
S3GAction s3GAction = S3GAction.CREATE_BUCKET;
@@ -397,7 +403,7 @@ public Response listMultipartUploads(
* for more details.
*/
@HEAD
- public Response head(@PathParam("bucket") String bucketName)
+ public Response head(@PathParam(BUCKET) String bucketName)
throws OS3Exception, IOException {
long startNanos = Time.monotonicNowNanos();
S3GAction s3GAction = S3GAction.HEAD_BUCKET;
@@ -420,7 +426,7 @@ public Response head(@PathParam("bucket") String bucketName)
* for more details.
*/
@DELETE
- public Response delete(@PathParam("bucket") String bucketName)
+ public Response delete(@PathParam(BUCKET) String bucketName)
throws IOException, OS3Exception {
long startNanos = Time.monotonicNowNanos();
S3GAction s3GAction = S3GAction.DELETE_BUCKET;
@@ -464,10 +470,11 @@ public Response delete(@PathParam("bucket") String
bucketName)
*/
@POST
@Produces(MediaType.APPLICATION_XML)
- public MultiDeleteResponse multiDelete(@PathParam("bucket") String
bucketName,
- @QueryParam("delete") String delete,
- MultiDeleteRequest request)
- throws OS3Exception, IOException {
+ public MultiDeleteResponse multiDelete(
+ @PathParam(BUCKET) String bucketName,
+ @QueryParam(QueryParams.DELETE) String delete,
+ MultiDeleteRequest request
+ ) throws OS3Exception, IOException {
S3GAction s3GAction = S3GAction.MULTI_DELETE;
OzoneBucket bucket = getBucket(bucketName);
diff --git
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java
index 3154ad74d01..c6a2b653909 100644
---
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java
+++
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java
@@ -17,9 +17,6 @@
package org.apache.hadoop.ozone.s3.endpoint;
-import static javax.ws.rs.core.HttpHeaders.CONTENT_LENGTH;
-import static javax.ws.rs.core.HttpHeaders.ETAG;
-import static javax.ws.rs.core.HttpHeaders.LAST_MODIFIED;
import static
org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationType.EC;
import static
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_CHUNK_SIZE_DEFAULT;
import static
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_CHUNK_SIZE_KEY;
@@ -94,6 +91,7 @@
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
@@ -135,6 +133,7 @@
import org.apache.hadoop.ozone.s3.util.RangeHeader;
import org.apache.hadoop.ozone.s3.util.RangeHeaderParserUtil;
import org.apache.hadoop.ozone.s3.util.S3Consts;
+import org.apache.hadoop.ozone.s3.util.S3Consts.QueryParams;
import org.apache.hadoop.ozone.s3.util.S3StorageType;
import org.apache.hadoop.ozone.s3.util.S3Utils;
import org.apache.hadoop.ozone.web.utils.OzoneUtils;
@@ -149,6 +148,9 @@
@Path("/{bucket}/{path:.+}")
public class ObjectEndpoint extends EndpointBase {
+ private static final String BUCKET = "bucket";
+ private static final String PATH = "path";
+
private static final Logger LOG =
LoggerFactory.getLogger(ObjectEndpoint.class);
@@ -174,12 +176,12 @@ public class ObjectEndpoint extends EndpointBase {
public ObjectEndpoint() {
overrideQueryParameter = ImmutableMap.<String, String>builder()
- .put("Content-Type", "response-content-type")
- .put("Content-Language", "response-content-language")
- .put("Expires", "response-expires")
- .put("Cache-Control", "response-cache-control")
- .put("Content-Disposition", "response-content-disposition")
- .put("Content-Encoding", "response-content-encoding")
+ .put(HttpHeaders.CONTENT_TYPE, "response-content-type")
+ .put(HttpHeaders.CONTENT_LANGUAGE, "response-content-language")
+ .put(HttpHeaders.EXPIRES, "response-expires")
+ .put(HttpHeaders.CACHE_CONTROL, "response-cache-control")
+ .put(HttpHeaders.CONTENT_DISPOSITION, "response-content-disposition")
+ .put(HttpHeaders.CONTENT_ENCODING, "response-content-encoding")
.build();
}
@@ -210,13 +212,13 @@ public void init() {
@SuppressWarnings({"checkstyle:MethodLength", "checkstyle:ParameterNumber"})
@PUT
public Response put(
- @PathParam("bucket") String bucketName,
- @PathParam("path") String keyPath,
- @HeaderParam("Content-Length") long length,
- @QueryParam("partNumber") int partNumber,
- @QueryParam("uploadId") @DefaultValue("") String uploadID,
- @QueryParam("tagging") String taggingMarker,
- @QueryParam("acl") String aclMarker,
+ @PathParam(BUCKET) String bucketName,
+ @PathParam(PATH) String keyPath,
+ @HeaderParam(HttpHeaders.CONTENT_LENGTH) long length,
+ @QueryParam(QueryParams.PART_NUMBER) int partNumber,
+ @QueryParam(QueryParams.UPLOAD_ID) @DefaultValue("") String uploadID,
+ @QueryParam(QueryParams.TAGGING) String taggingMarker,
+ @QueryParam(QueryParams.ACL) String aclMarker,
final InputStream body) throws IOException, OS3Exception {
long startNanos = Time.monotonicNowNanos();
S3GAction s3GAction = S3GAction.CREATE_KEY;
@@ -328,13 +330,13 @@ public Response put(
eTag = DatatypeConverter.printHexBinary(
digestInputStream.getMessageDigest().digest())
.toLowerCase();
- output.getMetadata().put(ETAG, eTag);
+ output.getMetadata().put(OzoneConsts.ETAG, eTag);
}
}
getMetrics().incPutKeySuccessLength(putLength);
perf.appendSizeBytes(putLength);
return Response.ok()
- .header(ETAG, wrapInQuotes(eTag))
+ .header(HttpHeaders.ETAG, wrapInQuotes(eTag))
.status(HttpStatus.SC_OK)
.build();
} catch (OMException ex) {
@@ -404,13 +406,13 @@ public Response put(
@SuppressWarnings({"checkstyle:MethodLength", "checkstyle:ParameterNumber"})
@GET
public Response get(
- @PathParam("bucket") String bucketName,
- @PathParam("path") String keyPath,
- @QueryParam("partNumber") int partNumber,
- @QueryParam("uploadId") String uploadId,
- @QueryParam("max-parts") @DefaultValue("1000") int maxParts,
- @QueryParam("part-number-marker") String partNumberMarker,
- @QueryParam("tagging") String taggingMarker)
+ @PathParam(BUCKET) String bucketName,
+ @PathParam(PATH) String keyPath,
+ @QueryParam(QueryParams.PART_NUMBER) int partNumber,
+ @QueryParam(QueryParams.UPLOAD_ID) String uploadId,
+ @QueryParam(QueryParams.MAX_PARTS) @DefaultValue("1000") int maxParts,
+ @QueryParam(QueryParams.PART_NUMBER_MARKER) String partNumberMarker,
+ @QueryParam(QueryParams.TAGGING) String taggingMarker)
throws IOException, OS3Exception {
long startNanos = Time.monotonicNowNanos();
S3GAction s3GAction = S3GAction.GET_KEY;
@@ -471,7 +473,7 @@ public Response get(
};
responseBuilder = Response
.ok(output)
- .header(CONTENT_LENGTH, keyDetails.getDataSize());
+ .header(HttpHeaders.CONTENT_LENGTH, keyDetails.getDataSize());
} else {
@@ -495,7 +497,7 @@ public Response get(
responseBuilder = Response
.status(Status.PARTIAL_CONTENT)
.entity(output)
- .header(CONTENT_LENGTH, copyLength);
+ .header(HttpHeaders.CONTENT_LENGTH, copyLength);
String contentRangeVal = RANGE_HEADER_SUPPORTED_UNIT + " " +
rangeHeader.getStartOffset() + "-" + rangeHeader.getEndOffset() +
@@ -506,9 +508,9 @@ public Response get(
responseBuilder
.header(ACCEPT_RANGE_HEADER, RANGE_HEADER_SUPPORTED_UNIT);
- String eTag = keyDetails.getMetadata().get(ETAG);
+ String eTag = keyDetails.getMetadata().get(OzoneConsts.ETAG);
if (eTag != null) {
- responseBuilder.header(ETAG, wrapInQuotes(eTag));
+ responseBuilder.header(HttpHeaders.ETAG, wrapInQuotes(eTag));
String partsCount = extractPartsCount(eTag);
if (partsCount != null) {
responseBuilder.header(MP_PARTS_COUNT, partsCount);
@@ -575,7 +577,7 @@ static void addLastModifiedDate(
.atZone(ZoneId.of(OzoneConsts.OZONE_TIME_ZONE));
responseBuilder
- .header(LAST_MODIFIED,
+ .header(HttpHeaders.LAST_MODIFIED,
RFC1123Util.FORMAT.format(lastModificationTime));
}
@@ -598,8 +600,8 @@ static void addTagCountIfAny(
*/
@HEAD
public Response head(
- @PathParam("bucket") String bucketName,
- @PathParam("path") String keyPath) throws IOException, OS3Exception {
+ @PathParam(BUCKET) String bucketName,
+ @PathParam(PATH) String keyPath) throws IOException, OS3Exception {
long startNanos = Time.monotonicNowNanos();
S3GAction s3GAction = S3GAction.HEAD_KEY;
@@ -636,16 +638,16 @@ public Response head(
S3StorageType.fromReplicationConfig(key.getReplicationConfig());
ResponseBuilder response = Response.ok().status(HttpStatus.SC_OK)
- .header("Content-Length", key.getDataSize())
- .header("Content-Type", "binary/octet-stream")
+ .header(HttpHeaders.CONTENT_LENGTH, key.getDataSize())
+ .header(HttpHeaders.CONTENT_TYPE, "binary/octet-stream")
.header(STORAGE_CLASS_HEADER, s3StorageType.toString());
- String eTag = key.getMetadata().get(ETAG);
+ String eTag = key.getMetadata().get(OzoneConsts.ETAG);
if (eTag != null) {
// Should not return ETag header if the ETag is not set
// doing so will result in "null" string being returned instead
// which breaks some AWS SDK implementation
- response.header(ETAG, wrapInQuotes(eTag));
+ response.header(HttpHeaders.ETAG, wrapInQuotes(eTag));
String partsCount = extractPartsCount(eTag);
if (partsCount != null) {
response.header(MP_PARTS_COUNT, partsCount);
@@ -717,10 +719,10 @@ private Response abortMultipartUpload(OzoneVolume volume,
String bucket,
@DELETE
@SuppressWarnings("emptyblock")
public Response delete(
- @PathParam("bucket") String bucketName,
- @PathParam("path") String keyPath,
- @QueryParam("uploadId") @DefaultValue("") String uploadId,
- @QueryParam("tagging") String taggingMarker) throws
+ @PathParam(BUCKET) String bucketName,
+ @PathParam(PATH) String keyPath,
+ @QueryParam(QueryParams.UPLOAD_ID) @DefaultValue("") String uploadId,
+ @QueryParam(QueryParams.TAGGING) String taggingMarker) throws
IOException, OS3Exception {
long startNanos = Time.monotonicNowNanos();
S3GAction s3GAction = S3GAction.DELETE_KEY;
@@ -794,8 +796,8 @@ public Response delete(
@Produces(MediaType.APPLICATION_XML)
@Consumes(HeaderPreprocessor.MULTIPART_UPLOAD_MARKER)
public Response initializeMultipartUpload(
- @PathParam("bucket") String bucket,
- @PathParam("path") String key
+ @PathParam(BUCKET) String bucket,
+ @PathParam(PATH) String key
)
throws IOException, OS3Exception {
long startNanos = Time.monotonicNowNanos();
@@ -858,9 +860,10 @@ private ReplicationConfig getReplicationConfig(OzoneBucket
ozoneBucket,
*/
@POST
@Produces(MediaType.APPLICATION_XML)
- public Response completeMultipartUpload(@PathParam("bucket") String bucket,
- @PathParam("path") String key,
- @QueryParam("uploadId") @DefaultValue("") String uploadID,
+ public Response completeMultipartUpload(
+ @PathParam(BUCKET) String bucket,
+ @PathParam(PATH) String key,
+ @QueryParam(QueryParams.UPLOAD_ID) @DefaultValue("") String uploadID,
CompleteMultipartUploadRequest multipartUploadRequest)
throws IOException, OS3Exception {
long startNanos = Time.monotonicNowNanos();
@@ -1025,9 +1028,9 @@ private Response createMultipartKey(OzoneVolume volume,
OzoneBucket ozoneBucket,
new byte[getIOBufferSize(length)]);
ozoneOutputStream.getMetadata()
.putAll(sourceKeyDetails.getMetadata());
- String raw = ozoneOutputStream.getMetadata().get(ETAG);
+ String raw = ozoneOutputStream.getMetadata().get(OzoneConsts.ETAG);
if (raw != null) {
- ozoneOutputStream.getMetadata().put(ETAG, stripQuotes(raw));
+ ozoneOutputStream.getMetadata().put(OzoneConsts.ETAG,
stripQuotes(raw));
}
outputStream = ozoneOutputStream;
}
@@ -1045,7 +1048,7 @@ private Response createMultipartKey(OzoneVolume volume,
OzoneBucket ozoneBucket,
new byte[getIOBufferSize(length)]);
byte[] digest = digestInputStream.getMessageDigest().digest();
ozoneOutputStream.getMetadata()
- .put(ETAG,
DatatypeConverter.printHexBinary(digest).toLowerCase());
+ .put(OzoneConsts.ETAG,
DatatypeConverter.printHexBinary(digest).toLowerCase());
outputStream = ozoneOutputStream;
}
getMetrics().incPutKeySuccessLength(putLength);
@@ -1069,7 +1072,7 @@ private Response createMultipartKey(OzoneVolume volume,
OzoneBucket ozoneBucket,
return Response.ok(new CopyPartResult(eTag)).build();
} else {
getMetrics().updateCreateMultipartKeySuccessStats(startNanos);
- return Response.ok().header(ETAG, eTag).build();
+ return Response.ok().header(HttpHeaders.ETAG, eTag).build();
}
} catch (OMException ex) {
@@ -1189,7 +1192,7 @@ void copy(OzoneVolume volume, DigestInputStream src, long
srcKeyLen,
perf.appendMetaLatencyNanos(metadataLatencyNs);
copyLength = IOUtils.copyLarge(src, dest, 0, srcKeyLen, new
byte[getIOBufferSize(srcKeyLen)]);
String eTag =
DatatypeConverter.printHexBinary(src.getMessageDigest().digest()).toLowerCase();
- dest.getMetadata().put(ETAG, eTag);
+ dest.getMetadata().put(OzoneConsts.ETAG, eTag);
}
}
getMetrics().incCopyObjectSuccessLength(copyLength);
@@ -1236,7 +1239,7 @@ private CopyObjectResponse copyObject(OzoneVolume volume,
// still does not support this just returning dummy response
// for now
CopyObjectResponse copyObjectResponse = new CopyObjectResponse();
-
copyObjectResponse.setETag(wrapInQuotes(sourceKeyDetails.getMetadata().get(ETAG)));
+
copyObjectResponse.setETag(wrapInQuotes(sourceKeyDetails.getMetadata().get(OzoneConsts.ETAG)));
copyObjectResponse.setLastModified(Instant.ofEpochMilli(
Time.now()));
return copyObjectResponse;
@@ -1291,7 +1294,7 @@ private CopyObjectResponse copyObject(OzoneVolume volume,
getMetrics().updateCopyObjectSuccessStats(startNanos);
CopyObjectResponse copyObjectResponse = new CopyObjectResponse();
-
copyObjectResponse.setETag(wrapInQuotes(destKeyDetails.getMetadata().get(ETAG)));
+
copyObjectResponse.setETag(wrapInQuotes(destKeyDetails.getMetadata().get(OzoneConsts.ETAG)));
copyObjectResponse.setLastModified(destKeyDetails.getModificationTime());
return copyObjectResponse;
} catch (OMException ex) {
diff --git
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpointStreaming.java
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpointStreaming.java
index 647aafe839c..186719c2b78 100644
---
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpointStreaming.java
+++
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpointStreaming.java
@@ -27,6 +27,7 @@
import java.nio.ByteBuffer;
import java.security.DigestInputStream;
import java.util.Map;
+import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import javax.xml.bind.DatatypeConverter;
import org.apache.commons.lang3.tuple.Pair;
@@ -191,7 +192,7 @@ public static Response createMultipartKey(OzoneBucket
ozoneBucket, String key,
throw ex;
}
return Response.ok()
- .header(OzoneConsts.ETAG, wrapInQuotes(eTag))
+ .header(HttpHeaders.ETAG, wrapInQuotes(eTag))
.build();
}
}
diff --git
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Consts.java
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Consts.java
index f4101375503..04038bb81ce 100644
---
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Consts.java
+++
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Consts.java
@@ -109,4 +109,30 @@ public enum CopyDirective {
REPLACE
}
+ /** Constants for query parameters. */
+ public static final class QueryParams {
+ public static final String ACL = "acl";
+ public static final String CONTINUATION_TOKEN = "continuation-token";
+ public static final String DELETE = "delete";
+ public static final String DELIMITER = "delimiter";
+ public static final String ENCODING_TYPE = "encoding-type";
+ public static final String KEY_MARKER = "key-marker";
+ public static final String MARKER = "marker";
+ public static final String MAX_KEYS = "max-keys";
+ public static final String MAX_PARTS = "max-parts";
+ public static final String MAX_UPLOADS = "max-uploads";
+ public static final String PART_NUMBER = "partNumber";
+ public static final String PART_NUMBER_MARKER = "part-number-marker";
+ public static final String PREFIX = "prefix";
+ public static final String START_AFTER = "start-after";
+ public static final String TAGGING = "tagging";
+ public static final String UPLOAD_ID = "uploadId";
+ public static final String UPLOAD_ID_MARKER = "upload-id-marker";
+ public static final String UPLOADS = "uploads";
+
+ private QueryParams() {
+ // no instances
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]