Skip to content

Commit a7f56a3

Browse files
vio-linbeiwei30
authored andcommitted
[DUBBO-4010] TypeDefinitonBuilder support google protobuf entity build # (#4011)
* add protobuf typeDefinitionBuilder * fix pull request comment add test case to test NestPbType
1 parent 52cbfc9 commit a7f56a3

File tree

11 files changed

+426
-24
lines changed

11 files changed

+426
-24
lines changed

dubbo-metadata-report/dubbo-metadata-definition/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
<version>${revision}</version>
2222
</parent>
2323
<modelVersion>4.0.0</modelVersion>
24-
2524
<artifactId>dubbo-metadata-definition</artifactId>
2625

2726

dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,13 @@
1616
*/
1717
package org.apache.dubbo.metadata.definition;
1818

19-
import org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder;
20-
import org.apache.dubbo.metadata.definition.builder.CollectionTypeBuilder;
19+
import org.apache.dubbo.common.extension.ExtensionLoader;
2120
import org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder;
22-
import org.apache.dubbo.metadata.definition.builder.EnumTypeBuilder;
23-
import org.apache.dubbo.metadata.definition.builder.MapTypeBuilder;
2421
import org.apache.dubbo.metadata.definition.builder.TypeBuilder;
2522
import org.apache.dubbo.metadata.definition.model.TypeDefinition;
2623

2724
import java.lang.reflect.Type;
2825
import java.util.ArrayList;
29-
import java.util.Arrays;
3026
import java.util.HashMap;
3127
import java.util.List;
3228
import java.util.Map;
@@ -35,13 +31,16 @@
3531
* 2015/1/27.
3632
*/
3733
public class TypeDefinitionBuilder {
34+
private static final List<TypeBuilder> BUILDERS;
3835

39-
private static final TypeBuilder ARRAY_BUILDER = new ArrayTypeBuilder();
40-
private static final TypeBuilder COLLECTION_BUILDER = new CollectionTypeBuilder();
41-
private static final TypeBuilder MAP_BUILDER = new MapTypeBuilder();
42-
private static final TypeBuilder ENUM_BUILDER = new EnumTypeBuilder();
43-
44-
private static final List<TypeBuilder> BUILDERS = Arrays.asList(ARRAY_BUILDER, COLLECTION_BUILDER, MAP_BUILDER, ENUM_BUILDER);
36+
static{
37+
List<TypeBuilder> builders = new ArrayList<>();
38+
ExtensionLoader<TypeBuilder> extensionLoader = ExtensionLoader.getExtensionLoader(TypeBuilder.class);
39+
for(String extensionName : extensionLoader.getSupportedExtensions()){
40+
builders.add(extensionLoader.getExtension(extensionName));
41+
}
42+
BUILDERS = builders;
43+
}
4544

4645
public static TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {
4746
TypeBuilder builder = getGenericTypeBuilder(type, clazz);

dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinit
4949
Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();
5050
if (actualTypeArgs == null || actualTypeArgs.length != 1) {
5151
throw new IllegalArgumentException(MessageFormat.format(
52-
"[ServiceDefinitionBuilder] Collection type [{0}] with unexpected amount of arguments [{1}]." + Arrays.toString(actualTypeArgs),
52+
"[ServiceDefinitionBuilder] Collection type [{0}] with unexpected amount of arguments [{1}]."
53+
+ Arrays.toString(actualTypeArgs),
5354
type, actualTypeArgs));
5455
}
5556

@@ -60,11 +61,7 @@ public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinit
6061
TypeDefinitionBuilder.build(actualType, rawType, typeCache);
6162
} else if (actualType instanceof Class<?>) {
6263
Class<?> actualClass = (Class<?>) actualType;
63-
if (actualClass.isArray() || actualClass.isEnum()) {
64-
TypeDefinitionBuilder.build(null, actualClass, typeCache);
65-
} else {
66-
DefaultTypeBuilder.build(actualClass, typeCache);
67-
}
64+
TypeDefinitionBuilder.build(null, actualClass, typeCache);
6865
}
6966

7067
return new TypeDefinition(type.toString());

dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinit
4848
Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();
4949
if (actualTypeArgs == null || actualTypeArgs.length != 2) {
5050
throw new IllegalArgumentException(MessageFormat.format(
51-
"[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}]." + Arrays.toString(actualTypeArgs), type, actualTypeArgs));
51+
"[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}]."
52+
+ Arrays.toString(actualTypeArgs), type, actualTypeArgs));
5253
}
5354

5455
for (Type actualType : actualTypeArgs) {
@@ -58,11 +59,7 @@ public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinit
5859
TypeDefinitionBuilder.build(actualType, rawType, typeCache);
5960
} else if (actualType instanceof Class<?>) {
6061
Class<?> actualClass = (Class<?>) actualType;
61-
if (actualClass.isArray() || actualClass.isEnum()) {
62-
TypeDefinitionBuilder.build(null, actualClass, typeCache);
63-
} else {
64-
DefaultTypeBuilder.build(actualClass, typeCache);
65-
}
62+
TypeDefinitionBuilder.build(null, actualClass, typeCache);
6663
}
6764
}
6865

dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.apache.dubbo.metadata.definition.builder;
1818

19+
import org.apache.dubbo.common.extension.SPI;
1920
import org.apache.dubbo.metadata.definition.model.TypeDefinition;
2021

2122
import java.lang.reflect.Type;
@@ -24,6 +25,7 @@
2425
/**
2526
* 2015/1/27.
2627
*/
28+
@SPI
2729
public interface TypeBuilder {
2830

2931
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
array=org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder
2+
collection=org.apache.dubbo.metadata.definition.builder.CollectionTypeBuilder
3+
map=org.apache.dubbo.metadata.definition.builder.MapTypeBuilder
4+
enum=org.apache.dubbo.metadata.definition.builder.EnumTypeBuilder

dubbo-serialization/dubbo-serialization-protobuf-json/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,10 @@ limitations under the License.
4242
<groupId>com.google.protobuf</groupId>
4343
<artifactId>protobuf-java-util</artifactId>
4444
</dependency>
45+
<dependency>
46+
<groupId>org.apache.dubbo</groupId>
47+
<artifactId>dubbo-metadata-definition</artifactId>
48+
<version>${project.parent.version}</version>
49+
</dependency>
4550
</dependencies>
4651
</project>

0 commit comments

Comments
 (0)