/** Parses HTTP headers into a {@link BlobMetadata} object. */ private BlobMetadata parseMetadataHeaders(String blobId, EmoResponse response) { // The server always sets X-BV-Length. It's similar to Content-Length but proxies etc. shouldn't mess with it. String lengthString = response.getFirstHeader(X_BV_PREFIX + "Length"); checkState(lengthString != null, "BlobStore request is missing expected required X-BV-Length header."); long length = Long.parseLong(lengthString); // Extract signature hash values. String md5 = base64ToHex(response.getFirstHeader(HttpHeaders.CONTENT_MD5)); String sha1 = stripQuotes(response.getFirstHeader(HttpHeaders.ETAG)); // Extract attribute map specified when the blob was first uploaded. Map<String, String> attributes = Maps.newHashMap(); for (Map.Entry<String, List<String>> entry : response.getHeaders()) { if (entry.getKey().startsWith(X_BVA_PREFIX)) { attributes.put(entry.getKey().substring(X_BVA_PREFIX.length()), entry.getValue().get(0)); } } return new DefaultBlobMetadata(blobId, response.getLastModified(), length, md5, sha1, attributes); }
/** Parses HTTP headers into a {@link BlobMetadata} object. */ private BlobMetadata parseMetadataHeaders(String blobId, EmoResponse response) { // The server always sets X-BV-Length. It's similar to Content-Length but proxies etc. shouldn't mess with it. String lengthString = response.getFirstHeader(X_BV_PREFIX + "Length"); checkState(lengthString != null, "BlobStore request is missing expected required X-BV-Length header."); long length = Long.parseLong(lengthString); // Extract signature hash values. String md5 = base64ToHex(response.getFirstHeader(HttpHeaders.CONTENT_MD5)); String sha1 = stripQuotes(response.getFirstHeader(HttpHeaders.ETAG)); // Extract attribute map specified when the blob was first uploaded. Map<String, String> attributes = Maps.newHashMap(); for (Map.Entry<String, List<String>> entry : response.getHeaders()) { if (entry.getKey().startsWith(X_BVA_PREFIX)) { attributes.put(entry.getKey().substring(X_BVA_PREFIX.length()), entry.getValue().get(0)); } } return new DefaultBlobMetadata(blobId, response.getLastModified(), length, md5, sha1, attributes); }
@Override public boolean getTableExists(String apiKey, String table) { checkNotNull(table, "table"); URI uri = _dataStore.clone() .segment("_table", table) .build(); EmoResponse response = _client.resource(uri) .accept(MediaType.APPLICATION_JSON_TYPE) .header(ApiKeyRequest.AUTHENTICATION_HEADER, apiKey) .head(); if (response.getStatus() == Response.Status.OK.getStatusCode()) { return true; } else if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode() && UnknownTableException.class.getName().equals(response.getFirstHeader("X-BV-Exception"))) { return false; } else { throw convertException(new EmoClientException(response)); } }
@Override public boolean getTableExists(String apiKey, String table) { checkNotNull(table, "table"); URI uri = _blobStore.clone() .segment("_table", table) .build(); EmoResponse response = _client.resource(uri) .accept(MediaType.APPLICATION_JSON_TYPE) .header(ApiKeyRequest.AUTHENTICATION_HEADER, apiKey) .head(); if (response.getStatus() == Response.Status.OK.getStatusCode()) { return true; } else if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode() && UnknownTableException.class.getName().equals(response.getFirstHeader("X-BV-Exception"))) { return false; } else { throw convertException(new EmoClientException(response)); } }
@Override public boolean getTableExists(String apiKey, String table) { checkNotNull(table, "table"); URI uri = _blobStore.clone() .segment("_table", table) .build(); EmoResponse response = _client.resource(uri) .accept(MediaType.APPLICATION_JSON_TYPE) .header(ApiKeyRequest.AUTHENTICATION_HEADER, apiKey) .head(); if (response.getStatus() == Response.Status.OK.getStatusCode()) { return true; } else if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode() && UnknownTableException.class.getName().equals(response.getFirstHeader("X-BV-Exception"))) { return false; } else { throw convertException(new EmoClientException(response)); } }
@Override public boolean getTableExists(String apiKey, String table) { checkNotNull(table, "table"); URI uri = _dataStore.clone() .segment("_table", table) .build(); EmoResponse response = _client.resource(uri) .accept(MediaType.APPLICATION_JSON_TYPE) .header(ApiKeyRequest.AUTHENTICATION_HEADER, apiKey) .head(); if (response.getStatus() == Response.Status.OK.getStatusCode()) { return true; } else if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode() && UnknownTableException.class.getName().equals(response.getFirstHeader("X-BV-Exception"))) { return false; } else { throw convertException(new EmoClientException(response)); } }
protected RuntimeException convertException(EmoClientException e) { EmoResponse response = e.getResponse(); String exceptionType = response.getFirstHeader("X-BV-Exception"); if (response.getStatus() == Response.Status.BAD_REQUEST.getStatusCode() && IllegalArgumentException.class.getName().equals(exceptionType)) { return new IllegalArgumentException(response.getEntity(String.class), e); } else if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode() && UnknownMoveException.class.getName().equals(exceptionType)) { return response.getEntity(UnknownMoveException.class); } else if (response.getStatus() == Response.Status.FORBIDDEN.getStatusCode() && UnauthorizedException.class.getName().equals(exceptionType)) { if (response.hasEntity()) { return (RuntimeException) response.getEntity(UnauthorizedException.class).initCause(e); } else { return (RuntimeException) new UnauthorizedException().initCause(e); } } else if (response.getStatus() == Response.Status.SERVICE_UNAVAILABLE.getStatusCode() && ServiceUnavailableException.class.getName().equals(exceptionType)) { if (response.hasEntity()) { return (RuntimeException) response.getEntity(ServiceUnavailableException.class).initCause(e); } else { return (RuntimeException) new ServiceUnavailableException().initCause(e); } } return e; }
@Override public BlobMetadata getMetadata(String apiKey, String table, String blobId) throws BlobNotFoundException { checkNotNull(table, "table"); checkNotNull(blobId, "blobId"); try { EmoResponse response = _client.resource(toUri(table, blobId)) .header(ApiKeyRequest.AUTHENTICATION_HEADER, apiKey) .head(); if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode() && BlobNotFoundException.class.getName().equals(response.getFirstHeader("X-BV-Exception"))) { throw new BlobNotFoundException(blobId, new EmoClientException(response)); } else if (response.getStatus() != Response.Status.OK.getStatusCode()) { throw new EmoClientException(response); } return parseMetadataHeaders(blobId, response); } catch (EmoClientException e) { throw convertException(e); } }
@Override public BlobMetadata getMetadata(String apiKey, String table, String blobId) throws BlobNotFoundException { checkNotNull(table, "table"); checkNotNull(blobId, "blobId"); try { EmoResponse response = _client.resource(toUri(table, blobId)) .header(ApiKeyRequest.AUTHENTICATION_HEADER, apiKey) .head(); if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode() && BlobNotFoundException.class.getName().equals(response.getFirstHeader("X-BV-Exception"))) { throw new BlobNotFoundException(blobId, new EmoClientException(response)); } else if (response.getStatus() != Response.Status.OK.getStatusCode()) { throw new EmoClientException(response); } return parseMetadataHeaders(blobId, response); } catch (EmoClientException e) { throw convertException(e); } }
@Override public PollResult poll(String apiKey, @PartitionKey String subscription, Duration claimTtl, int limit) { checkNotNull(subscription, "subscription"); checkNotNull(claimTtl, "claimTtl"); URI uri = getPollUriBuilder(subscription, claimTtl, limit).build(); EmoResponse response = _client.resource(uri) .queryParam("includeTags", "true") .accept(MediaType.APPLICATION_JSON_TYPE) .header(ApiKeyRequest.AUTHENTICATION_HEADER, apiKey) .get(EmoResponse.class); if (response.getStatus() != Response.Status.OK.getStatusCode()) { throw convertException(new EmoClientException(response)); } Iterator<Event> events = response.getEntity(new TypeReference<Iterator<Event>>() {}); boolean moreEvents; String databusEmpty = response.getFirstHeader(POLL_DATABUS_EMPTY_HEADER); if (databusEmpty != null) { // Use the header value from the server to determine if the databus subscription is empty moreEvents = !Boolean.parseBoolean(databusEmpty); } else { // Must be polling an older version of Emo which did not include this header. Infer whether the queue // is empty based on whether any results were returned. moreEvents = events.hasNext(); } return new PollResult(events, limit, moreEvents); }
@SuppressWarnings ("ThrowableResultOfMethodCallIgnored") private RuntimeException convertException(EmoClientException e) { EmoResponse response = e.getResponse(); String exceptionType = response.getFirstHeader("X-BV-Exception");
String contentRange = response.getFirstHeader(HttpHeaders.CONTENT_RANGE); if (status == Response.Status.OK.getStatusCode()) { checkState(contentRange == null, "Unexpected HTTP 200 response with Content-Range header.");
String contentRange = response.getFirstHeader(HttpHeaders.CONTENT_RANGE); if (status == Response.Status.OK.getStatusCode()) { checkState(contentRange == null, "Unexpected HTTP 200 response with Content-Range header.");
@SuppressWarnings("ThrowableResultOfMethodCallIgnored") private RuntimeException convertException(EmoClientException e) { EmoResponse response = e.getResponse(); String exceptionType = response.getFirstHeader("X-BV-Exception");
@SuppressWarnings("ThrowableResultOfMethodCallIgnored") private RuntimeException convertException(EmoClientException e) { EmoResponse response = e.getResponse(); String exceptionType = response.getFirstHeader("X-BV-Exception");
@SuppressWarnings ("ThrowableResultOfMethodCallIgnored") private RuntimeException convertException(EmoClientException e) { EmoResponse response = e.getResponse(); String exceptionType = response.getFirstHeader("X-BV-Exception");
@SuppressWarnings ("ThrowableResultOfMethodCallIgnored") private RuntimeException convertException(EmoClientException e) { EmoResponse response = e.getResponse(); String exceptionType = response.getFirstHeader("X-BV-Exception");
@SuppressWarnings("ThrowableResultOfMethodCallIgnored") private RuntimeException convertException(EmoClientException e) { EmoResponse response = e.getResponse(); String exceptionType = response.getFirstHeader("X-BV-Exception");