Search in sources :

Example 1 with HttpInvokeFunctionRequest

use of com.aliyuncs.fc.request.HttpInvokeFunctionRequest in project fc-java-sdk by aliyun.

the class DefaultFcClient method doAction.

/**
 * if form paramter is null, it will use content-type of request.headers
 */
public HttpResponse doAction(HttpRequest request, String form, HttpMethod method) throws ClientException, ServerException {
    request.validate();
    // try refresh credentials if CredentialProvider set
    this.config.refreshCredentials();
    try {
        int retryTimes = 0;
        HttpResponse response = null;
        boolean httpInvoke = false;
        if (request instanceof HttpInvokeFunctionRequest) {
            httpInvoke = true;
        }
        do {
            if (!httpInvoke || !ANONYMOUS.equals(((HttpInvokeFunctionRequest) request).getAuthType())) {
                FcUtil.signRequest(config, request, form, method, httpInvoke);
            }
            PrepareUrl prepareUrl = FcUtil.prepareUrl(request.getPath(), request.getQueryParams(), config);
            response = HttpResponse.getResponse(prepareUrl.getUrl(), request, method, config.getConnectTimeoutMillis(), config.getReadTimeoutMillis());
            retryTimes++;
            if (httpInvoke) {
                return response;
            }
        } while (500 <= response.getStatus() && AUTO_RETRY && retryTimes < MAX_RETRIES);
        if (response.getStatus() >= 500) {
            String requestId = response.getHeader(HeaderKeys.REQUEST_ID);
            String stringContent = response.getContent() == null ? "" : FcUtil.toDefaultCharset(response.getContent());
            ServerException se;
            try {
                se = new Gson().fromJson(stringContent, ServerException.class);
            } catch (JsonParseException e) {
                se = new ServerException("InternalServiceError", "Failed to parse response content", requestId);
            }
            se.setStatusCode(response.getStatus());
            se.setRequestId(requestId);
            throw se;
        } else if (response.getStatus() >= 300) {
            ClientException ce;
            if (response.getContent() == null) {
                ce = new ClientException("SDK.ServerUnreachable", "Failed to get response content from server");
            } else {
                try {
                    ce = new Gson().fromJson(FcUtil.toDefaultCharset(response.getContent()), ClientException.class);
                } catch (JsonParseException e) {
                    ce = new ClientException("SDK.ResponseNotParsable", "Failed to parse response content", e);
                }
            }
            if (ce == null) {
                ce = new ClientException("SDK.UnknownError", "Unknown client error");
            }
            ce.setStatusCode(response.getStatus());
            ce.setRequestId(response.getHeader(HeaderKeys.REQUEST_ID));
            throw ce;
        }
        return response;
    } catch (InvalidKeyException exp) {
        throw new ClientException("SDK.InvalidAccessSecret", "Speicified access secret is not valid.");
    } catch (SocketTimeoutException exp) {
        throw new ClientException("SDK.ServerUnreachable", "SocketTimeoutException has occurred on a socket read or accept.");
    } catch (IOException exp) {
        throw new ClientException("SDK.ServerUnreachable", "Server unreachable: " + exp.toString());
    } catch (NoSuchAlgorithmException exp) {
        throw new ClientException("SDK.InvalidMD5Algorithm", "MD5 hash is not supported by client side.");
    } catch (URISyntaxException e) {
        throw new ClientException("SDK.InvalidURL", "url is not valid: " + e.getMessage());
    }
}
Also used : HttpInvokeFunctionRequest(com.aliyuncs.fc.request.HttpInvokeFunctionRequest) ServerException(com.aliyuncs.fc.exceptions.ServerException) HttpResponse(com.aliyuncs.fc.http.HttpResponse) Gson(com.google.gson.Gson) IOException(java.io.IOException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) URISyntaxException(java.net.URISyntaxException) JsonParseException(com.google.gson.JsonParseException) InvalidKeyException(java.security.InvalidKeyException) PrepareUrl(com.aliyuncs.fc.model.PrepareUrl) SocketTimeoutException(java.net.SocketTimeoutException) ClientException(com.aliyuncs.fc.exceptions.ClientException)

Aggregations

ClientException (com.aliyuncs.fc.exceptions.ClientException)1 ServerException (com.aliyuncs.fc.exceptions.ServerException)1 HttpResponse (com.aliyuncs.fc.http.HttpResponse)1 PrepareUrl (com.aliyuncs.fc.model.PrepareUrl)1 HttpInvokeFunctionRequest (com.aliyuncs.fc.request.HttpInvokeFunctionRequest)1 Gson (com.google.gson.Gson)1 JsonParseException (com.google.gson.JsonParseException)1 IOException (java.io.IOException)1 SocketTimeoutException (java.net.SocketTimeoutException)1 URISyntaxException (java.net.URISyntaxException)1 InvalidKeyException (java.security.InvalidKeyException)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1