Skip to content

Commit 6c634be

Browse files
authored
Merge pull request #244 from tencentyun/dev/error_code_retry
post bucket inventory
2 parents 143caa8 + 410a000 commit 6c634be

File tree

9 files changed

+160
-24
lines changed

9 files changed

+160
-24
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [5.6.246.2]
9+
- post bucket inventory
10+
811
## [5.6.246]
912
- rename fault tolerant
1013

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.qcloud</groupId>
66
<artifactId>cos_api</artifactId>
7-
<version>5.6.246</version>
7+
<version>5.6.246.2</version>
88
<packaging>jar</packaging>
99
<name>cos-java-sdk</name>
1010
<description>java sdk for qcloud cos</description>

src/main/java/com/qcloud/cos/COSClient.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3761,7 +3761,7 @@ public SetBucketInventoryConfigurationResult setBucketInventoryConfiguration(
37613761
request.addParameter("id", id);
37623762

37633763
if (!setBucketInventoryConfigurationRequest.IsUseInventoryText()) {
3764-
final byte[] bytes = new BucketConfigurationXmlFactory().convertToXmlByteArray(inventoryConfiguration);
3764+
final byte[] bytes = new BucketConfigurationXmlFactory().convertToXmlByteArray(inventoryConfiguration, false);
37653765
request.addHeader("Content-Length", String.valueOf(bytes.length));
37663766
request.addHeader("Content-Type", "application/xml");
37673767
request.setContent(new ByteArrayInputStream(bytes));
@@ -3791,6 +3791,40 @@ public ListBucketInventoryConfigurationsResult listBucketInventoryConfigurations
37913791

37923792
return invoke(request, new Unmarshallers.ListBucketInventoryConfigurationsUnmarshaller());
37933793
}
3794+
3795+
public PostBucketInventoryConfigurationResult postBucketInventoryConfiguration(
3796+
SetBucketInventoryConfigurationRequest setBucketInventoryConfigurationRequest)
3797+
throws CosClientException, CosServiceException {
3798+
rejectNull(setBucketInventoryConfigurationRequest, "The request cannot be null");
3799+
rejectNull(setBucketInventoryConfigurationRequest.getBucketName(), "The bucketName cannot be null");
3800+
rejectNull(setBucketInventoryConfigurationRequest.getInventoryConfiguration(), "The inventoryConfiguration cannot be null");
3801+
rejectNull(setBucketInventoryConfigurationRequest.getInventoryConfiguration().getId(), "The inventoryConfiguration.id cannot be null");
3802+
final String bucketName = setBucketInventoryConfigurationRequest.getBucketName();
3803+
final InventoryConfiguration inventoryConfiguration = setBucketInventoryConfigurationRequest.getInventoryConfiguration();
3804+
final String id = inventoryConfiguration.getId();
3805+
3806+
CosHttpRequest<SetBucketInventoryConfigurationRequest> request = createRequest(bucketName, null, setBucketInventoryConfigurationRequest, HttpMethodName.POST);
3807+
request.addParameter("inventory", null);
3808+
request.addParameter("id", id);
3809+
3810+
if (!setBucketInventoryConfigurationRequest.IsUseInventoryText()) {
3811+
final byte[] bytes = new BucketConfigurationXmlFactory().convertToXmlByteArray(inventoryConfiguration, true);
3812+
request.addHeader("Content-Length", String.valueOf(bytes.length));
3813+
request.addHeader("Content-Type", "application/xml");
3814+
request.setContent(new ByteArrayInputStream(bytes));
3815+
} else {
3816+
final String contentStr = setBucketInventoryConfigurationRequest.getInventoryText();
3817+
if (contentStr == null || contentStr.length() <= 0) {
3818+
throw new IllegalArgumentException("The inventory text should be specified");
3819+
}
3820+
request.addHeader("Content-Length", String.valueOf(contentStr.length()));
3821+
request.addHeader("Content-Type", "application/xml");
3822+
request.setContent(new ByteArrayInputStream(contentStr.getBytes(StringUtils.UTF8)));
3823+
}
3824+
3825+
return invoke(request, new Unmarshallers.PostBucketInventoryConfigurationUnmarshaller());
3826+
}
3827+
37943828
@Override
37953829
public BucketTaggingConfiguration getBucketTaggingConfiguration(String bucketName) {
37963830
return getBucketTaggingConfiguration(new GetBucketTaggingConfigurationRequest(bucketName));

src/main/java/com/qcloud/cos/demo/BucketInventoryDemo.java

Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.qcloud.cos.model.ListBucketInventoryConfigurationsResult;
1010
import com.qcloud.cos.model.SetBucketInventoryConfigurationRequest;
1111
import com.qcloud.cos.model.DeleteBucketInventoryConfigurationRequest;
12+
import com.qcloud.cos.model.PostBucketInventoryConfigurationResult;
1213
import com.qcloud.cos.model.inventory.InventoryConfiguration;
1314
import com.qcloud.cos.model.inventory.InventoryCosBucketDestination;
1415
import com.qcloud.cos.model.inventory.InventoryFrequency;
@@ -26,21 +27,34 @@
2627
import java.util.List;
2728

2829
public class BucketInventoryDemo {
30+
private static String secretId = System.getenv("SECRETID");
31+
private static String secretKey = System.getenv("SECRETKEY");
32+
private static String bucketName = System.getenv("BUCKET_NAME");
33+
private static String region = System.getenv("REGION");
34+
private static COSClient cosClient = createCli();
35+
2936
public static void main(String[] args) {
30-
setGetDeleteBucketInventoryDemo();
31-
setBucketInventoryDemo();
37+
try {
38+
setGetDeleteBucketInventoryDemo();
39+
setBucketInventoryDemo();
40+
// postBucketInventoryDemo();
41+
} catch (Exception e) {
42+
e.printStackTrace();
43+
} finally {
44+
cosClient.shutdown();
45+
}
3246
}
3347

34-
private static void setGetDeleteBucketInventoryDemo() {
35-
// 1 初始化用户身份信息(secretId, secretKey)
36-
COSCredentials cred = new BasicCOSCredentials("AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");
37-
// 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
38-
ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
39-
// 3 生成cos客户端
40-
COSClient cosclient = new COSClient(cred, clientConfig);
41-
// bucket名需包含appid
42-
String bucketName = "mybucket-12500000000";
48+
private static COSClient createCli() {
49+
// 初始化用户身份信息(secretId, secretKey)
50+
COSCredentials cred = new BasicCOSCredentials(secretId,secretKey);
51+
// 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
52+
ClientConfig clientConfig = new ClientConfig(new Region(region));
53+
// 生成cos客户端
54+
return new COSClient(cred, clientConfig);
55+
}
4356

57+
private static void setGetDeleteBucketInventoryDemo() {
4458
InventoryConfiguration inventoryConfiguration = new InventoryConfiguration();
4559
InventoryCosBucketDestination inventoryCosBucketDestination = new InventoryCosBucketDestination();
4660
// 设置清单的输出目标存储桶的格式和前缀等
@@ -70,25 +84,25 @@ private static void setGetDeleteBucketInventoryDemo() {
7084
SetBucketInventoryConfigurationRequest setBucketInventoryConfigurationRequest = new SetBucketInventoryConfigurationRequest();
7185
setBucketInventoryConfigurationRequest.setBucketName(bucketName);
7286
setBucketInventoryConfigurationRequest.setInventoryConfiguration(inventoryConfiguration);
73-
cosclient.setBucketInventoryConfiguration(setBucketInventoryConfigurationRequest);
87+
cosClient.setBucketInventoryConfiguration(setBucketInventoryConfigurationRequest);
7488

7589
inventoryConfiguration.setId("2");
7690
inventorySchedule.setFrequency(InventoryFrequency.Weekly);
77-
cosclient.setBucketInventoryConfiguration(setBucketInventoryConfigurationRequest);
91+
cosClient.setBucketInventoryConfiguration(setBucketInventoryConfigurationRequest);
7892

7993
// 获取指定id的清单配置
80-
GetBucketInventoryConfigurationResult getBucketInventoryConfigurationResult = cosclient.getBucketInventoryConfiguration(bucketName, "1");
94+
GetBucketInventoryConfigurationResult getBucketInventoryConfigurationResult = cosClient.getBucketInventoryConfiguration(bucketName, "1");
8195

8296
// 批量获取清单
8397
ListBucketInventoryConfigurationsRequest listBucketInventoryConfigurationsRequest = new ListBucketInventoryConfigurationsRequest();
8498
listBucketInventoryConfigurationsRequest.setBucketName(bucketName);
85-
ListBucketInventoryConfigurationsResult listBucketInventoryConfigurationsResult = cosclient.listBucketInventoryConfigurations(listBucketInventoryConfigurationsRequest);
99+
ListBucketInventoryConfigurationsResult listBucketInventoryConfigurationsResult = cosClient.listBucketInventoryConfigurations(listBucketInventoryConfigurationsRequest);
86100

87101
// 删除指定清单
88102
DeleteBucketInventoryConfigurationRequest deleteBucketInventoryConfigurationRequest = new DeleteBucketInventoryConfigurationRequest();
89103
deleteBucketInventoryConfigurationRequest.setBucketName(bucketName);
90104
deleteBucketInventoryConfigurationRequest.setId("1");
91-
cosclient.deleteBucketInventoryConfiguration(deleteBucketInventoryConfigurationRequest);
105+
cosClient.deleteBucketInventoryConfiguration(deleteBucketInventoryConfigurationRequest);
92106
}
93107

94108
private static void setBucketInventoryDemo() {
@@ -144,4 +158,34 @@ private static void setBucketInventoryDemo() {
144158
cosclient.setBucketInventoryConfiguration(request);
145159
cosclient.shutdown();
146160
}
161+
162+
private static void postBucketInventoryDemo() {
163+
InventoryConfiguration inventoryConfiguration = new InventoryConfiguration();
164+
InventoryCosBucketDestination inventoryCosBucketDestination = new InventoryCosBucketDestination();
165+
// 设置清单的输出目标存储桶的格式和前缀等
166+
inventoryCosBucketDestination.setAccountId("100000000001");
167+
inventoryCosBucketDestination.setBucketArn("qcs::cos:ap-guangzhou::mybucket-12500000000");
168+
inventoryCosBucketDestination.setEncryption(new ServerSideEncryptionCOS());
169+
inventoryCosBucketDestination.setFormat(InventoryFormat.CSV);
170+
inventoryCosBucketDestination.setPrefix("inventory-output");
171+
InventoryDestination inventoryDestination = new InventoryDestination();
172+
inventoryDestination.setCosBucketDestination(inventoryCosBucketDestination);
173+
inventoryConfiguration.setDestination(inventoryDestination);
174+
175+
// 设置清单的调度周期,扫描前缀和id等
176+
inventoryConfiguration.setId("4");
177+
InventoryPrefixPredicate inventoryFilter = new InventoryPrefixPredicate("test/");
178+
inventoryConfiguration.setInventoryFilter(new InventoryFilter(inventoryFilter));
179+
inventoryConfiguration.setIncludedObjectVersions(InventoryIncludedObjectVersions.All);
180+
// 设置可选的输出字段
181+
List<String> optionalFields = new LinkedList<String>();
182+
optionalFields.add(InventoryOptionalField.Size.toString());
183+
optionalFields.add(InventoryOptionalField.LastModifiedDate.toString());
184+
inventoryConfiguration.setOptionalFields(optionalFields);
185+
SetBucketInventoryConfigurationRequest setBucketInventoryConfigurationRequest = new SetBucketInventoryConfigurationRequest();
186+
setBucketInventoryConfigurationRequest.setBucketName(bucketName);
187+
setBucketInventoryConfigurationRequest.setInventoryConfiguration(inventoryConfiguration);
188+
PostBucketInventoryConfigurationResult result = cosClient.postBucketInventoryConfiguration(setBucketInventoryConfigurationRequest);
189+
System.out.println("finish post bucket inventory, jobId: " + result.getJobId() + ", reqId: " + result.getRequestId());
190+
}
147191
}

src/main/java/com/qcloud/cos/internal/Unmarshallers.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,15 @@ public SetBucketInventoryConfigurationResult unmarshall(InputStream in) throws E
423423
return new SetBucketInventoryConfigurationResult();
424424
}
425425
}
426+
427+
public static final class PostBucketInventoryConfigurationUnmarshaller implements
428+
Unmarshaller<PostBucketInventoryConfigurationResult, InputStream> {
429+
430+
public PostBucketInventoryConfigurationResult unmarshall(InputStream in) throws Exception {
431+
return new XmlResponsesSaxParser().parsePostBucketInventoryConfigurationsResponse(in).getResult();
432+
}
433+
}
434+
426435
public static final class GetObjectTaggingResponseUnmarshaller implements Unmarshaller<GetObjectTaggingResult, InputStream> {
427436

428437
@Override

src/main/java/com/qcloud/cos/internal/XmlResponsesSaxParser.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,13 @@ public ListBucketInventoryConfigurationsHandler parseBucketListInventoryConfigur
637637
return handler;
638638
}
639639

640+
public PostBucketInventoryConfigurationsHandler parsePostBucketInventoryConfigurationsResponse(InputStream inputStream)
641+
throws IOException {
642+
PostBucketInventoryConfigurationsHandler handler = new PostBucketInventoryConfigurationsHandler();
643+
parseXmlInputStream(handler, inputStream);
644+
return handler;
645+
}
646+
640647
public GetObjectTaggingHandler parseObjectTaggingResponse(InputStream inputStream) throws IOException {
641648
GetObjectTaggingHandler handler = new GetObjectTaggingHandler();
642649
parseXmlInputStream(handler, inputStream);
@@ -7088,5 +7095,31 @@ else if (in("ListAllMyBucketsResult", "Buckets", "Bucket")) {
70887095
}
70897096
}
70907097
}
7098+
7099+
public static class PostBucketInventoryConfigurationsHandler extends AbstractHandler {
7100+
private final PostBucketInventoryConfigurationResult result = new PostBucketInventoryConfigurationResult();
7101+
7102+
public PostBucketInventoryConfigurationResult getResult() {
7103+
return result;
7104+
}
7105+
7106+
@Override
7107+
protected void doStartElement(
7108+
String uri,
7109+
String name,
7110+
String qName,
7111+
Attributes attrs) {
7112+
}
7113+
7114+
@Override
7115+
protected void doEndElement(String uri, String name, String qName) {
7116+
7117+
if (in("PostInventoryResult")) {
7118+
if (name.equals("JobId")) {
7119+
result.setJobId(getText());
7120+
}
7121+
}
7122+
}
7123+
}
70917124
}
70927125

src/main/java/com/qcloud/cos/model/BucketConfigurationXmlFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,14 @@ public byte[] convertToXmlByteArray(BucketVersioningConfiguration versioningConf
130130
return xml.getBytes();
131131
}
132132

133-
public byte[] convertToXmlByteArray(InventoryConfiguration config) throws CosClientException {
133+
public byte[] convertToXmlByteArray(InventoryConfiguration config, boolean isOneTimeInventory) throws CosClientException {
134134
XmlWriter xml = new XmlWriter();
135135
xml.start("InventoryConfiguration");
136136

137137
xml.start("Id").value(config.getId()).end();
138-
xml.start("IsEnabled").value(String.valueOf(config.isEnabled())).end();
138+
if (!isOneTimeInventory) {
139+
xml.start("IsEnabled").value(String.valueOf(config.isEnabled())).end();
140+
}
139141
xml.start("IncludedObjectVersions").value(config.getIncludedObjectVersions()).end();
140142

141143
writeInventoryDestination(xml, config.getDestination());

src/main/java/com/qcloud/cos/model/BucketPolicy.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,9 @@ public class BucketPolicy implements Serializable {
2727
private String policyText;
2828

2929
/**
30-
* Gets the raw policy JSON text as returned by COS. If no policy has been applied to the
31-
* specified bucket, the policy text will be null.
30+
* Gets the raw policy JSON text as returned by COS.
3231
*
33-
* @return The raw policy JSON text as returned by COS. If no policy has been applied to the
34-
* specified bucket, this method returns null policy text.
32+
* @return The raw policy JSON text as returned by COS.
3533
*
3634
* @see BucketPolicy#setPolicyText(String)
3735
*/
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.qcloud.cos.model;
2+
3+
public class PostBucketInventoryConfigurationResult extends CosServiceResult {
4+
private String jobId;
5+
6+
public String getJobId() {
7+
return jobId;
8+
}
9+
10+
public void setJobId(String jobId) {
11+
this.jobId = jobId;
12+
}
13+
}

0 commit comments

Comments
 (0)