Search in sources :

Example 16 with TypeDefinition

use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.

the class CollectionTypeBuilder method build.

@Override
public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {
    if (!(type instanceof ParameterizedType)) {
        return new TypeDefinition(clazz.getName());
    }
    ParameterizedType parameterizedType = (ParameterizedType) type;
    Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();
    if (actualTypeArgs == null || actualTypeArgs.length != 1) {
        throw new IllegalArgumentException(MessageFormat.format("[ServiceDefinitionBuilder] Collection type [{0}] with unexpected amount of arguments [{1}]." + Arrays.toString(actualTypeArgs), type, actualTypeArgs));
    }
    Type actualType = actualTypeArgs[0];
    if (actualType instanceof ParameterizedType) {
        // Nested collection or map.
        Class<?> rawType = (Class<?>) ((ParameterizedType) actualType).getRawType();
        TypeDefinitionBuilder.build(actualType, rawType, typeCache);
    } else if (actualType instanceof Class<?>) {
        Class<?> actualClass = (Class<?>) actualType;
        TypeDefinitionBuilder.build(null, actualClass, typeCache);
    }
    return new TypeDefinition(type.toString());
}
Also used : ParameterizedType(java.lang.reflect.ParameterizedType) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition)

Example 17 with TypeDefinition

use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.

the class EnumTypeBuilder method build.

@Override
public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {
    TypeDefinition td = new TypeDefinition(clazz.getCanonicalName());
    try {
        Method methodValues = clazz.getDeclaredMethod("values");
        Object[] values = (Object[]) methodValues.invoke(clazz, new Object[0]);
        int length = values.length;
        for (int i = 0; i < length; i++) {
            Object value = values[i];
            td.getEnums().add(value.toString());
        }
    } catch (Throwable t) {
        td.setId("-1");
    }
    typeCache.put(clazz, td);
    return td;
}
Also used : Method(java.lang.reflect.Method) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition)

Example 18 with TypeDefinition

use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.

the class MetadataTest method testExtendsMap.

@Test
public void testExtendsMap() {
    TypeDefinitionBuilder builder = new TypeDefinitionBuilder();
    TypeDefinition td = builder.build(ClassExtendsMap.class, ClassExtendsMap.class);
    System.out.println(">> testExtendsMap: " + new Gson().toJson(td));
    Assertions.assertEquals("org.apache.dubbo.metadata.definition.common.ClassExtendsMap", td.getType());
    Assertions.assertEquals(MapTypeBuilder.class.getName(), td.getTypeBuilderName());
    Assertions.assertEquals(0, td.getProperties().size());
    ServiceDefinition sd = MetadataUtils.generateMetadata(TestService.class);
    System.out.println(">> testExtendsMap: " + new Gson().toJson(sd));
    Assertions.assertEquals(TestService.class.getName(), sd.getCanonicalName());
    Assertions.assertEquals(TestService.class.getMethods().length, sd.getMethods().size());
    boolean containsType = false;
    for (TypeDefinition type : sd.getTypes()) {
        if (type.getType().equals("org.apache.dubbo.metadata.definition.common.ClassExtendsMap")) {
            containsType = true;
            break;
        }
    }
    Assertions.assertFalse(containsType);
}
Also used : TestService(org.apache.dubbo.metadata.definition.common.TestService) Gson(com.google.gson.Gson) MapTypeBuilder(org.apache.dubbo.metadata.definition.builder.MapTypeBuilder) ServiceDefinition(org.apache.dubbo.metadata.definition.model.ServiceDefinition) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition) Test(org.junit.jupiter.api.Test)

Example 19 with TypeDefinition

use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.

the class MetadataTest method testEnum.

@Test
public void testEnum() {
    TypeDefinitionBuilder builder = new TypeDefinitionBuilder();
    TypeDefinition td = builder.build(ColorEnum.class, ColorEnum.class);
    System.out.println(">> testEnum: " + new Gson().toJson(td));
    Assertions.assertEquals("org.apache.dubbo.metadata.definition.common.ColorEnum", td.getType());
    Assertions.assertEquals(EnumTypeBuilder.class.getName(), td.getTypeBuilderName());
    Assertions.assertEquals(3, td.getEnums().size());
    Assertions.assertTrue(td.getEnums().contains("RED"));
    Assertions.assertTrue(td.getEnums().contains("YELLOW"));
    Assertions.assertTrue(td.getEnums().contains("BLUE"));
    ServiceDefinition sd = MetadataUtils.generateMetadata(TestService.class);
    System.out.println(">> testEnum: " + new Gson().toJson(sd));
    Assertions.assertEquals(TestService.class.getName(), sd.getCanonicalName());
    Assertions.assertEquals(TestService.class.getMethods().length, sd.getMethods().size());
    boolean containsType = false;
    for (TypeDefinition type : sd.getTypes()) {
        if (type.getType().equals("org.apache.dubbo.metadata.definition.common.ColorEnum")) {
            containsType = true;
            break;
        }
    }
    Assertions.assertTrue(containsType);
}
Also used : TestService(org.apache.dubbo.metadata.definition.common.TestService) Gson(com.google.gson.Gson) EnumTypeBuilder(org.apache.dubbo.metadata.definition.builder.EnumTypeBuilder) ServiceDefinition(org.apache.dubbo.metadata.definition.model.ServiceDefinition) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition) Test(org.junit.jupiter.api.Test)

Example 20 with TypeDefinition

use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.

the class MetadataTest method testInnerClassType.

/**
 */
@Test
public void testInnerClassType() {
    TypeDefinitionBuilder builder = new TypeDefinitionBuilder();
    TypeDefinition td = builder.build(OuterClass.InnerClass.class, OuterClass.InnerClass.class);
    System.out.println(">> testInnerClassType: " + new Gson().toJson(td));
    Assertions.assertEquals("org.apache.dubbo.metadata.definition.common.OuterClass$InnerClass", td.getType());
    Assertions.assertEquals(1, td.getProperties().size());
    Assertions.assertNotNull(td.getProperties().get("name"));
    Assertions.assertEquals(DefaultTypeBuilder.class.getName(), td.getTypeBuilderName());
    ServiceDefinition sd = MetadataUtils.generateMetadata(TestService.class);
    System.out.println(">> testInnerClassType: " + new Gson().toJson(sd));
    Assertions.assertEquals(TestService.class.getName(), sd.getCanonicalName());
    Assertions.assertEquals(TestService.class.getMethods().length, sd.getMethods().size());
    boolean containsType = false;
    for (TypeDefinition type : sd.getTypes()) {
        if (type.getType().equals("org.apache.dubbo.metadata.definition.common.OuterClass$InnerClass")) {
            containsType = true;
            break;
        }
    }
    Assertions.assertTrue(containsType);
}
Also used : OuterClass(org.apache.dubbo.metadata.definition.common.OuterClass) TestService(org.apache.dubbo.metadata.definition.common.TestService) Gson(com.google.gson.Gson) ServiceDefinition(org.apache.dubbo.metadata.definition.model.ServiceDefinition) DefaultTypeBuilder(org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition) Test(org.junit.jupiter.api.Test)

Aggregations

TypeDefinition (org.apache.dubbo.metadata.definition.model.TypeDefinition)24 Type (java.lang.reflect.Type)7 Test (org.junit.jupiter.api.Test)6 MethodDefinition (org.apache.dubbo.metadata.definition.model.MethodDefinition)5 ServiceDefinition (org.apache.dubbo.metadata.definition.model.ServiceDefinition)5 Gson (com.google.gson.Gson)4 Method (java.lang.reflect.Method)4 TestService (org.apache.dubbo.metadata.definition.common.TestService)4 HashMap (java.util.HashMap)3 ParameterizedType (java.lang.reflect.ParameterizedType)2 ArrayList (java.util.ArrayList)2 DefaultTypeBuilder (org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder)2 MapTypeBuilder (org.apache.dubbo.metadata.definition.builder.MapTypeBuilder)2 ByteString (com.google.protobuf.ByteString)1 GeneratedMessageV3 (com.google.protobuf.GeneratedMessageV3)1 ProtocolStringList (com.google.protobuf.ProtocolStringList)1 Annotation (java.lang.annotation.Annotation)1 Field (java.lang.reflect.Field)1 List (java.util.List)1 Map (java.util.Map)1