protected T doOperation()

in src/main/java/com/aliyun/oss/internal/OSSOperation.java [159:244]


    protected <T> T doOperation(RequestMessage request, ResponseParser<T> parser, String bucketName, String key,
            boolean keepResponseOpen, List<RequestHandler> requestHandlers, List<ResponseHandler> reponseHandlers)
            throws OSSException, ClientException {

        Span span = null;
        if (client.getClientConfiguration().isTracerEnabled()){
            AlibabaCloudTracer alibabaCloudTracer = AlibabaCloudTracerProvider.getInstance().getTracer();
            AlibabaCloudAttributesBuilder AttributesBuilder = new AlibabaCloudAttributesBuilder();
            Attributes attributes = AttributesBuilder.getAttributesBuilder()
                    .put("alibaba.cloud.service", getProduct())
                    .put("alibaba.cloud.signature_version", client.getClientConfiguration().getSignatureVersion().toString())
                    .put("alibaba.cloud.resource.type", "OSS")
                    .put("http.request.method", request.getMethod().name())
                    .build();

            AlibabaCloudSpanBuilder alibabaCloudSpanBuilder = alibabaCloudTracer.spanBuilder(bucketName);
            if (alibabaCloudSpanBuilder != null) {
                span = alibabaCloudSpanBuilder.setAllAttributes(attributes).startSpan();
            }
        }

        final WebServiceRequest originalRequest = request.getOriginalRequest();
        request.getHeaders().putAll(client.getClientConfiguration().getDefaultHeaders());
        request.getHeaders().putAll(originalRequest.getHeaders());
        request.getParameters().putAll(originalRequest.getParameters());

        ExecutionContext context = createDefaultContext(request.getMethod(), bucketName, key, originalRequest);

        context.addRequestHandler(new RequestProgressHanlder());
        if (requestHandlers != null) {
            for (RequestHandler handler : requestHandlers)
                context.addRequestHandler(handler);
        }
        if (client.getClientConfiguration().isCrcCheckEnabled()) {
            context.addRequestHandler(new RequestChecksumHanlder());
        }

        context.addResponseHandler(new ResponseProgressHandler(originalRequest));
        if (reponseHandlers != null) {
            for (ResponseHandler handler : reponseHandlers)
                context.addResponseHandler(handler);
        }
        if (client.getClientConfiguration().isCrcCheckEnabled()) {
            context.addResponseHandler(new ResponseChecksumHandler());
        }

        List<RequestSigner> signerHandlers = this.client.getClientConfiguration().getSignerHandlers();
        if (signerHandlers != null) {
            for (RequestSigner signer : signerHandlers) {
                context.addSignerHandler(signer);
            }
        }

        ResponseMessage response = null;
        try {
            response = send(request, context, keepResponseOpen);
            return parser.parse(response);
        } catch (ResponseParseException rpe) {
            OSSException oe = ExceptionFactory.createInvalidResponseException(response.getRequestId(), rpe.getMessage(),
                    rpe);
            logException("Unable to parse response error: ", rpe);
            if (span != null) {
                span.setAttribute("alibaba.cloud.error.code", "ParseResponseError");
            }
            throw oe;
        } catch (OSSException e) {
            if (span != null) {
                span.setAttribute("alibaba.cloud.error.code", e.getErrorCode());
                span.setAttribute("alibaba.cloud.request_id", e.getRequestId());
            }
            throw e;
        } catch (ClientException ce) {
            if (span != null) {
                span.setAttribute("alibaba.cloud.error.code", ce.getErrorCode());
            }
            throw ce;
        } finally {
            if (span != null) {
                if (response != null) {
                    span.setAttribute("alibaba.cloud.request_id", response.getRequestId());
                    span.setAttribute("http.response.status_code", String.valueOf(response.getStatusCode()));
                }
                span.end();
            }
        }
    }