Search in sources :

Example 6 with ResponseHandler

use of com.aliyun.oss.common.comm.ResponseHandler in project aliyun-oss-java-sdk by aliyun.

the class ServiceClientTest method testRetryWithServiceException.

@Test
public void testRetryWithServiceException() throws Exception {
    // This request will fail after 1 retries
    ClientConfiguration config = new ClientConfiguration();
    config.setMaxErrorRetry(1);
    // It should be always successful.
    int maxFailures = 0;
    String content = "Let's retry!";
    byte[] contentBytes = content.getBytes(OSSConstants.DEFAULT_CHARSET_NAME);
    ByteArrayInputStream contentStream = new ByteArrayInputStream(contentBytes);
    RequestMessage request = new RequestMessage(null, null);
    request.setEndpoint(new URI("http://localhost"));
    request.setMethod(HttpMethod.GET);
    request.setContent(contentStream);
    request.setContentLength(contentBytes.length);
    ExecutionContext context = new ExecutionContext();
    context.getResponseHandlers().add(new ResponseHandler() {

        @Override
        public void handle(ResponseMessage responseData) throws ServiceException, ClientException {
            throw new ServiceException();
        }
    });
    // This request will succeed after 2 retries
    ServiceClientImpl client = new ServiceClientImpl(config, maxFailures, null, 500, content);
    // Fix the max error retry count to 3
    try {
        client.sendRequest(request, context);
        fail("ServiceException has not been thrown.");
    } catch (ServiceException e) {
        assertEquals(2, client.getRequestAttempts());
    }
}
Also used : ResponseHandler(com.aliyun.oss.common.comm.ResponseHandler) ResponseMessage(com.aliyun.oss.common.comm.ResponseMessage) URI(java.net.URI) ExecutionContext(com.aliyun.oss.common.comm.ExecutionContext) ServiceException(com.aliyun.oss.ServiceException) ByteArrayInputStream(java.io.ByteArrayInputStream) RequestMessage(com.aliyun.oss.common.comm.RequestMessage) ClientException(com.aliyun.oss.ClientException) ClientConfiguration(com.aliyun.oss.ClientConfiguration) Test(org.junit.Test)

Example 7 with ResponseHandler

use of com.aliyun.oss.common.comm.ResponseHandler in project aliyun-oss-java-sdk by aliyun.

the class OSSObjectOperation method writeObjectInternal.

private <RequestType extends PutObjectRequest, ResponseType> ResponseType writeObjectInternal(WriteMode mode, RequestType originalRequest, ResponseParser<ResponseType> responseParser) {
    final String bucketName = originalRequest.getBucketName();
    final String key = originalRequest.getKey();
    InputStream originalInputStream = originalRequest.getInputStream();
    ObjectMetadata metadata = originalRequest.getMetadata();
    if (metadata == null) {
        metadata = new ObjectMetadata();
    }
    assertParameterNotNull(bucketName, "bucketName");
    assertParameterNotNull(key, "key");
    ensureBucketNameValid(bucketName);
    ensureObjectKeyValid(key);
    ensureCallbackValid(originalRequest.getCallback());
    InputStream repeatableInputStream = null;
    if (originalRequest.getFile() != null) {
        File toUpload = originalRequest.getFile();
        if (!checkFile(toUpload)) {
            getLog().info("Illegal file path: " + toUpload.getPath());
            throw new ClientException("Illegal file path: " + toUpload.getPath());
        }
        metadata.setContentLength(toUpload.length());
        if (metadata.getContentType() == null) {
            metadata.setContentType(Mimetypes.getInstance().getMimetype(toUpload, key));
        }
        try {
            repeatableInputStream = new RepeatableFileInputStream(toUpload);
        } catch (IOException ex) {
            logException("Cannot locate file to upload: ", ex);
            throw new ClientException("Cannot locate file to upload: ", ex);
        }
    } else {
        assertTrue(originalInputStream != null, "Please specify input stream or file to upload");
        if (metadata.getContentType() == null) {
            metadata.setContentType(Mimetypes.getInstance().getMimetype(key));
        }
        try {
            repeatableInputStream = newRepeatableInputStream(originalInputStream);
        } catch (IOException ex) {
            logException("Cannot wrap to repeatable input stream: ", ex);
            throw new ClientException("Cannot wrap to repeatable input stream: ", ex);
        }
    }
    Map<String, String> headers = new HashMap<String, String>();
    populateRequestMetadata(headers, metadata);
    populateRequestCallback(headers, originalRequest.getCallback());
    Map<String, String> params = new LinkedHashMap<String, String>();
    populateWriteObjectParams(mode, originalRequest, params);
    RequestMessage httpRequest = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()).setMethod(WriteMode.getMappingMethod(mode)).setBucket(bucketName).setKey(key).setHeaders(headers).setParameters(params).setInputStream(repeatableInputStream).setInputSize(determineInputStreamLength(repeatableInputStream, metadata.getContentLength())).setOriginalRequest(originalRequest).build();
    List<ResponseHandler> reponseHandlers = new ArrayList<ResponseHandler>();
    reponseHandlers.add(new OSSCallbackErrorResponseHandler());
    final ProgressListener listener = originalRequest.getProgressListener();
    ResponseType result = null;
    try {
        publishProgress(listener, ProgressEventType.TRANSFER_STARTED_EVENT);
        if (originalRequest.getCallback() == null) {
            result = doOperation(httpRequest, responseParser, bucketName, key, true);
        } else {
            result = doOperation(httpRequest, responseParser, bucketName, key, true, null, reponseHandlers);
        }
        publishProgress(listener, ProgressEventType.TRANSFER_COMPLETED_EVENT);
    } catch (RuntimeException e) {
        publishProgress(listener, ProgressEventType.TRANSFER_FAILED_EVENT);
        throw e;
    }
    return result;
}
Also used : ResponseHandler(com.aliyun.oss.common.comm.ResponseHandler) LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) RepeatableFileInputStream(com.aliyun.oss.common.comm.io.RepeatableFileInputStream) IOUtils.newRepeatableInputStream(com.aliyun.oss.common.utils.IOUtils.newRepeatableInputStream) CheckedInputStream(java.util.zip.CheckedInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) ProgressInputStream(com.aliyun.oss.event.ProgressInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) IOException(java.io.IOException) RepeatableFileInputStream(com.aliyun.oss.common.comm.io.RepeatableFileInputStream) LinkedHashMap(java.util.LinkedHashMap) ProgressListener(com.aliyun.oss.event.ProgressListener) RequestMessage(com.aliyun.oss.common.comm.RequestMessage) ClientException(com.aliyun.oss.ClientException) ObjectMetadata(com.aliyun.oss.model.ObjectMetadata) IOUtils.checkFile(com.aliyun.oss.common.utils.IOUtils.checkFile) File(java.io.File)

Aggregations

ResponseHandler (com.aliyun.oss.common.comm.ResponseHandler)7 RequestMessage (com.aliyun.oss.common.comm.RequestMessage)6 ArrayList (java.util.ArrayList)5 ClientException (com.aliyun.oss.ClientException)4 ResponseMessage (com.aliyun.oss.common.comm.ResponseMessage)4 ServiceException (com.aliyun.oss.ServiceException)3 ByteArrayInputStream (java.io.ByteArrayInputStream)3 HashMap (java.util.HashMap)3 LinkedHashMap (java.util.LinkedHashMap)3 ExecutionContext (com.aliyun.oss.common.comm.ExecutionContext)2 ClientConfiguration (com.aliyun.oss.ClientConfiguration)1 OSSException (com.aliyun.oss.OSSException)1 RequestSigner (com.aliyun.oss.common.auth.RequestSigner)1 RequestChecksumHanlder (com.aliyun.oss.common.comm.RequestChecksumHanlder)1 RequestHandler (com.aliyun.oss.common.comm.RequestHandler)1 RequestProgressHanlder (com.aliyun.oss.common.comm.RequestProgressHanlder)1 ResponseChecksumHandler (com.aliyun.oss.common.comm.ResponseChecksumHandler)1 ResponseProgressHandler (com.aliyun.oss.common.comm.ResponseProgressHandler)1 RepeatableFileInputStream (com.aliyun.oss.common.comm.io.RepeatableFileInputStream)1 ResponseParseException (com.aliyun.oss.common.parser.ResponseParseException)1