mirror of https://github.com/alibaba/fastjson2.git
support serialize protobuf object
This commit is contained in:
parent
95dcb9cd62
commit
17dbbca862
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
3
pom.xml
3
pom.xml
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue