Java 类org.springframework.web.client.HttpStatusCodeException 实例源码

项目:teamcity-hashicorp-vault-plugin    文件:VaultTemplate.java   
@Override
public void delete(final String path) {

    Assert.hasText(path, "Path must not be empty");

    try {
        sessionTemplate.delete(path);
    } catch (HttpStatusCodeException e) {

        if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
            return;
        }

        throw VaultResponses.buildException(e, path);
    }
}
项目:loom    文件:RolesUpdater.java   
@Override
protected List<JsonRole> getResourcesFromGet(final RestTemplate rt, final URI targetURI)
        throws HttpStatusCodeException, UpdaterHttpException {
    ResponseEntity<JsonRoles> resp = rt.getForEntity(targetURI, JsonRoles.class);
    if (resp != null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("response is not null: " + resp.getStatusCode());
        }
        if (resp.getStatusCode() == HttpStatus.OK) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("response is OK");
            }
            return resp.getBody().getRoles();
        } else {
            throw new UpdaterHttpException(
                    "unable to collect roles - status code: " + resp.getStatusCode().toString());
        }
    } else {
        throw new UpdaterHttpException("unable to collect roles - HTTP response was null");
    }
}
项目:spring-cloud-skipper    文件:ManifestCommands.java   
@ShellMethod(key = "manifest get", value = "Get the manifest for a release")
public Object getManifest(
        @ShellOption(help = "release name") @NotNull String releaseName,
        @ShellOption(help = "specific release version.", defaultValue = NULL) Integer releaseVersion) {
    String manifest;
    try {
        if (releaseVersion == null) {
            manifest = this.skipperClient.manifest(releaseName);
        }
        else {
            manifest = this.skipperClient.manifest(releaseName, releaseVersion);
        }
    }
    catch (HttpStatusCodeException e) {
        if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
            // 404 means release not found.
            // TODO it'd be nice to rethrow ReleaseNotFoundException in
            // SkipperClient but that exception is on server
            return "Release with name '" + releaseName + "' not found";
        }
        // if something else, rethrow
        throw e;
    }
    return manifest;
}
项目:meparty    文件:RestApiProxyInvocationHandler.java   
RestResponse<Object> doRestExchange(RestExchangeProperties properties)
    throws IOException, HttpStatusCodeException {

  ResponseEntity<String> responseEntity = restTemplate.exchange(properties.getUrl(),
      properties.getHttpMethod(), properties.getHttpEntity(),
      new ParameterizedTypeReference<String>() {
      }, properties.getUrlVariables());


  ObjectMapper objectMapper = new ObjectMapper();

  Object returnBody = null;
  if (!StringHelper.isNullOrEmpty(responseEntity.getBody())) {
    if (responseEntity.getBody().startsWith("[")) {
      returnBody = objectMapper.readValue(responseEntity.getBody(),
          objectMapper.getTypeFactory().constructCollectionType(List.class,
              properties.getReturnType()));
    } else {
      returnBody = objectMapper.readValue(responseEntity.getBody(), properties.getReturnType());
    }
  }
  RestResponse<Object> restResponse = new RestResponse<>(returnBody,
      responseEntity.getHeaders(),
      responseEntity.getStatusCode());

  return restResponse;
}
项目:teamcity-hashicorp-vault-plugin    文件:VaultTemplate.java   
@SuppressWarnings("unchecked")
@Override
public <T> VaultResponseSupport<T> read(final String path, final Class<T> responseType) {

    final ParameterizedTypeReference<VaultResponseSupport<T>> ref = VaultResponses
            .getTypeReference(responseType);

    try {
        ResponseEntity<VaultResponseSupport<T>> exchange = sessionTemplate.exchange(
                path, HttpMethod.GET, null, ref);

        return exchange.getBody();
    } catch (HttpStatusCodeException e) {

        if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
            return null;
        }

        throw VaultResponses.buildException(e, path);
    }
}
项目:teamcity-hashicorp-vault-plugin    文件:VaultTemplate.java   
private <T> T doRead(final String path, final Class<T> responseType) {

        return doWithSession(new RestOperationsCallback<T>() {

            @Override
            public T doWithRestOperations(RestOperations restOperations) {

                try {
                    return restOperations.getForObject(path, responseType);
                } catch (HttpStatusCodeException e) {

                    if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
                        return null;
                    }

                    throw VaultResponses.buildException(e, path);
                }
            }
        });
    }
项目:istio-by-example-java    文件:GuestbookService.java   
public List<Map> all() {
  try {
    Map response = restTemplate.getForObject(endpoint, Map.class);

    Map embedded = (Map) response.get("_embedded");
    List<Map> messages = (List<Map>) embedded.get("messages");
    return messages.stream()
        .filter(message -> message.containsKey("_links"))
        .map(message -> (Map) message.get("_links"))
        .filter(links -> links.containsKey("self"))
        .map(links -> (Map) links.get("self"))
        .map(self -> (String) self.get("href"))
        .map(href -> restTemplate.getForObject(href, Map.class))
        .collect(Collectors.toList());
  } catch (HttpStatusCodeException e) {
    // Istio would've performed circuit breaking and retries
    // but it doesn't handle bulkheads / returning default values on full failures.
    log.error("Error from Guestbook Service, falling back", e);
    return allFallback();
  }
}
项目:loom    文件:RoleAssignmentsUpdater.java   
@Override
protected List<JsonRoleAssignment> getResourcesFromGet(final RestTemplate rt, final URI targetURI)
        throws HttpStatusCodeException, UpdaterHttpException {
    ResponseEntity<JsonRoleAssignments> resp = rt.getForEntity(targetURI, JsonRoleAssignments.class);
    if (resp != null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("response is not null: " + resp.getStatusCode());
        }
        if (resp.getStatusCode() == HttpStatus.OK) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("response is OK");
            }
            return resp.getBody().getRoleAssignments();
        } else {
            throw new UpdaterHttpException(
                    "unable to collect roleAssigments - status code: " + resp.getStatusCode().toString());
        }
    } else {
        throw new UpdaterHttpException("unable to collect roleAssignments - HTTP response was null");
    }
}
项目:loom    文件:DomainsUpdater.java   
@Override
protected List<JsonDomain> getResourcesFromGet(final RestTemplate rt, final URI targetURI)
        throws HttpStatusCodeException, UpdaterHttpException {
    ResponseEntity<JsonDomains> resp = rt.getForEntity(targetURI, JsonDomains.class);
    if (resp != null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("response is not null: " + resp.getStatusCode());
        }
        if (resp.getStatusCode() == HttpStatus.OK) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("response is OK");
            }
            return resp.getBody().getDomains();
        } else {
            throw new UpdaterHttpException(
                    "unable to collect domains - status code: " + resp.getStatusCode().toString());
        }
    } else {
        throw new UpdaterHttpException("unable to collect domains - HTTP response was null");
    }
}
项目:loom    文件:ProjectsUpdater.java   
@Override
protected List<JsonProject> getResourcesFromGet(final RestTemplate rt, final URI targetURI)
        throws HttpStatusCodeException, UpdaterHttpException {
    ResponseEntity<JsonProjects> resp = rt.getForEntity(targetURI, JsonProjects.class);
    if (resp != null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("response is not null: " + resp.getStatusCode());
        }
        if (resp.getStatusCode() == HttpStatus.OK) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("response is OK");
            }
            return resp.getBody().getProjects();
        } else {
            throw new UpdaterHttpException(
                    "unable to collect projects - status code: " + resp.getStatusCode().toString());
        }
    } else {
        throw new UpdaterHttpException("unable to collect projects - HTTP response was null");
    }
}
项目:loom    文件:UsersUpdater.java   
@Override
protected List<JsonUser> getResourcesFromGet(final RestTemplate rt, final URI targetURI)
        throws HttpStatusCodeException, UpdaterHttpException {
    ResponseEntity<JsonUsers> resp = rt.getForEntity(targetURI, JsonUsers.class);
    if (resp != null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("response is not null: " + resp.getStatusCode());
        }
        if (resp.getStatusCode() == HttpStatus.OK) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("response is OK");
            }
            return resp.getBody().getUsers();
        } else {
            throw new UpdaterHttpException(
                    "unable to collect users - status code: " + resp.getStatusCode().toString());
        }
    } else {
        throw new UpdaterHttpException("unable to collect users - HTTP response was null");
    }
}
项目:apollo-custom    文件:ControllerIntegrationExceptionTest.java   
@Test
@Sql(scripts = "/controller/cleanup.sql", executionPhase = ExecutionPhase.AFTER_TEST_METHOD)
public void testCreateFailed() {
  AppDTO dto = generateSampleDTOData();

  when(adminService.createNewApp(any(App.class))).thenThrow(new RuntimeException("save failed"));

  try {
    restTemplate.postForEntity(getBaseAppUrl(), dto, AppDTO.class);
  } catch (HttpStatusCodeException e) {
    @SuppressWarnings("unchecked")
    Map<String, String> attr = gson.fromJson(e.getResponseBodyAsString(), Map.class);
    Assert.assertEquals("save failed", attr.get("message"));
  }
  App savedApp = appService.findOne(dto.getAppId());
  Assert.assertNull(savedApp);
}
项目:apollo    文件:ControllerIntegrationExceptionTest.java   
@Test
@Sql(scripts = "/controller/cleanup.sql", executionPhase = ExecutionPhase.AFTER_TEST_METHOD)
public void testCreateFailed() {
  AppDTO dto = generateSampleDTOData();

  when(adminService.createNewApp(any(App.class))).thenThrow(new RuntimeException("save failed"));

  try {
    restTemplate.postForEntity(getBaseAppUrl(), dto, AppDTO.class);
  } catch (HttpStatusCodeException e) {
    @SuppressWarnings("unchecked")
    Map<String, String> attr = gson.fromJson(e.getResponseBodyAsString(), Map.class);
    Assert.assertEquals("save failed", attr.get("message"));
  }
  App savedApp = appService.findOne(dto.getAppId());
  Assert.assertNull(savedApp);
}
项目:spring-vault    文件:ClientCertificateAuthentication.java   
private VaultToken createTokenUsingTlsCertAuthentication(String path) {

        try {
            VaultResponse response = restOperations.postForObject("auth/{mount}/login",
                    Collections.emptyMap(), VaultResponse.class, path);

            Assert.state(response.getAuth() != null, "Auth field must not be null");

            logger.debug("Login successful using TLS certificates");

            return LoginTokenUtil.from(response.getAuth());
        }
        catch (HttpStatusCodeException e) {
            throw new VaultException(String.format(
                    "Cannot login using TLS certificates: %s",
                    VaultResponses.getError(e.getResponseBodyAsString())));
        }
    }
项目:spring-vault    文件:AppIdAuthentication.java   
private VaultToken createTokenUsingAppId() {

        Map<String, String> login = getAppIdLogin(options.getAppId(), options
                .getUserIdMechanism().createUserId());

        try {
            VaultResponse response = restOperations.postForObject("auth/{mount}/login",
                    login, VaultResponse.class, options.getPath());

            Assert.state(response != null && response.getAuth() != null,
                    "Auth field must not be null");

            logger.debug("Login successful using AppId authentication");

            return LoginTokenUtil.from(response.getAuth());
        }
        catch (HttpStatusCodeException e) {
            throw new VaultException(String.format("Cannot login using app-id: %s",
                    VaultResponses.getError(e.getResponseBodyAsString())));
        }
    }
项目:spring-vault    文件:CubbyholeAuthentication.java   
@Nullable
private Map<String, Object> lookupToken() {

    try {

        ResponseEntity<VaultResponse> entity = restOperations.exchange(
                options.getPath(), HttpMethod.GET,
                new HttpEntity<>(VaultHttpHeaders.from(options.getInitialToken())),
                VaultResponse.class);

        Assert.state(entity.getBody() != null, "Auth response must not be null");

        return entity.getBody().getData();
    }
    catch (HttpStatusCodeException e) {
        throw new VaultException(String.format(
                "Cannot retrieve Token from Cubbyhole: %s %s", e.getStatusCode(),
                VaultResponses.getError(e.getResponseBodyAsString())));
    }
}
项目:spring-vault    文件:LoginTokenAdapter.java   
private static Map<String, Object> lookupSelf(RestOperations restOperations,
        VaultToken token) {

    try {
        ResponseEntity<VaultResponse> entity = restOperations.exchange(
                "auth/token/lookup-self", HttpMethod.GET, new HttpEntity<>(
                        VaultHttpHeaders.from(token)), VaultResponse.class);

        Assert.state(entity.getBody() != null && entity.getBody().getData() != null,
                "Token response is null");

        return entity.getBody().getData();
    }
    catch (HttpStatusCodeException e) {
        throw new VaultTokenLookupException(String.format(
                "Token self-lookup failed: %s %s", e.getStatusCode(),
                VaultResponses.getError(e.getResponseBodyAsString())));
    }
}
项目:spring-vault    文件:AppRoleAuthentication.java   
private VaultToken createTokenUsingAppRole() {

        Map<String, String> login = getAppRoleLoginBody(options.getRoleId(),
                options.getSecretId());

        try {
            VaultResponse response = restOperations.postForObject("auth/{mount}/login",
                    login, VaultResponse.class, options.getPath());

            Assert.state(response != null && response.getAuth() != null,
                    "Auth field must not be null");

            logger.debug("Login successful using AppRole authentication");

            return LoginTokenUtil.from(response.getAuth());
        }
        catch (HttpStatusCodeException e) {
            throw new VaultException(String.format("Cannot login using AppRole: %s",
                    VaultResponses.getError(e.getResponseBodyAsString())));
        }
    }
项目:spring-vault    文件:VaultTemplate.java   
@SuppressWarnings("unchecked")
@Override
@Nullable
public <T> VaultResponseSupport<T> read(final String path, final Class<T> responseType) {

    final ParameterizedTypeReference<VaultResponseSupport<T>> ref = VaultResponses
            .getTypeReference(responseType);

    try {
        ResponseEntity<VaultResponseSupport<T>> exchange = sessionTemplate.exchange(
                path, HttpMethod.GET, null, ref);

        return exchange.getBody();
    }
    catch (HttpStatusCodeException e) {

        if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
            return null;
        }

        throw VaultResponses.buildException(e, path);
    }
}
项目:spring-vault    文件:VaultTemplate.java   
@Override
public void delete(final String path) {

    Assert.hasText(path, "Path must not be empty");

    try {
        sessionTemplate.delete(path);
    }
    catch (HttpStatusCodeException e) {

        if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
            return;
        }

        throw VaultResponses.buildException(e, path);
    }
}
项目:spring-vault    文件:VaultTemplate.java   
@Nullable
private <T> T doRead(final String path, final Class<T> responseType) {

    return doWithSession(restOperations -> {

        try {
            return restOperations.getForObject(path, responseType);
        }
        catch (HttpStatusCodeException e) {

            if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
                return null;
            }

            throw VaultResponses.buildException(e, path);
        }
    });
}
项目:spring-vault    文件:VaultSysTemplate.java   
@Override
@SuppressWarnings("unchecked")
public boolean isInitialized() {

    return requireResponse(vaultOperations.doWithVault(restOperations -> {

        try {
            Map<String, Boolean> body = restOperations.getForObject("sys/init",
                    Map.class);

            Assert.state(body != null, "Initialization response must not be null");

            return body.get("initialized");
        }
        catch (HttpStatusCodeException e) {
            throw VaultResponses.buildException(e);
        }
    }));
}
项目:spring-vault    文件:VaultSysTemplate.java   
@Override
public VaultInitializationResponse initialize(
        final VaultInitializationRequest vaultInitializationRequest) {

    Assert.notNull(vaultInitializationRequest, "VaultInitialization must not be null");

    return requireResponse(vaultOperations.doWithVault(restOperations -> {

        try {
            ResponseEntity<VaultInitializationResponseImpl> exchange = restOperations
                    .exchange("sys/init", HttpMethod.PUT, new HttpEntity<Object>(
                            vaultInitializationRequest),
                            VaultInitializationResponseImpl.class);

            Assert.state(exchange.getBody() != null,
                    "Initialization response must not be null");

            return exchange.getBody();
        }
        catch (HttpStatusCodeException e) {
            throw VaultResponses.buildException(e);
        }
    }));
}
项目:spring-vault    文件:VaultSysTemplate.java   
@Override
public VaultHealth doWithRestOperations(RestOperations restOperations) {

    try {
        ResponseEntity<VaultHealthImpl> healthResponse = restOperations.exchange(
                "sys/health", HttpMethod.GET, null, VaultHealthImpl.class);
        return healthResponse.getBody();
    }
    catch (HttpStatusCodeException responseError) {

        try {
            ObjectMapper mapper = new ObjectMapper();
            return mapper.readValue(responseError.getResponseBodyAsString(),
                    VaultHealthImpl.class);
        }
        catch (Exception jsonError) {
            throw responseError;
        }
    }
}
项目:spring-vault    文件:VaultPkiTemplate.java   
private <T> T requestCertificate(String roleName, String requestPath,
        Map<String, Object> request, Class<T> responseType) {

    request.put("format", "der");

    T response = vaultOperations.doWithSession(restOperations -> {

        try {
            return restOperations.postForObject(requestPath, request, responseType,
                    path, roleName);
        }
        catch (HttpStatusCodeException e) {
            throw VaultResponses.buildException(e);
        }
    });

    Assert.state(response != null, "VaultCertificateResponse must not be null");

    return response;
}
项目:spring-vault    文件:VaultPkiTemplate.java   
@Override
public void revoke(String serialNumber) throws VaultException {

    Assert.hasText(serialNumber, "Serial number must not be null or empty");

    vaultOperations.doWithSession(restOperations -> {

        try {
            restOperations.postForObject("{path}/revoke",
                    Collections.singletonMap("serial_number", serialNumber),
                    Map.class, path);

            return null;
        }
        catch (HttpStatusCodeException e) {
            throw VaultResponses.buildException(e);
        }
    });
}
项目:spring-vault    文件:VaultPkiTemplate.java   
@Override
public InputStream getCrl(Encoding encoding) throws VaultException {

    Assert.notNull(encoding, "Encoding must not be null");

    return vaultOperations.doWithSession(restOperations -> {

        String requestPath = encoding == Encoding.DER ? "{path}/crl"
                : "{path}/crl/pem";
        try {
            ResponseEntity<byte[]> response = restOperations.getForEntity(
                    requestPath, byte[].class, path);

            return new ByteArrayInputStream(response.getBody());
        }
        catch (HttpStatusCodeException e) {
            throw VaultResponses.buildException(e);
        }
    });
}
项目:spring-vault    文件:VaultTokenTemplate.java   
private <T extends VaultResponseSupport<?>> T writeAndReturn(String path,
        @Nullable Object body, Class<T> responseType) {

    Assert.hasText(path, "Path must not be empty");

    T response = vaultOperations.doWithSession(restOperations -> {
        try {
            ResponseEntity<T> exchange = restOperations.exchange(path,
                    HttpMethod.POST, body == null ? HttpEntity.EMPTY
                            : new HttpEntity<>(body), responseType);

            return exchange.getBody();
        }
        catch (HttpStatusCodeException e) {
            throw VaultResponses.buildException(e, path);
        }
    });

    Assert.state(response != null, "Response must not be null");

    return response;
}
项目:spring-vault    文件:VaultTokenTemplate.java   
private void write(String path, Class<?> responseType) {

        Assert.hasText(path, "Path must not be empty");

        vaultOperations.doWithSession(restOperations -> {

            try {
                restOperations.exchange(path, HttpMethod.POST, HttpEntity.EMPTY,
                        responseType);
            }
            catch (HttpStatusCodeException e) {
                throw VaultResponses.buildException(e, path);
            }

            return null;
        });
    }
项目:openlmis-stockmanagement    文件:NotificationService.java   
/**
 * Send an email notification.
 *
 * @param user    receiver of the notification
 * @param subject subject of the email
 * @param content content of the email
 * @return true if success, false if failed.
 */
public boolean notify(UserDto user, String subject, String content) {
  NotificationRequest request = new NotificationRequest(
      from, user.getEmail(), subject, content
  );

  try {
    restTemplate.postForObject(
        RequestHelper.createUri(notificationUrl),
        RequestHelper.createEntity(authService.obtainAccessToken(),
            request),
        Object.class);
  } catch (HttpStatusCodeException ex) {
    logger.error(
        "Unable to send notification. Error code: {}, response message: {}",
        ex.getStatusCode(), ex.getResponseBodyAsString()
    );
    return false;
  }
  return true;
}
项目:openlmis-stockmanagement    文件:BaseReferenceDataService.java   
/**
 * Return one object from Reference data service.
 *
 * @param id UUID of requesting object.
 * @return Requesting reference data object.
 */
public T findOne(UUID id) {
  String url = getServiceUrl() + getUrl() + id;

  RestTemplate restTemplate = new RestTemplate();

  try {
    ResponseEntity<T> responseEntity = restTemplate.exchange(
        buildUri(url), HttpMethod.GET, createEntity(obtainAccessToken()),
        getResultClass());
    return responseEntity.getBody();
  } catch (HttpStatusCodeException ex) {
    // rest template will handle 404 as an exception, instead of returning null
    if (ex.getStatusCode() == HttpStatus.NOT_FOUND) {
      logger.warn("{} with id {} does not exist. ", getResultClass().getSimpleName(), id);
      return null;
    } else {
      throw buildDataRetrievalException(ex);
    }
  }
}
项目:openlmis-stockmanagement    文件:BaseReferenceDataService.java   
private Collection<T> findAllWithMethod(String resourceUrl, Map<String, Object> uriParameters,
                                        Map<String, Object> payload, HttpMethod method) {
  String url = getServiceUrl() + getUrl() + resourceUrl;
  RestTemplate restTemplate = new RestTemplate();

  Map<String, Object> params = new HashMap<>();
  params.putAll(uriParameters);

  try {
    ResponseEntity<T[]> responseEntity = restTemplate.exchange(buildUri(url, params),
        method, createEntity(obtainAccessToken(), payload),
        getArrayResultClass());

    return new ArrayList<>(Arrays.asList(responseEntity.getBody()));
  } catch (HttpStatusCodeException ex) {
    throw buildDataRetrievalException(ex);
  }
}
项目:openlmis-stockmanagement    文件:BaseCommunicationService.java   
protected <P> Page<P> getPage(String resourceUrl, Map<String, Object> parameters, Object payload,
                              HttpMethod method, Class<P> type) {
  String url = getServiceUrl() + getUrl() + resourceUrl;

  Map<String, Object> params = new HashMap<>();
  params.putAll(parameters);

  try {
    ResponseEntity<PageImplRepresentation<P>> response = restTemplate.exchange(
        buildUri(url, params),
        method,
        createEntity(obtainAccessToken(), payload),
        new DynamicPageTypeReference<>(type)
    );
    return response.getBody();

  } catch (HttpStatusCodeException ex) {
    throw buildDataRetrievalException(ex);
  }
}
项目:https-github.com-g0t4-jenkins2-course-spring-boot    文件:RemoteVehicleDetailsService.java   
@Override
public VehicleDetails getVehicleDetails(VehicleIdentificationNumber vin)
        throws VehicleIdentificationNumberNotFoundException {
    Assert.notNull(vin, "VIN must not be null");
    logger.debug("Retrieving vehicle data for: " + vin);
    try {
        return this.restTemplate.getForObject("/vehicle/{vin}/details",
                VehicleDetails.class, vin);
    }
    catch (HttpStatusCodeException ex) {
        if (HttpStatus.NOT_FOUND.equals(ex.getStatusCode())) {
            throw new VehicleIdentificationNumberNotFoundException(vin, ex);
        }
        throw ex;
    }
}
项目:haven-platform    文件:DockerServiceImpl.java   
@Override
public ServiceCallResult getStatistics(GetStatisticsArg arg) {
    Assert.notNull(arg.getId(), "id is null");
    URI url = getUrlContainer(arg.getId(), "stats").queryParam("stream", arg.isStream()).build().toUri();
    ServiceCallResult callResult = new ServiceCallResult();
    try {
        ListenableFuture<Object> future = restTemplate.execute(url, HttpMethod.GET, null, response -> {
            StreamContext<Statistics> context = new StreamContext<>(response.getBody(), arg.getWatcher());
            context.getInterrupter().setFuture(arg.getInterrupter());
            statisticsProcessor.processResponseStream(context);
            return null;
        });
        waitFuture(callResult, future);
    } catch (HttpStatusCodeException e) {
        processStatusCodeException(e, callResult, url);
    }
    return callResult;
}
项目:haven-platform    文件:DockerServiceImpl.java   
private <T> T postOrNullAction(UriComponentsBuilder ub, Object cmd, Class<T> responseType) {
    String url = ub.toUriString();
    try {
        ResponseEntity<T> entity = getSlow(() -> {
            HttpEntity<?> req = null;
            if(cmd != null) {
                req = wrapEntity(cmd);
            }
            return restTemplate.postForEntity(url, req, responseType);
        });
        return entity.getBody();
    } catch (HttpStatusCodeException e) {
        log.warn("Failed to execute POST on {}, due to {}", url, formatHttpException(e));
        if(e.getStatusCode().is4xxClientError()) {
            return null;
        }
        throw e;
    }
}
项目:haven-platform    文件:DockerServiceImpl.java   
private <T extends ServiceCallResult> T getAction(UriComponentsBuilder ub, Class<T> responseType, Supplier<T> factory) {
    if(factory == null) {
        factory = () -> BeanUtils.instantiate(responseType);
    }
    URI uri = ub.build().toUri();
    T resp;
    try {
        ResponseEntity<T> entity = getFast(() -> {
            return restTemplate.getForEntity(uri, responseType);
        });
        resp = entity.getBody();
        if(resp == null) {
            resp = factory.get();
        }
        resp.setCode(ResultCode.OK);
        return resp;
    } catch (HttpStatusCodeException e) {
        log.warn("Failed to execute GET on {}, due to {}", uri, e.toString());
        resp = factory.get();
        processStatusCodeException(e, resp, uri);
        return resp;
    }
}
项目:haven-platform    文件:DockerServiceImpl.java   
@Override
public ServiceCallResult subscribeToEvents(GetEventsArg arg) {
    ServiceCallResult callResult = new ServiceCallResult();
    UriComponentsBuilder ucb = makeUrl("events");
    if(arg.getSince() != null) {
        ucb.queryParam("since", arg.getSince());
    }
    if(arg.getUntil() != null) {
        ucb.queryParam("until", arg.getUntil());
    }
    URI uri = ucb.build().toUri();
    try {
        ListenableFuture<Object> future = restTemplate.execute(uri, HttpMethod.GET, null, response -> {
            online();// may be we need schedule it into another thread
            StreamContext<DockerEvent> context = new StreamContext<>(response.getBody(), arg.getWatcher());
            context.getInterrupter().setFuture(arg.getInterrupter());
            eventStreamProcessor.processResponseStream(context);
            return null;
        });
        waitFuture(callResult, future);
    } catch (HttpStatusCodeException e) {
        processStatusCodeException(e, callResult, uri);
    }
    return callResult;
}
项目:haven-platform    文件:DockerServiceImpl.java   
private void processStatusCodeException(HttpStatusCodeException e, ServiceCallResult res, URI uri) {
    setCode(e.getStatusCode(), res);
    String msg = null;
    try {
        if(MediaType.APPLICATION_JSON.includes(e.getResponseHeaders().getContentType())) {
            objectMapper.reader().withValueToUpdate(res).readValue(e.getResponseBodyAsString());
            msg = res.getMessage();
        }
    } catch (Exception ex) {
        log.error("Can not process status code exception message.", ex);
    }
    // in some cases msg may be null on success reading value, but anyway we need to make non null value manually
    if(msg == null) {
        msg = formatHttpException(e);
        res.setMessage(msg);
    }
    // we log message as debug because consumer code must log error too, but with high level,
    // when we log it as warn then error will cause to many duplicate lines in log
    log.warn("Fail to execute '{}' due to error: {}", uri, msg);
}
项目:haven-platform    文件:DockerServiceImpl.java   
private ServiceCallResult stopBasedAction(String id, StopContainerArg arg, String action) {
    Assert.notNull(id, "id is null");
    UriComponentsBuilder ub = getUrlContainer(id, action);
    int time = arg.getTimeBeforeKill();
    if (time > 0) {
        ub.queryParam("t", time);
    }
    URI uri = ub.build().toUri();
    try {
        ResponseEntity<String> res = getSlow(() -> restTemplate.postForEntity(uri, null, String.class));
        return DockerUtils.getServiceCallResult(res);
    } catch (HttpStatusCodeException e) {
        log.warn("In {}, can't \"{}\" container: {}, code: {}, message: {}", getId(), action, id, e.getStatusCode(), e.getResponseBodyAsString());
        ServiceCallResult callResult = new ServiceCallResult();
        processStatusCodeException(e, callResult, uri);
        return callResult;
    }
}