Skip to content

common api 增加公共访问接口 #527

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/com/aliyun/oss/OSS.java
Original file line number Diff line number Diff line change
Expand Up @@ -5200,4 +5200,14 @@ public UdfApplicationLog getUdfApplicationLog(GetUdfApplicationLogRequest getUdf
* If any errors occurred in OSS while processing the request.
*/
public VoidResult writeGetObjectResponse(WriteGetObjectResponseRequest writeGetObjectResponseRequest) throws OSSException, ClientException;

/**
* invoke operation
*
* @param request request
* @return result
* @throws OSSException
* @throws ClientException
*/
<T> CommonApiResult<T> invokeOperation(CommonApiRequest<T> request) throws OSSException, ClientException;
}
11 changes: 11 additions & 0 deletions src/main/java/com/aliyun/oss/OSSClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public class OSSClient implements OSS {
private OSSUploadOperation uploadOperation;
private OSSDownloadOperation downloadOperation;
private LiveChannelOperation liveChannelOperation;
private OSSCommonOperation ossCommonOperation;

/**Gets the inner multipartOperation, used for subclass to do implement opreation.
* @return the {@link OSSMultipartOperation} instance.
Expand Down Expand Up @@ -266,6 +267,7 @@ public synchronized void setEndpoint(String endpoint) {
this.multipartOperation.setEndpoint(uri);
this.corsOperation.setEndpoint(uri);
this.liveChannelOperation.setEndpoint(uri);
this.ossCommonOperation.setEndpoint(uri);
}

/**
Expand Down Expand Up @@ -327,6 +329,7 @@ private void initOperations() {
this.uploadOperation = new OSSUploadOperation(this.multipartOperation);
this.downloadOperation = new OSSDownloadOperation(objectOperation);
this.liveChannelOperation = new LiveChannelOperation(this.serviceClient, this.credsProvider);
this.ossCommonOperation = new OSSCommonOperation(this.serviceClient, this.credsProvider);
}

private void initDefaultsByEndpoint() {
Expand Down Expand Up @@ -371,6 +374,7 @@ public void setProduct(String product) {
this.multipartOperation.setProduct(product);
this.corsOperation.setProduct(product);
this.liveChannelOperation.setProduct(product);
this.ossCommonOperation.setProduct(product);
}

/**
Expand All @@ -385,6 +389,7 @@ public void setRegion(String region) {
this.multipartOperation.setRegion(region);
this.corsOperation.setRegion(region);
this.liveChannelOperation.setRegion(region);
this.ossCommonOperation.setRegion(region);
}

/**
Expand All @@ -398,6 +403,7 @@ public void setCloudBoxId(String cloudBoxId) {
this.multipartOperation.setCloudBoxId(cloudBoxId);
this.corsOperation.setCloudBoxId(cloudBoxId);
this.liveChannelOperation.setCloudBoxId(cloudBoxId);
this.ossCommonOperation.setCloudBoxId(cloudBoxId);
}


Expand Down Expand Up @@ -1997,6 +2003,11 @@ public VoidResult writeGetObjectResponse(WriteGetObjectResponseRequest writeGetO
return this.objectOperation.writeGetObjectResponse(writeGetObjectResponseRequest);
}

@Override
public <T> CommonApiResult<T> invokeOperation(CommonApiRequest<T> request) throws OSSException, ClientException{
return this.ossCommonOperation.invokeOperation(request);
}

@Override
public void shutdown() {
try {
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/aliyun/oss/common/comm/RequestMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@

import java.net.URI;
import java.net.URL;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.model.WebServiceRequest;
Expand Down Expand Up @@ -62,6 +64,12 @@ public class RequestMessage extends HttpMesssage {
/* The original request provided by user */
private final WebServiceRequest originalRequest;

/**
* Only the common API is effective
* Does not affect methods such as generatePresentedUrl V1
*/
private Set<String> signedParameterNames = new HashSet<String>();

public RequestMessage(String bucketName, String key) {
this(null, bucketName, key);
}
Expand All @@ -70,6 +78,14 @@ public RequestMessage(WebServiceRequest originalRequest, String bucketName, Stri
this.originalRequest = (originalRequest == null) ? WebServiceRequest.NOOP : originalRequest;
}

public Set<String> getSignedParameterNames() {
return signedParameterNames;
}

public void setSignedParameterNames(Set<String> signedParameterNames) {
this.signedParameterNames = signedParameterNames;
}

public HttpMethod getMethod() {
return method;
}
Expand Down
54 changes: 54 additions & 0 deletions src/main/java/com/aliyun/oss/internal/OSSCommonOperation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.aliyun.oss.internal;

import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.comm.RequestMessage;
import com.aliyun.oss.common.comm.ServiceClient;
import com.aliyun.oss.common.utils.StringUtils;
import com.aliyun.oss.model.CommonApiRequest;
import com.aliyun.oss.model.CommonApiResult;

import static com.aliyun.oss.internal.OSSUtils.ensureBucketNameValid;

public class OSSCommonOperation extends OSSOperation {

public OSSCommonOperation(ServiceClient client, CredentialsProvider credentialsProvider) {
super(client, credentialsProvider);
}

/**
* common api call
*
* @param request request
* @return result
*/
public <T> CommonApiResult<T> invokeOperation(CommonApiRequest<T> request) {

if (request.getBucketName() != null) {
ensureBucketNameValid(request.getBucketName());
}

OSSRequestMessageBuilder builder = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()).
setMethod(request.getMethod()).setBucket(request.getBucketName()).setKey(request.getKey()).
setParameters(request.getParameters()).setHeaders(request.getHeaders()).setInputStream(
request.getInputStream()).setSignedParameterNames(request.getSignedParameterNames()).setOriginalRequest(request);

if (null != request.getInputSize()) {
builder.setInputSize(request.getInputSize());
}

if (null != request.getUseChunkEncoding()) {
builder.setUseChunkEncoding(request.getUseChunkEncoding());
}

if (null != request.getFixedLengthInputStream()) {
builder.setInputStreamWithLength(request.getFixedLengthInputStream());
}

RequestMessage requestMessage = builder.build();

CommonApiResult<T> result = doOperation(requestMessage, request.getResponseParser(), request.getBucketName(),
request.getKey(), true);

return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,7 @@

import java.io.InputStream;
import java.net.URI;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.*;

import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.HttpMethod;
Expand All @@ -57,6 +53,7 @@ public class OSSRequestMessageBuilder {
private boolean useChunkEncoding = false;

private WebServiceRequest originalRequest;
private Set<String> signedParameterNames = new HashSet<String>();

public OSSRequestMessageBuilder(ServiceClient innerClient) {
this.innerClient = innerClient;
Expand Down Expand Up @@ -166,6 +163,15 @@ public OSSRequestMessageBuilder setOriginalRequest(WebServiceRequest originalReq
return this;
}

public Set<String> getSignedParameterNames() {
return signedParameterNames;
}

public OSSRequestMessageBuilder setSignedParameterNames(Set<String> signedParameterNames) {
this.signedParameterNames = signedParameterNames;
return this;
}

public RequestMessage build() {
ClientConfiguration clientCofig = this.innerClient.getClientConfiguration();
Map<String, String> sentHeaders = new HashMap<String, String>(this.headers);
Expand All @@ -182,7 +188,7 @@ public RequestMessage build() {
request.setContent(this.inputStream);
request.setContentLength(this.inputSize);
request.setUseChunkEncoding(this.inputSize == -1 ? true : this.useChunkEncoding);

request.setSignedParameterNames(new HashSet<String>(this.signedParameterNames));
return request;
}

Expand Down
10 changes: 8 additions & 2 deletions src/main/java/com/aliyun/oss/internal/SignUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,8 @@ public static String buildCanonicalString(String method, String resourcePath, Re
}

// Append canonical resource to canonical string
canonicalString.append(buildCanonicalizedResource(resourcePath, request.getParameters()));
canonicalString.append(buildCanonicalizedResource(resourcePath, request.getParameters(), request.getSignedParameterNames()));


return canonicalString.toString();
}
Expand Down Expand Up @@ -194,6 +195,10 @@ public static String buildSignedURL(GeneratePresignedUrlRequest request, Credent
}

public static String buildCanonicalizedResource(String resourcePath, Map<String, String> parameters) {
return buildCanonicalizedResource(resourcePath, parameters, null);
}

public static String buildCanonicalizedResource(String resourcePath, Map<String, String> parameters, Set<String> signedParameterNames) {
assertTrue(resourcePath.startsWith("/"), "Resource path should start with slash character");

StringBuilder builder = new StringBuilder();
Expand All @@ -205,7 +210,8 @@ public static String buildCanonicalizedResource(String resourcePath, Map<String,

char separator = '?';
for (String paramName : parameterNames) {
if (!SignParameters.SIGNED_PARAMTERS.contains(paramName)) {
boolean notByParam = signedParameterNames == null || !signedParameterNames.contains(paramName);
if (!SignParameters.SIGNED_PARAMTERS.contains(paramName) && notByParam) {
continue;
}

Expand Down
83 changes: 83 additions & 0 deletions src/main/java/com/aliyun/oss/model/CommonApiRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.aliyun.oss.model;

import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.common.comm.io.FixedLengthInputStream;
import com.aliyun.oss.common.parser.ResponseParser;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;


public class CommonApiRequest<T> extends GenericRequest {

private HttpMethod method;

private InputStream inputStream;

private FixedLengthInputStream fixedLengthInputStream;

private Long inputSize;

private Boolean useChunkEncoding;

private ResponseParser<CommonApiResult<T>> responseParser;

private Set<String> signedParameterNames = new HashSet<String>();

public Set<String> getSignedParameterNames() {
return signedParameterNames;
}

public void setSignedParameterNames(Set<String> signedParameterNames) {
this.signedParameterNames = signedParameterNames;
}

public HttpMethod getMethod() {
return method;
}

public void setMethod(HttpMethod method) {
this.method = method;
}

public InputStream getInputStream() {
return inputStream;
}

public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}

public FixedLengthInputStream getFixedLengthInputStream() {
return fixedLengthInputStream;
}

public void setFixedLengthInputStream(FixedLengthInputStream fixedLengthInputStream) {
this.fixedLengthInputStream = fixedLengthInputStream;
}

public Long getInputSize() {
return inputSize;
}

public void setInputSize(Long inputSize) {
this.inputSize = inputSize;
}

public Boolean getUseChunkEncoding() {
return useChunkEncoding;
}

public void setUseChunkEncoding(Boolean useChunkEncoding) {
this.useChunkEncoding = useChunkEncoding;
}

public ResponseParser<CommonApiResult<T>> getResponseParser() {
return responseParser;
}

public void setResponseParser(
ResponseParser<CommonApiResult<T>> responseParser) {
this.responseParser = responseParser;
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/aliyun/oss/model/CommonApiResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.aliyun.oss.model;

public class CommonApiResult<T> extends GenericResult {

private T result;

public T getResult() {
return result;
}

public void setResult(T result) {
this.result = result;
}
}