Skip to content

Commit 8b9ea69

Browse files
liyanzhang505huiguangjun
authored andcommitted
change to HEAD method in getSimplifiedObjectMeta function
1 parent 40cfa4f commit 8b9ea69

File tree

5 files changed

+97
-30
lines changed

5 files changed

+97
-30
lines changed

src/main/java/com/aliyun/oss/internal/OSSErrorResponseHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public void handle(ResponseMessage response) throws OSSException, ClientExceptio
5959
} else if (statusCode == HttpStatus.SC_PRECONDITION_FAILED) {
6060
throw ExceptionFactory.createOSSException(requestId, OSSErrorCode.PRECONDITION_FAILED,
6161
"Precondition Failed");
62+
} else if (statusCode == HttpStatus.SC_FORBIDDEN) {
63+
throw ExceptionFactory.createOSSException(requestId, OSSErrorCode.ACCESS_FORBIDDEN, "AccessForbidden");
6264
} else {
6365
throw ExceptionFactory.createUnknownOSSException(requestId, statusCode);
6466
}

src/main/java/com/aliyun/oss/internal/OSSObjectOperation.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -81,24 +81,20 @@
8181
import java.util.zip.CheckedInputStream;
8282

8383
import com.aliyun.oss.model.*;
84-
import org.apache.http.HttpStatus;
8584

8685
import com.aliyun.oss.ClientException;
8786
import com.aliyun.oss.HttpMethod;
8887
import com.aliyun.oss.OSSErrorCode;
8988
import com.aliyun.oss.OSSException;
90-
import com.aliyun.oss.ServiceException;
9189
import com.aliyun.oss.common.auth.CredentialsProvider;
9290
import com.aliyun.oss.common.comm.RequestMessage;
9391
import com.aliyun.oss.common.comm.ResponseHandler;
94-
import com.aliyun.oss.common.comm.ResponseMessage;
9592
import com.aliyun.oss.common.comm.ServiceClient;
9693
import com.aliyun.oss.common.comm.io.RepeatableFileInputStream;
9794
import com.aliyun.oss.common.parser.ResponseParser;
9895
import com.aliyun.oss.common.utils.BinaryUtil;
9996
import com.aliyun.oss.common.utils.CRC64;
10097
import com.aliyun.oss.common.utils.DateUtil;
101-
import com.aliyun.oss.common.utils.ExceptionFactory;
10298
import com.aliyun.oss.common.utils.HttpHeaders;
10399
import com.aliyun.oss.common.utils.HttpUtil;
104100
import com.aliyun.oss.common.utils.IOUtils;
@@ -444,10 +440,10 @@ public SimplifiedObjectMeta getSimplifiedObjectMeta(GenericRequest genericReques
444440
populateRequestPayerHeader(headers, genericRequest.getRequestPayer());
445441

446442
RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint())
447-
.setMethod(HttpMethod.GET).setBucket(bucketName).setKey(key).setHeaders(headers).setParameters(params)
443+
.setMethod(HttpMethod.HEAD).setBucket(bucketName).setKey(key).setHeaders(headers).setParameters(params)
448444
.setOriginalRequest(genericRequest).build();
449445

450-
return doOperation(request, getSimplifiedObjectMetaResponseParser, bucketName, key, true);
446+
return doOperation(request, getSimplifiedObjectMetaResponseParser, bucketName, key);
451447
}
452448

453449
/**
@@ -478,22 +474,7 @@ public ObjectMetadata getObjectMetadata(GenericRequest genericRequest)
478474
.setMethod(HttpMethod.HEAD).setBucket(bucketName).setKey(key).setHeaders(headers).setParameters(params)
479475
.setOriginalRequest(genericRequest).build();
480476

481-
List<ResponseHandler> reponseHandlers = new ArrayList<ResponseHandler>();
482-
reponseHandlers.add(new ResponseHandler() {
483-
484-
@Override
485-
public void handle(ResponseMessage response) throws ServiceException, ClientException {
486-
if (response.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
487-
safeCloseResponse(response);
488-
throw ExceptionFactory.createOSSException(
489-
response.getHeaders().get(OSSHeaders.OSS_HEADER_REQUEST_ID), OSSErrorCode.NO_SUCH_KEY,
490-
OSS_RESOURCE_MANAGER.getString("NoSuchKey"));
491-
}
492-
}
493-
494-
});
495-
496-
return doOperation(request, getObjectMetadataResponseParser, bucketName, key, true, null, reponseHandlers);
477+
return doOperation(request, getObjectMetadataResponseParser, bucketName, key);
497478
}
498479

499480
/**

src/main/java/com/aliyun/oss/internal/ResponseParsers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,7 @@ public SimplifiedObjectMeta parse(ResponseMessage response) throws ResponseParse
897897
try {
898898
return parseSimplifiedObjectMeta(response.getHeaders());
899899
} finally {
900-
OSSUtils.mandatoryCloseResponse(response);
900+
safeCloseResponse(response);
901901
}
902902
}
903903

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package com.aliyun.oss.integrationtests;
21+
22+
import com.aliyun.oss.OSS;
23+
import com.aliyun.oss.OSSClientBuilder;
24+
import com.aliyun.oss.OSSErrorCode;
25+
import com.aliyun.oss.OSSException;
26+
import com.aliyun.oss.model.ObjectMetadata;
27+
import com.aliyun.oss.model.PutObjectRequest;
28+
import org.junit.Assert;
29+
import org.junit.Test;
30+
31+
import java.io.ByteArrayInputStream;
32+
33+
public class GetObjectMetadataTest extends TestBase {
34+
35+
@Test
36+
public void testGetObjectMetaDataNormal() {
37+
String objectName = "test-obj";
38+
PutObjectRequest request = new PutObjectRequest(bucketName,objectName, new ByteArrayInputStream("123".getBytes()));
39+
ObjectMetadata meta = new ObjectMetadata();
40+
meta.addUserMetadata("my-key", "my-value");
41+
request.setMetadata(meta);
42+
43+
ossClient.putObject(request);
44+
45+
ObjectMetadata metaResult = ossClient.getObjectMetadata(bucketName, objectName);
46+
Assert.assertEquals(3, metaResult.getContentLength());
47+
Assert.assertNotNull(metaResult.getContentMD5());
48+
Assert.assertNotNull(metaResult.getETag());
49+
Assert.assertNotNull(metaResult.getObjectStorageClass());
50+
Assert.assertNotNull(metaResult.getLastModified());
51+
Assert.assertNotNull(metaResult.getRequestId());
52+
Assert.assertEquals("my-value", metaResult.getUserMetadata().get("my-key"));
53+
}
54+
55+
@Test
56+
public void testGetObjectUnNormal() {
57+
String objectName = "test-obj";
58+
PutObjectRequest request = new PutObjectRequest(bucketName,objectName, new ByteArrayInputStream("123".getBytes()));
59+
ObjectMetadata meta = new ObjectMetadata();
60+
meta.addUserMetadata("my-key", "my-value");
61+
62+
try {
63+
ossClient.getObjectMetadata(bucketName + "non-exist", objectName);
64+
} catch (OSSException e) {
65+
Assert.assertEquals(OSSErrorCode.NO_SUCH_KEY, e.getErrorCode());
66+
}
67+
68+
try {
69+
ossClient.getObjectMetadata(bucketName, objectName + "non-exist");
70+
} catch (OSSException e) {
71+
Assert.assertEquals(OSSErrorCode.NO_SUCH_KEY, e.getErrorCode());
72+
}
73+
74+
// Forbidden
75+
OSS client = new OSSClientBuilder().build(TestConfig.OSS_TEST_ENDPOINT, TestConfig.OSS_TEST_ACCESS_KEY_ID,
76+
TestConfig.OSS_TEST_ACCESS_KEY_SECRET + " ");
77+
try {
78+
client.getObjectMetadata(bucketName, objectName + "non-exist");
79+
junit.framework.Assert.fail("Get simplified object meta should not be successful");
80+
} catch (OSSException ex) {
81+
junit.framework.Assert.assertEquals(OSSErrorCode.ACCESS_FORBIDDEN, ex.getErrorCode());
82+
} finally {
83+
client.shutdown();
84+
}
85+
}
86+
}

src/test/java/com/aliyun/oss/integrationtests/GetSimplifiedObjectMetaTest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ public void testUnormalGetSimplifiedObjectMeta() throws Exception {
7575
ossClient.getSimplifiedObjectMeta(nonexistentBucket, key);
7676
Assert.fail("Get simplified object meta should not be successful");
7777
} catch (OSSException ex) {
78-
Assert.assertEquals(OSSErrorCode.NO_SUCH_BUCKET, ex.getErrorCode());
79-
Assert.assertTrue(ex.getMessage().startsWith(NO_SUCH_BUCKET_ERR));
78+
Assert.assertEquals(OSSErrorCode.NO_SUCH_KEY, ex.getErrorCode());
8079
}
8180

8281
// Try to get nonexistent object
@@ -86,17 +85,16 @@ public void testUnormalGetSimplifiedObjectMeta() throws Exception {
8685
Assert.fail("Get simplified object meta should not be successful");
8786
} catch (OSSException ex) {
8887
Assert.assertEquals(OSSErrorCode.NO_SUCH_KEY, ex.getErrorCode());
89-
Assert.assertTrue(ex.getMessage().startsWith(NO_SUCH_KEY_ERR));
9088
}
91-
92-
// SignatureDoesNotMatch
93-
OSS client = new OSSClientBuilder().build(TestConfig.OSS_TEST_ENDPOINT, TestConfig.OSS_TEST_ACCESS_KEY_ID,
89+
90+
// Forbidden
91+
OSS client = new OSSClientBuilder().build(TestConfig.OSS_TEST_ENDPOINT, TestConfig.OSS_TEST_ACCESS_KEY_ID,
9492
TestConfig.OSS_TEST_ACCESS_KEY_SECRET + " ");
9593
try {
9694
client.getSimplifiedObjectMeta(bucketName, nonexistentKey);
9795
Assert.fail("Get simplified object meta should not be successful");
9896
} catch (OSSException ex) {
99-
Assert.assertEquals(OSSErrorCode.SIGNATURE_DOES_NOT_MATCH, ex.getErrorCode());
97+
Assert.assertEquals(OSSErrorCode.ACCESS_FORBIDDEN, ex.getErrorCode());
10098
} finally {
10199
client.shutdown();
102100
}

0 commit comments

Comments
 (0)