List of usage examples for org.springframework.web.client ResponseExtractor extractData
@Nullable
T extractData(ClientHttpResponse response) throws IOException;
From source file:com.zhm.config.MyAuthorizationCodeAccessTokenProvider.java
public String obtainAuthorizationCode(OAuth2ProtectedResourceDetails details, AccessTokenRequest request) throws UserRedirectRequiredException, UserApprovalRequiredException, AccessDeniedException, OAuth2AccessDeniedException { AuthorizationCodeResourceDetails resource = (AuthorizationCodeResourceDetails) details; HttpHeaders headers = getHeadersForAuthorizationRequest(request); MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>(); if (request.containsKey(OAuth2Utils.USER_OAUTH_APPROVAL)) { form.set(OAuth2Utils.USER_OAUTH_APPROVAL, request.getFirst(OAuth2Utils.USER_OAUTH_APPROVAL)); for (String scope : details.getScope()) { form.set(scopePrefix + scope, request.getFirst(OAuth2Utils.USER_OAUTH_APPROVAL)); }/* w ww.j a va 2s. co m*/ } else { form.putAll(getParametersForAuthorizeRequest(resource, request)); } authorizationRequestEnhancer.enhance(request, resource, form, headers); final AccessTokenRequest copy = request; final ResponseExtractor<ResponseEntity<Void>> delegate = getAuthorizationResponseExtractor(); ResponseExtractor<ResponseEntity<Void>> extractor = new ResponseExtractor<ResponseEntity<Void>>() { @Override public ResponseEntity<Void> extractData(ClientHttpResponse response) throws IOException { if (response.getHeaders().containsKey("Set-Cookie")) { copy.setCookie(response.getHeaders().getFirst("Set-Cookie")); } return delegate.extractData(response); } }; // Instead of using restTemplate.exchange we use an explicit response extractor here so it can be overridden by // subclasses ResponseEntity<Void> response = getRestTemplate().execute(resource.getUserAuthorizationUri(), HttpMethod.POST, getRequestCallback(resource, form, headers), extractor, form.toSingleValueMap()); if (response.getStatusCode() == HttpStatus.OK) { // Need to re-submit with approval... throw getUserApprovalSignal(resource, request); } URI location = response.getHeaders().getLocation(); String query = location.getQuery(); Map<String, String> map = OAuth2Utils.extractMap(query); if (map.containsKey("state")) { request.setStateKey(map.get("state")); if (request.getPreservedState() == null) { String redirectUri = resource.getRedirectUri(request); if (redirectUri != null) { request.setPreservedState(redirectUri); } else { request.setPreservedState(new Object()); } } } String code = map.get("code"); if (code == null) { throw new UserRedirectRequiredException(location.toString(), form.toSingleValueMap()); } request.set("code", code); return code; }
From source file:org.cloudfoundry.client.lib.rest.LoggingRestTemplate.java
@Override protected <T> T doExecute(URI url, HttpMethod method, RequestCallback requestCallback, final ResponseExtractor<T> responseExtractor) throws RestClientException { final String[] status = new String[1]; final HttpStatus[] httpStatus = new HttpStatus[1]; final Object[] headers = new Object[1]; final String[] message = new String[1]; T results = null;/* w w w . j a v a 2s .c o m*/ RestClientException exception = null; try { results = super.doExecute(url, method, requestCallback, new ResponseExtractor<T>() { @SuppressWarnings("rawtypes") public T extractData(ClientHttpResponse response) throws IOException { httpStatus[0] = response.getStatusCode(); headers[0] = response.getHeaders(); T data = null; if (responseExtractor != null && (data = responseExtractor.extractData(response)) != null) { if (data instanceof String) { message[0] = ((String) data).length() + " bytes"; } else if (data instanceof Map) { message[0] = ((Map) data).keySet().toString(); } else { message[0] = data.getClass().getName(); } return data; } else { message[0] = "<no data>"; return null; } } }); status[0] = "OK"; } catch (RestClientException e) { status[0] = "ERROR"; message[0] = e.getMessage(); exception = e; if (e instanceof HttpStatusCodeException) { httpStatus[0] = ((HttpStatusCodeException) e).getStatusCode(); } } addLogMessage(method, url, status[0], httpStatus[0], message[0]); if (exception != null) { throw exception; } return results; }
From source file:com.alexshabanov.springrestapi.restapitest.RestOperationsTestClient.java
@Override protected <T> T doExecute(URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor<T> responseExtractor) throws RestClientException { try {/* ww w .j a v a 2 s.com*/ final ClientHttpRequest clientHttpRequest = createRequest(url, method); if (requestCallback != null) { requestCallback.doWithRequest(clientHttpRequest); } final MockHttpServletResponse mockHttpServletResponse = testSupport .handle(toMockHttpServletRequest(url, method, clientHttpRequest)); final ClientHttpResponse clientHttpResponse = new ClientHttpResponseAdapter(mockHttpServletResponse); // translate error statuses if (getErrorHandler().hasError(clientHttpResponse)) { getErrorHandler().handleError(clientHttpResponse); } return responseExtractor == null ? null : responseExtractor.extractData(clientHttpResponse); } catch (IOException e) { throw new ResourceAccessException("Can't access the resource provided: " + url, e); } }
From source file:org.springframework.web.client.RestTemplate.java
/** * Execute the given method on the provided URI. * <p>The {@link ClientHttpRequest} is processed using the {@link RequestCallback}; * the response with the {@link ResponseExtractor}. * @param url the fully-expanded URL to connect to * @param method the HTTP method to execute (GET, POST, etc.) * @param requestCallback object that prepares the request (can be {@code null}) * @param responseExtractor object that extracts the return value from the response (can be {@code null}) * @return an arbitrary object, as returned by the {@link ResponseExtractor} *///from www. j a v a2s . co m protected <T> T doExecute(URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor<T> responseExtractor) throws RestClientException { Assert.notNull(url, "'url' must not be null"); Assert.notNull(method, "'method' must not be null"); ClientHttpResponse response = null; try { ClientHttpRequest request = createRequest(url, method); if (requestCallback != null) { requestCallback.doWithRequest(request); } response = request.execute(); if (!getErrorHandler().hasError(response)) { logResponseStatus(method, url, response); } else { handleResponseError(method, url, response); } if (responseExtractor != null) { return responseExtractor.extractData(response); } else { return null; } } catch (IOException ex) { throw new ResourceAccessException( "I/O error on " + method.name() + " request for \"" + url + "\": " + ex.getMessage(), ex); } finally { if (response != null) { response.close(); } } }