static private DatabaseClientImpl newClientImpl(String host, int port, String user, String password, Authentication type, SSLContext context, SSLHostnameVerifier verifier) { logger.debug("Creating new database client for server at "+host+":"+port); JerseyServices services = new JerseyServices(); services.connect(host, port, user, password, type, context, verifier); if (clientConfigurator != null) { ((HttpClientConfigurator) clientConfigurator).configure( services.getClientImplementation() ); } return new DatabaseClientImpl(services); }
private MultivaluedMap<String, String> convertParams( RequestParameters params) { if (params == null || params.size() == 0) return null; MultivaluedMap<String, String> requestParams = new MultivaluedMapImpl(); for (Map.Entry<String, List<String>> entry : params.entrySet()) { addEncodedParam(requestParams, entry.getKey(), entry.getValue()); } return requestParams; }
boolean hasStreamingPart = addParts(multiPart, reqlog, input); WebResource.Builder builder = makePostBuilder( path, params, Boundary.addBoundary(MultiPartMediaTypes.MULTIPART_MIXED_TYPE)); response = doPost(builder, multiPart, hasStreamingPart); status = response.getClientResponseStatus(); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ checkStatus(response, status, "apply", "resource", path, ResponseStatus.OK_OR_CREATED_OR_NO_CONTENT); return makeResults(reqlog, "apply", "resource", response);
FailedRequestException { WebResource.Builder builder = makeGetBuilder(path, params, null); response = doGet(builder.accept(multipartType)); status = response.getClientResponseStatus(); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ checkStatus(response, status, "read", "resource", path, ResponseStatus.OK_OR_NO_CONTENT); return makeResults(reqlog, "read", "resource", response);
if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ + type, extractErrorFields(response)); if (status != ClientResponse.Status.NO_CONTENT) throw new FailedRequestException("delete failed: " + status.getReasonPhrase(), extractErrorFields(response)); response.close(); logRequest(reqlog, "deleted %s values", type);
logRequest( reqlog, "writing %s document from %s transaction with %s metadata categories and content", (uri != null) ? uri : "new", (transactionId != null) ? transactionId : "no", stringJoin(categories, ", ", "no")); makeDocumentParams(uri, categories, transactionId, extraParams, true); WebResource.Builder builder = makeDocumentResource(docParams).getRequestBuilder(); builder = addTransactionCookie(builder, transactionId); if (uri != null) { builder = addVersionHeader(desc, builder, "If-Match"); boolean hasStreamingPart = addParts(multiPart, reqlog, new String[] { metadataMimetype, contentMimetype }, new AbstractWriteHandle[] { metadataHandle, contentHandle }); if (isFirstRequest() && hasStreamingPart) { nextDelay = makeFirstRequest(retry); if (nextDelay != 0) continue; if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest();
MultivaluedMap<String, String> docParams = makeDocumentParams(uri, categories, transactionId, extraParams, true); docParams.add("format", metadataFormat); WebResource.Builder builder = makeDocumentResource(docParams).getRequestBuilder(); builder = addTransactionCookie(builder, transactionId); builder = addVersionHeader(desc, builder, "If-None-Match"); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ throw new ResourceNotFoundException( "Could not read non-existent document", extractErrorFields(response)); if (status == ClientResponse.Status.FORBIDDEN) throw new ForbiddenUserException( "User is not allowed to read documents", extractErrorFields(response)); if (status == ClientResponse.Status.NOT_MODIFIED) { response.close(); + status.getReasonPhrase(), extractErrorFields(response));
WebResource.Builder builder = makeDocumentResource( makeDocumentParams(uri, categories, transactionId, extraParams)) .accept(mimetype); builder = addTransactionCookie(builder, transactionId); builder = addVersionHeader(desc, builder, "If-None-Match"); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ throw new ResourceNotFoundException( "Could not read non-existent document", extractErrorFields(response)); if (status == ClientResponse.Status.FORBIDDEN) throw new ForbiddenUserException( "User is not allowed to read documents", extractErrorFields(response)); if (status == ClientResponse.Status.NOT_MODIFIED) { response.close(); && status != ClientResponse.Status.PARTIAL_CONTENT) throw new FailedRequestException("read failed: " + status.getReasonPhrase(), extractErrorFields(response));
boolean hasStreamingPart = addParts(multiPart, reqlog, input); WebResource.Builder builder = makePutBuilder(path, params, multiPart, outputMimetype); response = doPut(builder, multiPart, hasStreamingPart); status = response.getClientResponseStatus(); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ checkStatus(response, status, "write", "resource", path, ResponseStatus.OK_OR_CREATED_OR_NO_CONTENT); outputBase.receiveContent(makeResult(reqlog, "write", "resource", response, as)); } else {
addEncodedParam(params, "directory", directory); addEncodedParam(params, "collection", queryDef.getCollections()); addEncodedParam(params, "options", optionsName); addEncodedParam(params, "q", text); ValueLocator loc = entry.getKey(); if (loc instanceof KeyLocator) { addEncodedParam(params, "key", ((KeyLocator) loc).getKey()); } else { ElementLocator eloc = (ElementLocator) loc; addEncodedParam(params, "value", entry.getValue()); builder = addTransactionCookie(builder, params.getFirst("txid")); response = doGet(builder); } else if (queryDef instanceof KeyValueQueryDefinition) { response = doGet(builder); } else if (queryDef instanceof StructuredQueryDefinition) { response = doPost(reqlog, builder, structure, true); } else if (queryDef instanceof DeleteQueryDefinition) { response = doGet(builder); } else if (queryDef instanceof RawQueryDefinition) { response = doPost(reqlog, builder, baseHandle.sendContent(), true); } else { throw new UnsupportedOperationException("Cannot search with "
WebResource webResource = makeDocumentResource(makeDocumentParams(uri, categories, transactionId, null)); WebResource.Builder builder = addVersionHeader(desc, webResource.getRequestBuilder(), "If-Match"); builder = addTransactionCookie(builder, transactionId); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ FailedRequest failure = extractErrorFields(response); if (failure.getMessageCode().equals("RESTAPI-CONTENTNOVERSION")) throw new FailedRequestException( FailedRequest failure = extractErrorFields(response); if (failure.getMessageCode().equals("RESTAPI-CONTENTWRONGVERSION")) throw new FailedRequestException( + status.getReasonPhrase(), extractErrorFields(response)); logRequest(reqlog, "deleted %s document", uri);
ClientResponse.Status... expectedStatuses) { if (key != null) { logRequest(reqlog, "writing %s value with %s key and %s mime type", type, key, (mimetype != null) ? mimetype : null); } else { logRequest(reqlog, "writing %s values with %s mime type", type, (mimetype != null) ? mimetype : null); MultivaluedMap<String, String> requestParams = convertParams(extraParams); boolean isStreaming = (isFirstRequest() || handle == null) ? isStreaming(sentValue) : false; if (isFirstRequest() && !isResendable && isStreaming) { nextDelay = makeFirstRequest(retry); if (nextDelay != 0) continue; if (isFirstRequest()) setFirstRequest(false); checkFirstRequest(); throw new ResourceNotResendableException( "Cannot retry request for " + connectPath); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException(
Class as = outputBase.receiveAs(); WebResource.Builder builder = makeGetBuilder(path, params, mimetype); response = doGet(builder); status = response.getClientResponseStatus(); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ " seconds after "+retry+" retries"); checkStatus(response, status, "read", "resource", path, ResponseStatus.OK_OR_NO_CONTENT); outputBase.receiveContent(makeResult(reqlog, "read", "resource", response, as)); } else {
as = outputBase.receiveAs(); WebResource.Builder builder = makeDeleteBuilder(reqlog, path, params, outputMimeType); response = doDelete(builder); status = response.getClientResponseStatus(); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ checkStatus(response, status, "delete", "resource", path, ResponseStatus.OK_OR_NO_CONTENT); outputBase.receiveContent(makeResult(reqlog, "delete", "resource", response, as)); } else {
@Override public void commitTransaction(String transactionId) throws ForbiddenUserException, FailedRequestException { completeTransaction(transactionId, "commit"); }
private <W extends AbstractWriteHandle> boolean addParts( MultiPart multiPart, RequestLogger reqlog, W[] input) { return addParts(multiPart, reqlog, null, input); }
@Override public void connect(String host, int port, String user, String password, Authentication authenType, SSLContext context, SSLHostnameVerifier verifier) { X509HostnameVerifier x509Verifier = null; if (verifier == null) { if (context != null) x509Verifier = SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER; } else if (verifier == SSLHostnameVerifier.ANY) x509Verifier = SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; else if (verifier == SSLHostnameVerifier.COMMON) x509Verifier = SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER; else if (verifier == SSLHostnameVerifier.STRICT) x509Verifier = SSLSocketFactory.STRICT_HOSTNAME_VERIFIER; else if (context != null) x509Verifier = new HostnameVerifierAdapter(verifier); else throw new IllegalArgumentException( "Null SSLContent but non-null SSLHostnameVerifier for client"); connect(host, port, user, password, authenType, context, x509Verifier); }
private int makeFirstRequest(int retry) { ClientResponse response = connection.path("ping").head(); int statusCode = response.getClientResponseStatus().getStatusCode(); if (statusCode != ClientResponse.Status.SERVICE_UNAVAILABLE.getStatusCode()) { response.close(); return 0; } MultivaluedMap<String, String> responseHeaders = response.getHeaders(); response.close(); String retryAfterRaw = responseHeaders.getFirst("Retry-After"); int retryAfter = (retryAfterRaw != null) ? Integer.valueOf(retryAfterRaw) : -1; return Math.max(retryAfter, calculateDelay(randRetry, retry)); }
if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRequestException( "Service unavailable and maximum retry period elapsed: "+ + type, extractErrorFields(response)); if (status == ClientResponse.Status.NOT_FOUND) throw new ResourceNotFoundException(type + " not found for delete", extractErrorFields(response)); if (status != ClientResponse.Status.NO_CONTENT) throw new FailedRequestException("delete failed: " + status.getReasonPhrase(), extractErrorFields(response)); logRequest(reqlog, "deleted %s value with %s key", type, key);
logRequest( reqlog, "writing %s document from %s transaction with %s mime type and %s metadata categories", (transactionId != null) ? transactionId : "no", (mimetype != null) ? mimetype : "no", stringJoin(categories, ", ", "no")); WebResource webResource = makeDocumentResource( makeDocumentParams( uri, categories, transactionId, extraParams, isOnContent )); builder = addTransactionCookie(builder, transactionId); if (uri != null) { builder = addVersionHeader(desc, builder, "If-Match"); if (isFirstRequest() && !isResendable && isStreaming(value)) { nextDelay = makeFirstRequest(retry); if (nextDelay != 0) continue; if (isFirstRequest()) setFirstRequest(false); checkFirstRequest(); throw new ResourceNotResendableException( "Cannot retry request for " +