.setUri(uri); .setEntityStream(new ByteArrayInputStream(request.getContent())) .setContentType(request.getContentType().orElseThrow(() -> new IllegalStateException("If content is provided, Content-Type must also be specified"))); builder.execute(Request.Method.valueOf(request.getMethod().name())) .then(new Promise.TryConsumer<Response>() { @Override
@Override public Promise<Iterable<Transition>> getTransitions(final URI transitionsUri) { return callAndParse(client().newRequest(transitionsUri).get(), (ResponseHandler<Iterable<Transition>>) response -> { final JSONObject jsonObject = new JSONObject(response.getEntity()); if (jsonObject.has("transitions")) { return JsonParseUtil.parseJsonArray(jsonObject.getJSONArray("transitions"), transitionJsonParserV5); } else { final Collection<Transition> transitions = new ArrayList<>(jsonObject.length()); @SuppressWarnings("unchecked") final Iterator<String> iterator = jsonObject.keys(); while (iterator.hasNext()) { final String key = iterator.next(); try { final int id = Integer.parseInt(key); final Transition transition = transitionJsonParser.parse(jsonObject.getJSONObject(key), id); transitions.add(transition); } catch (JSONException e) { throw new RestClientException(e); } catch (NumberFormatException e) { throw new RestClientException( "Transition id should be an integer, but found [" + key + "]", e); } } return transitions; } } ); }
private Response getSyncHandlerResponse(String addonKey, URI callbackUri, String jsonEventData, Optional<String> authHeader) throws LifecycleCallbackException { try { Request.Builder request = httpClient.newRequest(callbackUri); request.setAttribute("purpose", "web-hook-notification"); request.setAttribute("pluginKey", addonKey); request.setContentType(MediaType.APPLICATION_JSON); request.setEntity(jsonEventData); if (authHeader.isPresent()) { request.setHeader(AUTHORIZATION_HEADER, authHeader.get()); } request.setHeader(HttpHeaderNames.ATLASSIAN_CONNECT_VERSION, getConnectPluginVersion()); return request.execute(Request.Method.POST).claim(); } catch (Exception e) { log.error("Error contacting remote application at " + callbackUri + " [" + e.getMessage() + "]", e); String message = "Error contacting remote application [" + e.getMessage() + "]"; Throwable cause = e.getCause(); if (cause instanceof UnknownHostException) { throw new LifecycleCallbackBadResponseException(message, "connect.install.error.remote.host.bad.domain", callbackUri.getHost()); } else if (cause instanceof SocketTimeoutException) { throw new LifecycleCallbackBadResponseException(message, "connect.install.error.remote.host.timeout", removeQuery(callbackUri)); } else if (cause instanceof SSLException) { throw new LifecycleCallbackBadResponseException(message, "connect.install.error.remote.host.ssl", removeQuery(callbackUri), cause.getMessage()); } throw new LifecycleCallbackException(message, "connect.remote.upm.install.exception"); } }
request = request.setAttributes(getAttributes(addonKey)); Optional<String> authHeaderValue = getAuthHeaderValue(authorizationGenerator, method, url, parameters); Map<String, String> allHeaders = getAllHeaders(headers, authHeaderValue); request = request.setHeaders(allHeaders); request.setContentType(contentType); if (ContentType.APPLICATION_FORM_URLENCODED.getMimeType().equals(contentType)) { InputStream form = IOUtils.toInputStream(UriBuilder.joinParameters(UriBuilderUtils.toListFormat(parameters))); request.setEntityStream(new SequenceInputStream(body, form)); } else { request.setEntityStream(body); .fail(new FailFunction(url)) .build(); return request.execute(METHOD_MAPPING.get(method)).transform(responseTransformation);
request = request.setAttributes(getAttributes(addonKey)); Optional<String> authHeaderValue = getAuthHeaderValue(authorizationGenerator, method, url, parameters); Map<String, String> allHeaders = getAllHeaders(headers, authHeaderValue); request = request.setHeaders(allHeaders); request.setContentType(contentType); if (ContentType.APPLICATION_FORM_URLENCODED.getMimeType().equals(contentType)) { InputStream form = IOUtils.toInputStream(UriBuilder.joinParameters(UriBuilderUtils.toListFormat(parameters))); request.setEntityStream(new SequenceInputStream(body, form)); } else { request.setEntityStream(body); .fail(new FailFunction(url)) .build(); return request.execute(METHOD_MAPPING.get(method)).transform(responseTransformation);
private Response getSyncHandlerResponse(String addonKey, URI callbackUri, String jsonEventData, Optional<String> authHeader) throws LifecycleCallbackException { try { Request.Builder request = httpClient.newRequest(callbackUri); request.setCacheDisabled(); request.setAttribute("purpose", "web-hook-notification"); request.setAttribute("pluginKey", addonKey); request.setContentType(MediaType.APPLICATION_JSON); request.setEntity(jsonEventData); if (authHeader.isPresent()) { request.setHeader(AUTHORIZATION_HEADER, authHeader.get()); } request.setHeader(HttpHeaderNames.ATLASSIAN_CONNECT_VERSION, getConnectPluginVersion()); return request.execute(Request.Method.POST).claim(); } catch (Exception e) { log.error("Error contacting remote application at " + callbackUri + " [" + e.getMessage() + "]", e); String message = "Error contacting remote application [" + e.getMessage() + "]"; Throwable cause = e.getCause(); if (cause instanceof UnknownHostException) { throw new LifecycleCallbackBadResponseException(message, "connect.install.error.remote.host.bad.domain", callbackUri.getHost()); } else if (cause instanceof SocketTimeoutException) { throw new LifecycleCallbackBadResponseException(message, "connect.install.error.remote.host.timeout", removeQuery(callbackUri)); } else if (cause instanceof SSLException) { throw new LifecycleCallbackBadResponseException(message, "connect.install.error.remote.host.ssl", removeQuery(callbackUri), cause.getMessage()); } throw new LifecycleCallbackException(message, "connect.remote.upm.install.exception"); } }
public Either<MarketplaceInstallationError, String> getDescriptorFromMarketplace(String addonKey) { try { Option<Addon> maybeAddon = MarketplaceClientFactory .createMarketplaceClient(URI.create(getMpacUrl())) .addons() .getByKey(addonKey, AddonQuery.builder().withVersion(true).hosting(Option.some(HostingType.CLOUD)).build()); if (maybeAddon.isEmpty()) { return Either.left(MarketplaceInstallationError.NOT_FOUND); } Option<AddonVersion> maybeVersion = maybeAddon.get().getVersion(); if (maybeVersion.isEmpty()) { return Either.left(MarketplaceInstallationError.NO_PUBLIC_VERSION_AVAILABLE); } URI descriptorUri = maybeVersion.get().getArtifactUri().get(); Request.Builder request = httpClient.newRequest(descriptorUri); String json = request.execute(Request.Method.GET).claim().getEntity(); return Either.right(json); } catch (Exception e) { log.error("Exception when retrieving add-on from Marketplace", e); return Either.left(MarketplaceInstallationError.COMMUNICATION_ERROR); } } }
private int getUrlStatusCode(String url) { return httpClient.newRequest(url).get().claim().getStatusCode(); } }
protected final <I, T> Promise<T> putAndParse(final URI uri, I entity, final JsonGenerator<I> jsonGenerator, final JsonObjectParser<T> parser) { final ResponsePromise responsePromise = client.newRequest(uri) .setEntity(toEntity(jsonGenerator, entity)) .put(); return callAndParse(responsePromise, parser); }
@Override public Promise<InputStream> getAttachment(URI attachmentUri) { return callAndParse(client().newRequest(attachmentUri).get(), Message::getEntityStream); }
public Request.Builder newRequest(String uri, String contentType, String entity) { final Request.Builder builder = new AuthenticatedRequestBuilder(); builder.setUri(URI.create(uri)); builder.setContentType(contentType); builder.setEntity(entity); return builder; }
protected final Promise<Void> post(final URI uri, final String entity) { final ResponsePromise responsePromise = client.newRequest(uri) .setEntity(entity) .setContentType(JSON_CONTENT_TYPE) .post(); return call(responsePromise); }
protected final <T> Promise<T> postAndParse(final URI uri, final JSONObject entity, final JsonObjectParser<T> parser) { final ResponsePromise responsePromise = client.newRequest(uri) .setEntity(entity.toString()) .setContentType(JSON_CONTENT_TYPE) .post(); return callAndParse(responsePromise, parser); }
@Override public void configure(Request.Builder builder) { builder.setHeader(AUTHORIZATION_HEADER, "Basic " + encodeCredentials()); }
private Promise<Void> postAttachments(final URI attachmentsUri, final MultipartEntityBuilder multipartEntityBuilder) { final ResponsePromise responsePromise = client() .newRequest(attachmentsUri) .setEntity(new MultiPartEntityBuilder(multipartEntityBuilder.build())) .setHeader("X-Atlassian-Token", "nocheck") .post(); return call(responsePromise); }
protected final <I, T> Promise<T> postAndParse(final URI uri, I entity, final JsonGenerator<I> jsonGenerator, final JsonObjectParser<T> parser) { final ResponsePromise responsePromise = client.newRequest(uri) .setEntity(toEntity(jsonGenerator, entity)) .post(); return callAndParse(responsePromise, parser); }
private DownloadResult<ResponsePromise> scheduleDownload(Language language, String baseUrl, String path) { URI uriToDownload = resolveUri(baseUrl, path); ResponsePromise responsePromise = httpClient .newRequest(uriToDownload) .setAccept(MediaType.APPLICATION_JSON) .get(); return new DownloadResult<>(language, uriToDownload, responsePromise); }