diff --git a/alibabacloud-gateway-sls/Teafile b/alibabacloud-gateway-sls/Teafile
index 6ac0e37d..26d337ec 100644
--- a/alibabacloud-gateway-sls/Teafile
+++ b/alibabacloud-gateway-sls/Teafile
@@ -1,7 +1,7 @@
{
"scope": "alibabacloud",
"name": "GatewaySLS",
- "version": "0.1.1",
+ "version": "0.1.2",
"main": "./main.tea",
"maintainers": [
{
@@ -92,7 +92,8 @@
},
"releaselog": {
"changelog": [
- "[go/java]feat: support parsing compressed data."
+ "[go/java]feat: support parsing compressed data.",
+ "[java]feat: support pb serialization."
],
"compatible": true
}
diff --git a/alibabacloud-gateway-sls/java/pom.xml b/alibabacloud-gateway-sls/java/pom.xml
index bc0d8680..fe26502d 100644
--- a/alibabacloud-gateway-sls/java/pom.xml
+++ b/alibabacloud-gateway-sls/java/pom.xml
@@ -59,7 +59,7 @@
com.aliyun
tea-util
- 0.2.16
+ 0.2.20
com.aliyun
diff --git a/alibabacloud-gateway-sls/java/src/main/java/com/aliyun/gateway/sls/Client.java b/alibabacloud-gateway-sls/java/src/main/java/com/aliyun/gateway/sls/Client.java
index 8a32c2fc..6ddb89ca 100644
--- a/alibabacloud-gateway-sls/java/src/main/java/com/aliyun/gateway/sls/Client.java
+++ b/alibabacloud-gateway-sls/java/src/main/java/com/aliyun/gateway/sls/Client.java
@@ -28,6 +28,7 @@ public void modifyRequest(com.aliyun.gateway.spi.models.InterceptorContext conte
String accessKeyId = credential.getAccessKeyId();
String accessKeySecret = credential.getAccessKeySecret();
String securityToken = credential.getSecurityToken();
+ String bodyRawSize = "0";
if (!com.aliyun.teautil.Common.empty(accessKeyId)) {
request.headers.put("x-log-signaturemethod", "hmac-sha1");
}
@@ -38,8 +39,12 @@ public void modifyRequest(com.aliyun.gateway.spi.models.InterceptorContext conte
if (!com.aliyun.teautil.Common.isUnset(request.body)) {
if (com.aliyun.darabonbastring.Client.equals(request.reqBodyType, "protobuf")) {
- // var bodyMap = Util.assertAsMap(request.body);
- // 缺少body的Content-MD5计算,以及protobuf处理
+ byte[] serializedBody = com.aliyun.gateway.sls.util.Client.serializeLogGroupToPB(request.body);
+ bodyRawSize = com.aliyun.gateway.sls.util.Client.getBytesLength(serializedBody);
+ String compressType = request.headers.get("x-log-compresstype");
+ byte[] compressedData = com.aliyun.gateway.sls.util.Client.readAndCompressBlock(serializedBody, compressType);
+ request.headers.put("content-md5", com.aliyun.darabonbastring.Client.toUpper(com.aliyun.darabonba.encode.Encoder.hexEncode(com.aliyun.darabonba.signature.Signer.MD5SignForBytes(compressedData))));
+ request.stream = Tea.toReadable(compressedData);
request.headers.put("content-type", "application/x-protobuf");
} else if (com.aliyun.darabonbastring.Client.equals(request.reqBodyType, "json")) {
String bodyStr = com.aliyun.teautil.Common.toJSONString(request.body);
@@ -63,7 +68,7 @@ public void modifyRequest(com.aliyun.gateway.spi.models.InterceptorContext conte
new TeaPair("date", com.aliyun.teautil.Common.getDateUTCString()),
new TeaPair("user-agent", request.userAgent),
new TeaPair("x-log-apiversion", "0.6.0"),
- new TeaPair("x-log-bodyrawsize", "0")
+ new TeaPair("x-log-bodyrawsize", bodyRawSize)
),
request.headers
);
diff --git a/alibabacloud-gateway-sls/main.tea b/alibabacloud-gateway-sls/main.tea
index bd044640..b268f8b5 100644
--- a/alibabacloud-gateway-sls/main.tea
+++ b/alibabacloud-gateway-sls/main.tea
@@ -32,6 +32,7 @@ async function modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.
var accessKeyId = credential.getAccessKeyId();
var accessKeySecret = credential.getAccessKeySecret();
var securityToken = credential.getSecurityToken();
+ var bodyRawSize = '0';
if (!Util.empty(accessKeyId)) {
request.headers['x-log-signaturemethod'] = 'hmac-sha1';
}
@@ -40,8 +41,12 @@ async function modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.
}
if (!Util.isUnset(request.body)) {
if (String.equals(request.reqBodyType, 'protobuf')) {
- // var bodyMap = Util.assertAsMap(request.body);
- // 缺少body的Content-MD5计算,以及protobuf处理
+ var serializedBody = SLS_Util.serializeLogGroupToPB(request.body);
+ bodyRawSize = SLS_Util.getBytesLength(serializedBody);
+ var compressType = request.headers['x-log-compresstype'];
+ var compressedData = SLS_Util.readAndCompressBlock(serializedBody, compressType);
+ request.headers['content-md5'] = String.toUpper(EncodeUtil.hexEncode(SignatureUtil.MD5SignForBytes(compressedData)));
+ request.stream = compressedData;
request.headers['content-type'] = 'application/x-protobuf';
} else if (String.equals(request.reqBodyType, 'json')) {
var bodyStr = Util.toJSONString(request.body);
@@ -62,7 +67,7 @@ async function modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.
date = Util.getDateUTCString(),
user-agent = request.userAgent,
x-log-apiversion = '0.6.0',
- x-log-bodyrawsize = '0',
+ x-log-bodyrawsize = bodyRawSize,
...request.headers
};
request.headers['authorization'] = getAuthorization(request.pathname, request.method, request.query, request.headers, accessKeyId, accessKeySecret);
diff --git a/alibabacloud-gateway-sls/util/Teafile b/alibabacloud-gateway-sls/util/Teafile
index 1ba27db3..c6ac1195 100644
--- a/alibabacloud-gateway-sls/util/Teafile
+++ b/alibabacloud-gateway-sls/util/Teafile
@@ -1,7 +1,7 @@
{
"scope": "alibabacloud",
"name": "GatewaySLS_Util",
- "version": "0.0.1",
+ "version": "0.0.2",
"main": "./main.tea",
"maintainers": [
{
diff --git a/alibabacloud-gateway-sls/util/java/pom.xml b/alibabacloud-gateway-sls/util/java/pom.xml
index 20f80911..cede2689 100644
--- a/alibabacloud-gateway-sls/util/java/pom.xml
+++ b/alibabacloud-gateway-sls/util/java/pom.xml
@@ -61,6 +61,11 @@
tea-util
0.2.14
+
+ com.google.protobuf
+ protobuf-java
+ 2.5.0
+
diff --git a/alibabacloud-gateway-sls/util/java/src/main/java/com/aliyun/gateway/sls/util/Client.java b/alibabacloud-gateway-sls/util/java/src/main/java/com/aliyun/gateway/sls/util/Client.java
index 582ec9fb..eecc57b9 100644
--- a/alibabacloud-gateway-sls/util/java/src/main/java/com/aliyun/gateway/sls/util/Client.java
+++ b/alibabacloud-gateway-sls/util/java/src/main/java/com/aliyun/gateway/sls/util/Client.java
@@ -1,8 +1,15 @@
// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.gateway.sls.util;
+import com.aliyun.tea.TeaConverter;
+import com.aliyun.tea.TeaException;
+import com.aliyun.tea.TeaPair;
+
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.HashMap;
public class Client {
@@ -13,4 +20,76 @@ public static InputStream readAndUncompressBlock(InputStream stream, String comp
String data = new String(rawData, "UTF-8");
return new ByteArrayInputStream(data.getBytes());
}
-}
\ No newline at end of file
+
+ public static byte[] readAndCompressBlock(byte[] stream, String compressType) throws Exception {
+ byte[] compressedData = CompressorFactory.getCompressor(compressType).compress(stream);
+ return compressedData;
+ }
+
+ public static byte[] serializeLogGroupToPB(Object logGroup) throws Exception {
+ byte[] logBytes = null;
+ Logs.LogGroup.Builder logs = Logs.LogGroup.newBuilder();
+ HashMap body;
+ if (logGroup instanceof HashMap) {
+ body = (HashMap) logGroup;
+ } else {
+ throw new IllegalArgumentException("Invalid body type " + logGroup.getClass());
+ }
+
+ String topic = (String) body.get("Topic");
+ if (topic != null) {
+ logs.setTopic((String) body.get("Topic"));
+ } else {
+ throw new IllegalArgumentException("Topic is null");
+ }
+ String source = (String) body.get("Source");
+ if (source != null) {
+ logs.setSource((String) body.get("Source"));
+ } else {
+ try {
+ logs.setSource(InetAddress.getLocalHost().getHostAddress());
+ } catch (Exception e) {}
+ }
+
+ ArrayList