private <T> RestResponse<T> postRequest( final String path, final Object jsonEntity, final Optional<Integer> readTimeoutMs, final boolean closeResponse, final Function<Response, T> mapper) { Response response = null; try { final WebTarget target = client.target(serverAddress) .path(path); readTimeoutMs.ifPresent(timeout -> target.property(ClientProperties.READ_TIMEOUT, timeout)); response = target .request(MediaType.APPLICATION_JSON_TYPE) .post(Entity.json(jsonEntity)); return response.getStatus() == Response.Status.OK.getStatusCode() ? RestResponse.successful(mapper.apply(response)) : createErrorResponse(path, response); } catch (final ProcessingException e) { if (shouldRetry(readTimeoutMs, e)) { return postRequest(path, jsonEntity, calcReadTimeout(readTimeoutMs), closeResponse, mapper); } throw new KsqlRestClientException("Error issuing POST to KSQL server. path:" + path, e); } catch (final Exception e) { throw new KsqlRestClientException("Error issuing POST to KSQL server. path:" + path, e); } finally { if (response != null && closeResponse) { response.close(); } } }
@Override public WebTarget property(String name, Object value) { return target.property(name, value); }
@Override public WebTarget property(String name, Object value) { return base.property(name, value); }
@Override public WebTarget property(String name, Object value) { return target.property(name, value); }
@Override public WebTarget property(String name, Object value) { return new TenacityWebTarget( delegate.property(name, value), tenacityPropertyKey, timeoutPadding ); }
@Override public WebTarget property(String name, Object value) { return new TenacityWebTarget( delegate.property(name, value), tenacityPropertyKey, timeoutPadding ); }
@Override public RxWebTarget property(String name, Object value) { return new RxWebTarget(webTarget.property(name, value)); }
@Override public WrappedWebTarget property(String name, Object value) { return new WrappedWebTarget(delegate.property(name, value)); }
@Override public CompletableWebTarget property(String name, Object value) { return new CompletableWebTarget(webTarget.property(name, value)); }
public WebTarget property(String name, Object value) { return getOrCreateDelegate(delegate.property(name, value)); }
/** * Builds a new Rest Client with a WebTarget that applies the specified property. * * @param propertyName Property to set a value on * @param propertyValue Value to apply * @param <T> Rest Client * @return new Rest Client with applied change */ public <T extends RestClient> T property(String propertyName, Object propertyValue) { return newClient( target.path("").property(propertyName, propertyValue), this.headers); } }
@Override public <T> T createClient(Params<T> params) { WebTarget target = client.target(params.uri()); target.property(ClientProperties.CONNECT_TIMEOUT, (int) params.connectTimeout().toMillis()); target.property(ClientProperties.READ_TIMEOUT, (int) params.readTimeout().toMillis()); return WebResourceFactory.newResource(params.apiClass(), target); }
protected Invocation.Builder invocation(URL url, MultivaluedMap<String, String> queryParams, String accept) { if (apiClient == null) { createApiClient(); } WebTarget target = apiClient.target(url.toExternalForm()).property(ClientProperties.FOLLOW_REDIRECTS, true); if (queryParams != null) { for (Map.Entry<String, List<String>> param : queryParams.entrySet()) { target = target.queryParam(param.getKey(), param.getValue().toArray()); } } String authHeader = (tokenType == TokenType.ACCESS ? AUTHORIZATION_HEADER : PRIVATE_TOKEN_HEADER); String authValue = (tokenType == TokenType.ACCESS ? "Bearer " + authToken : authToken); Invocation.Builder builder = target.request(); if (accept == null || accept.trim().length() == 0) { builder = builder.header(authHeader, authValue); } else { builder = builder.header(authHeader, authValue).accept(accept); } // If sudo as ID is set add the Sudo header if (sudoAsId != null && sudoAsId.intValue() > 0) builder = builder.header(SUDO_HEADER, sudoAsId); return (builder); }
public CheckingWebTarget(RamlChecker checker, WebTarget target) { this.checker = checker; this.target = target; if (target.getConfiguration().getProperty("checked") != null) { throw new IllegalStateException("This WebTarget is already checking"); } target.property("checked", true); target.register(new CheckingClientFilter(this)); }
public CheckingWebTarget(RamlChecker checker, WebTarget target) { this.checker = checker; this.target = target; if (target.getConfiguration().getProperty("checked") != null) { throw new IllegalStateException("This WebTarget is already checking"); } target.property("checked", true); target.register(new CheckingClientFilter(this)); }
private void test(final String path) { try(final Response r = request .of("") .property(JaxRsClientProperties.FOLLOW_REDIRECTS, false) .request() .get()){ Assertions.assertThat(r.getStatus()).isEqualTo(307); Assertions.assertThat(r.getLocation().getPath()).isEqualTo(String.format("/%s/index.html", path)); } }
@Test public void redirectContainer() { Response response = target(CoordConsts.SVC_CFG_WORK_MGR2) .path(CoordConstsV2.RSC_NETWORK) .property(FOLLOW_REDIRECTS, false) .request() .header(CoordConstsV2.HTTP_HEADER_BATFISH_VERSION, Version.getVersion()) .header(CoordConstsV2.HTTP_HEADER_BATFISH_APIKEY, CoordConsts.DEFAULT_API_KEY) .get(); assertThat(response.getStatus(), equalTo(MOVED_PERMANENTLY.getStatusCode())); assertThat(response.getLocation().getPath(), equalTo("/v2/networks")); }
@Test public void testBooksStreamIsReturnedFromLastEventId() throws InterruptedException { final WebTarget target = createWebTarget("/rest/api/bookstore/sse/" + UUID.randomUUID()) .property(HttpHeaders.LAST_EVENT_ID_HEADER, 150); final Collection<Book> books = new ArrayList<>(); try (SseEventSource eventSource = SseEventSource.target(target).build()) { eventSource.register(collect(books), System.out::println); eventSource.open(); // Give the SSE stream some time to collect all events awaitEvents(5000, books, 4); } // Easing the test verification here, it does not work well for Atm + Jetty assertThat(books, hasItems( new Book("New Book #151", 151), new Book("New Book #152", 152), new Book("New Book #153", 153), new Book("New Book #154", 154) ) ); }
@Test public void testBooksStreamIsReturnedFromLastEventId() throws InterruptedException { final WebTarget target = createWebTarget("/rest/api/bookstore/sse/" + UUID.randomUUID()) .property(HttpHeaders.LAST_EVENT_ID_HEADER, 150); final Collection<Book> books = new ArrayList<>(); try (SseEventSource eventSource = SseEventSource.target(target).build()) { eventSource.register(collect(books), System.out::println); eventSource.open(); // Give the SSE stream some time to collect all events awaitEvents(5000, books, 4); } // Easing the test verification here, it does not work well for Atm + Jetty assertThat(books, hasItems( new Book("New Book #151", 151), new Book("New Book #152", 152), new Book("New Book #153", 153), new Book("New Book #154", 154) ) ); }