support serialize protobuf object

This commit is contained in:
shaojin.wensj 2022-11-26 14:38:39 +08:00
parent 95dcb9cd62
commit 17dbbca862
5 changed files with 5895 additions and 1 deletions

View File

@ -117,6 +117,11 @@
<artifactId>guava</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>

View File

@ -185,6 +185,20 @@ public class ObjectWriterCreatorASM
}
boolean record = BeanUtils.isRecord(objectClass);
Class superClass = objectClass.getSuperclass();
boolean protobufMessageV3 = superClass != null && superClass.getName().equals("com.google.protobuf.GeneratedMessageV3");
Class superClass1, superClass2;
if (protobufMessageV3) {
superClass1 = superClass.getSuperclass();
if (superClass1 != null) {
superClass2 = superClass1.getSuperclass();
} else {
superClass2 = null;
}
} else {
superClass1 = null;
superClass2 = null;
}
List<FieldWriter> fieldWriters;
if (fieldBased && !record) {
@ -195,6 +209,19 @@ public class ObjectWriterCreatorASM
return;
}
Class<?> declaring = field.getDeclaringClass();
if (protobufMessageV3) {
if (declaring == superClass || declaring == superClass1 || declaring == superClass2) {
return;
}
String fieldName = field.getName();
Class<?> fieldClass = field.getType();
if ("cardsmap_".equals(fieldName) && fieldClass.getName().equals("com.google.protobuf.MapField")) {
return;
}
//cardsmap_
}
fieldInfo.init();
FieldWriter fieldWriter = creteFieldWriter(objectClass, writerFeatures, provider.modules, beanInfo, fieldInfo, field);
if (fieldWriter != null) {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
package com.alibaba.fastjson2.dubbo;
import com.alibaba.fastjson2.JSONB;
import com.alibaba.fastjson2.JSONWriter;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertNotNull;
public class GoogleProtobufBasicTest {
@Test
public void test() {
GoogleProtobufBasic.GooglePBRequestType requestType = GoogleProtobufBasic.GooglePBRequestType.newBuilder()
.setString("some string from client")
.build();
JSONWriter.Feature[] features = {
JSONWriter.Feature.WriteClassName,
JSONWriter.Feature.FieldBased,
JSONWriter.Feature.ReferenceDetection,
JSONWriter.Feature.WriteNulls,
JSONWriter.Feature.NotWriteDefaultValue,
JSONWriter.Feature.NotWriteHashMapArrayListClassName,
JSONWriter.Feature.WriteNameAsSymbol
};
byte[] jsonbBytes = JSONB.toBytes(
requestType,
features
);
assertNotNull(jsonbBytes);
}
}

View File

@ -612,7 +612,8 @@
com/alibaba/fastjson/issue_1300/Issue1367_jaxrs.java,
com/fasterxml/jackson/core/*.java,
com/fasterxml/jackson/databind/*.java,
com/alibaba/fastjson2/adapter/http/*.java
com/alibaba/fastjson2/adapter/http/*.java,
com/alibaba/fastjson2/dubbo/GoogleProtobufBasic.java
</excludes>
</configuration>
</execution>