Example usage for org.springframework.web.client RestTemplate setErrorHandler

List of usage examples for org.springframework.web.client RestTemplate setErrorHandler

Introduction

In this page you can find the example usage for org.springframework.web.client RestTemplate setErrorHandler.

Prototype

public void setErrorHandler(ResponseErrorHandler errorHandler) 

Source Link

Document

Set the error handler.

Usage

From source file:org.spring.data.gemfire.rest.GemFireRestInterfaceTest.java

@SuppressWarnings("deprecation")
private RestTemplate setErrorHandler(final RestTemplate restTemplate) {
    restTemplate.setErrorHandler(new ResponseErrorHandler() {
        private final Set<HttpStatus> errorStatuses = new HashSet<>();

        /* non-static */ {
            errorStatuses.add(HttpStatus.BAD_REQUEST);
            errorStatuses.add(HttpStatus.UNAUTHORIZED);
            errorStatuses.add(HttpStatus.FORBIDDEN);
            errorStatuses.add(HttpStatus.NOT_FOUND);
            errorStatuses.add(HttpStatus.METHOD_NOT_ALLOWED);
            errorStatuses.add(HttpStatus.NOT_ACCEPTABLE);
            errorStatuses.add(HttpStatus.REQUEST_TIMEOUT);
            errorStatuses.add(HttpStatus.CONFLICT);
            errorStatuses.add(HttpStatus.REQUEST_ENTITY_TOO_LARGE);
            errorStatuses.add(HttpStatus.REQUEST_URI_TOO_LONG);
            errorStatuses.add(HttpStatus.UNSUPPORTED_MEDIA_TYPE);
            errorStatuses.add(HttpStatus.TOO_MANY_REQUESTS);
            errorStatuses.add(HttpStatus.INTERNAL_SERVER_ERROR);
            errorStatuses.add(HttpStatus.NOT_IMPLEMENTED);
            errorStatuses.add(HttpStatus.BAD_GATEWAY);
            errorStatuses.add(HttpStatus.SERVICE_UNAVAILABLE);
        }/*from   w  ww  . j  a v a 2  s .co m*/

        @Override
        public boolean hasError(final ClientHttpResponse response) throws IOException {
            return errorStatuses.contains(response.getStatusCode());
        }

        @Override
        public void handleError(final ClientHttpResponse response) throws IOException {
            System.err.printf("%1$d - %2$s%n", response.getRawStatusCode(), response.getStatusText());
            System.err.println(readBody(response));
        }

        private String readBody(final ClientHttpResponse response) throws IOException {
            BufferedReader responseBodyReader = null;

            try {
                responseBodyReader = new BufferedReader(new InputStreamReader(response.getBody()));

                StringBuilder buffer = new StringBuilder();
                String line;

                while ((line = responseBodyReader.readLine()) != null) {
                    buffer.append(line).append(System.getProperty("line.separator"));
                }

                return buffer.toString().trim();
            } finally {
                FileSystemUtils.close(responseBodyReader);
            }
        }
    });

    return restTemplate;
}

From source file:com.playhaven.android.req.PlayHavenRequest.java

public void send(final Context context) {
    final StringHttpMessageConverter stringHttpMessageConverter;

    try {//  w w  w .j  ava 2 s .c  o m
        /**
        * Charset.availableCharsets() called by StringHttpMessageConverter constructor is not multi-thread safe.
        * Calling it on the main thread to avoid a possible crash.
        * More details here: https://code.google.com/p/android/issues/detail?id=42769
        */
        stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName(UTF8));
    } catch (Exception e) {
        handleResponse(new PlayHavenException(e.getMessage()));
        return;
    }

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                /**
                 * First, check if we are mocking the URL
                 */
                String mockJsonResponse = getMockJsonResponse();
                if (mockJsonResponse != null) {
                    /**
                     * Mock the response
                     */
                    PlayHaven.v("Mock Response: %s", mockJsonResponse);
                    handleResponse(mockJsonResponse);
                    return;
                }

                /**
                 * Not mocking the response. Do an actual server call.
                 */
                String url = getUrl(context);
                PlayHaven.v("Request(%s) %s: %s", PlayHavenRequest.this.getClass().getSimpleName(), restMethod,
                        url);

                // Add the gzip Accept-Encoding header
                HttpHeaders requestHeaders = new HttpHeaders();
                requestHeaders.setAcceptEncoding(ContentCodingType.GZIP);
                requestHeaders.setAccept(Collections.singletonList(new MediaType("application", "json")));

                // Create our REST handler
                RestTemplate rest = new RestTemplate();
                rest.setErrorHandler(new ServerErrorHandler());

                // Capture the JSON for signature verification
                rest.getMessageConverters().add(stringHttpMessageConverter);

                ResponseEntity<String> entity = null;

                switch (restMethod) {
                case POST:
                    SharedPreferences pref = PlayHaven.getPreferences(context);
                    String apiServer = getString(pref, APIServer)
                            + context.getResources().getString(getApiPath(context));
                    url = url.replace(apiServer, "");
                    if (url.startsWith("?") && url.length() > 1)
                        url = url.substring(1);

                    requestHeaders.setContentType(new MediaType("application", "x-www-form-urlencoded"));
                    entity = rest.exchange(apiServer, restMethod, new HttpEntity<>(url, requestHeaders),
                            String.class);
                    break;
                default:
                    entity = rest.exchange(url, restMethod, new HttpEntity<>(requestHeaders), String.class);
                    break;
                }

                String json = entity.getBody();

                List<String> digests = entity.getHeaders().get("X-PH-DIGEST");
                String digest = (digests == null || digests.size() == 0) ? null : digests.get(0);

                validateSignatures(context, digest, json);

                HttpStatus statusCode = entity.getStatusCode();
                PlayHaven.v("Response (%s): %s", statusCode, json);

                serverSuccess(context);
                handleResponse(json);
            } catch (PlayHavenException e) {
                handleResponse(e);
            } catch (IOException e2) {
                handleResponse(new PlayHavenException(e2));
            } catch (Exception e3) {
                handleResponse(new PlayHavenException(e3.getMessage()));
            }
        }
    }).start();
}

From source file:org.cloudfoundry.client.lib.rest.CloudControllerClientV1.java

/**
 * Upload an app using the legacy API used for older vcap versions like Micro Cloud Foundry 1.1 and older
 * As of Micro Cloud Foundry 1.2 and for any recent CloudFoundry.com deployment the current method of setting
 * the content type as JSON works fine./*  w  w w.  j ava 2s  .c om*/
 *
 * @param path app path
 * @param entity HttpEntity for the payload
 * @param appName name of app
 * @throws HttpServerErrorException
 */
private void uploadAppUsingLegacyApi(String path, HttpEntity<?> entity, String appName)
        throws HttpServerErrorException {
    RestTemplate legacyRestTemplate = new RestTemplate();
    legacyRestTemplate.setRequestFactory(this.getRestTemplate().getRequestFactory());
    legacyRestTemplate.setErrorHandler(new ErrorHandler());
    legacyRestTemplate.setMessageConverters(getLegacyMessageConverters());
    legacyRestTemplate.put(path, entity, appName);
}

From source file:org.cloudfoundry.identity.batch.integration.ServerRunning.java

public RestTemplate createRestTemplate() {
    RestTemplate client = new RestTemplate();
    client.setRequestFactory(new HttpComponentsClientHttpRequestFactory() {
        @Override//from   ww  w. j ava  2s  .  com
        public HttpClient getHttpClient() {
            HttpClient client = super.getHttpClient();
            client.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, false);
            client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.IGNORE_COOKIES);
            return client;
        }
    });
    client.setErrorHandler(new ResponseErrorHandler() {
        // Pass errors through in response entity for status code analysis
        public boolean hasError(ClientHttpResponse response) throws IOException {
            return false;
        }

        public void handleError(ClientHttpResponse response) throws IOException {
        }
    });
    return client;
}

From source file:com.netflix.genie.security.oauth2.pingfederate.PingFederateRemoteTokenServices.java

/**
 * Constructor./* w  w w. j a v  a  2s .  c  o  m*/
 *
 * @param serverProperties The properties of the resource server (Genie)
 * @param converter        The access token converter to use
 * @param registry         The metrics registry to use
 */
public PingFederateRemoteTokenServices(@NotNull final ResourceServerProperties serverProperties,
        @NotNull final AccessTokenConverter converter, @NotNull final MeterRegistry registry) {
    super();
    this.authenticationTimer = registry.timer(AUTHENTICATION_TIMER_NAME);
    this.pingFederateAPITimer = registry.timer(API_TIMER_NAME);
    final HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setConnectTimeout(2000);
    factory.setReadTimeout(10000);
    final RestTemplate restTemplate = new RestTemplate(factory);
    final List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
    interceptors
            .add((final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) -> {
                final long start = System.nanoTime();
                try {
                    return execution.execute(request, body);
                } finally {
                    pingFederateAPITimer.record(System.nanoTime() - start, TimeUnit.NANOSECONDS);
                }
            });
    restTemplate.setInterceptors(interceptors);
    restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
        // Ignore 400
        @Override
        public void handleError(final ClientHttpResponse response) throws IOException {
            final int errorCode = response.getRawStatusCode();
            registry.counter(TOKEN_VALIDATION_ERROR_COUNTER_NAME,
                    Sets.newHashSet(Tag.of(MetricsConstants.TagKeys.STATUS, Integer.toString(errorCode))))
                    .increment();
            if (response.getRawStatusCode() != HttpStatus.BAD_REQUEST.value()) {
                super.handleError(response);
            }
        }
    });

    this.setRestTemplate(restTemplate);

    this.checkTokenEndpointUrl = serverProperties.getTokenInfoUri();
    this.clientId = serverProperties.getClientId();
    this.clientSecret = serverProperties.getClientSecret();

    Assert.state(StringUtils.isNotBlank(this.checkTokenEndpointUrl), "Check Endpoint URL is required");
    Assert.state(StringUtils.isNotBlank(this.clientId), "Client ID is required");
    Assert.state(StringUtils.isNotBlank(this.clientSecret), "Client secret is required");

    log.debug("checkTokenEndpointUrl = {}", this.checkTokenEndpointUrl);
    log.debug("clientId = {}", this.clientId);
    log.debug("clientSecret = {}", this.clientSecret);

    this.converter = converter;
}

From source file:com.netflix.genie.web.security.oauth2.pingfederate.PingFederateRemoteTokenServices.java

/**
 * Constructor.//from  w  ww  .  j  a  va  2 s  .c o m
 *
 * @param serverProperties The properties of the resource server (Genie)
 * @param converter        The access token converter to use
 * @param registry         The metrics registry to use
 */
public PingFederateRemoteTokenServices(@NotNull final ResourceServerProperties serverProperties,
        @NotNull final AccessTokenConverter converter, @NotNull final Registry registry) {
    super();
    this.tokenValidationError = registry
            .createId("genie.security.oauth2.pingFederate.tokenValidation.error.rate");
    this.authenticationTimer = registry.timer(AUTHENTICATION_TIMER_NAME);
    this.pingFederateAPITimer = registry.timer(API_TIMER_NAME);
    final HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setConnectTimeout(2000);
    factory.setReadTimeout(10000);
    final RestTemplate restTemplate = new RestTemplate(factory);
    final List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
    interceptors
            .add((final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) -> {
                final long start = System.nanoTime();
                try {
                    return execution.execute(request, body);
                } finally {
                    pingFederateAPITimer.record(System.nanoTime() - start, TimeUnit.NANOSECONDS);
                }
            });
    restTemplate.setInterceptors(interceptors);
    restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
        // Ignore 400
        @Override
        public void handleError(final ClientHttpResponse response) throws IOException {
            final int errorCode = response.getRawStatusCode();
            registry.counter(tokenValidationError.withTag("status", Integer.toString(errorCode))).increment();
            if (response.getRawStatusCode() != HttpStatus.BAD_REQUEST.value()) {
                super.handleError(response);
            }
        }
    });

    this.setRestTemplate(restTemplate);

    this.checkTokenEndpointUrl = serverProperties.getTokenInfoUri();
    this.clientId = serverProperties.getClientId();
    this.clientSecret = serverProperties.getClientSecret();

    Assert.state(StringUtils.isNotBlank(this.checkTokenEndpointUrl), "Check Endpoint URL is required");
    Assert.state(StringUtils.isNotBlank(this.clientId), "Client ID is required");
    Assert.state(StringUtils.isNotBlank(this.clientSecret), "Client secret is required");

    log.debug("checkTokenEndpointUrl = {}", this.checkTokenEndpointUrl);
    log.debug("clientId = {}", this.clientId);
    log.debug("clientSecret = {}", this.clientSecret);

    this.converter = converter;
}

From source file:org.apigw.authserver.ServerRunning.java

public RestTemplate getRestTemplate() {
    RestTemplate client = new RestTemplate();
    client.setRequestFactory(new HttpComponentsClientHttpRequestFactory() {
        @Override//  w ww . j  a va  2s  . c  o m
        public HttpClient getHttpClient() {
            HttpClient client = super.getHttpClient();
            client.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, false);
            client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.IGNORE_COOKIES);
            return client;
        }
    });
    client.setErrorHandler(new ResponseErrorHandler() {
        // Pass errors through in response entity for status code analysis
        public boolean hasError(ClientHttpResponse response) throws IOException {
            return false;
        }

        public void handleError(ClientHttpResponse response) throws IOException {
        }
    });
    return client;
}

From source file:org.cloudfoundry.identity.uaa.login.RemoteUaaController.java

public RemoteUaaController(Environment environment, RestTemplate restTemplate) {

    // The default java.net client doesn't allow you to handle 4xx responses
    restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory() {
        @Override/*  w w w.ja va 2  s .  c  o  m*/
        public HttpClient getHttpClient() {
            return HttpClientBuilder.create().useSystemProperties().disableCookieManagement().build();
        }
    });
    restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
        @Override
        public boolean hasError(ClientHttpResponse response) throws IOException {
            HttpStatus statusCode = response.getStatusCode();
            return statusCode.series() == HttpStatus.Series.SERVER_ERROR;
        }
    });
    this.environment = environment;
    defaultTemplate = restTemplate;
    initProperties();
}