in src/main/java/com/aliyun/oss/internal/OSSObjectOperation.java [178:232]
public SelectObjectMetadata createSelectObjectMetadata(CreateSelectObjectMetadataRequest createSelectObjectMetadataRequest) throws OSSException, ClientException {
String process = createSelectObjectMetadataRequest.getProcess();
assertParameterNotNull(process, "process");
GenericRequest genericRequest = new GenericRequest(
createSelectObjectMetadataRequest.getBucketName(), createSelectObjectMetadataRequest.getKey());
genericRequest.getParameters().put(RequestParameters.SUBRESOURCE_PROCESS, process);
String bucketName = genericRequest.getBucketName();
String key = genericRequest.getKey();
assertParameterNotNull(bucketName, "bucketName");
assertParameterNotNull(key, "key");
ensureBucketNameValid(bucketName);
ensureObjectKeyValid(key);
Map<String, String> headers = new HashMap<String, String>();
populateRequestPayerHeader(headers, createSelectObjectMetadataRequest.getRequestPayer());
byte[] content = createSelectObjectMetadataRequestMarshaller.marshall(createSelectObjectMetadataRequest);
RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint(createSelectObjectMetadataRequest))
.setMethod(HttpMethod.POST).setInputSize(content.length).setInputStream(new ByteArrayInputStream(content))
.setBucket(bucketName).setKey(key).setHeaders(headers).setOriginalRequest(genericRequest)
.build();
//create meta progress listener(scanned bytes)
final ProgressListener selectProgressListener = createSelectObjectMetadataRequest.getSelectProgressListener();
try {
OSSObject ossObject = doOperation(request, new GetObjectResponseParser(bucketName, key), bucketName, key, true);
publishProgress(selectProgressListener, ProgressEventType.SELECT_STARTED_EVENT);
SelectObjectMetadata selectObjectMetadata = new SelectObjectMetadata(ossObject.getObjectMetadata());
SelectObjectMetadata.SelectContentMetadataBase selectContentMetadataBase;
if (createSelectObjectMetadataRequest.getInputSerialization().getSelectContentFormat() == SelectContentFormat.CSV) {
selectObjectMetadata.setCsvObjectMetadata(new SelectObjectMetadata.CSVObjectMetadata());
selectContentMetadataBase = selectObjectMetadata.getCsvObjectMetadata();
} else {
selectObjectMetadata.setJsonObjectMetadata(new SelectObjectMetadata.JsonObjectMetadata());
selectContentMetadataBase = selectObjectMetadata.getJsonObjectMetadata();
}
InputStream in = ossObject.getObjectContent();
CreateSelectMetaInputStream warppedStream = new CreateSelectMetaInputStream(in, selectContentMetadataBase, selectProgressListener);
warppedStream.setRequestId(ossObject.getRequestId());
while (warppedStream.read() != -1) {
//read until eof
}
warppedStream.close();
return selectObjectMetadata;
} catch (IOException e) {
publishProgress(selectProgressListener, ProgressEventType.SELECT_FAILED_EVENT);
throw new RuntimeException(e);
} catch (RuntimeException e) {
publishProgress(selectProgressListener, ProgressEventType.SELECT_FAILED_EVENT);
throw e;
}
}