Search in sources :

Example 21 with TypeDefinition

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

the class ProtobufTypeBuilder method build.

@Override
public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {
    TypeDefinition typeDefinition = new TypeDefinition(clazz.getName());
    try {
        GeneratedMessageV3.Builder builder = getMessageBuilder(clazz);
        typeDefinition = buildProtobufTypeDefinition(clazz, builder, typeCache);
    } catch (Exception e) {
        logger.info("TypeDefinition build failed.", e);
    }
    return typeDefinition;
}
Also used : GeneratedMessageV3(com.google.protobuf.GeneratedMessageV3) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition)

Example 22 with TypeDefinition

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

the class MetadataUtils method generateMetadata.

/**
 * com.taobao.hsf.metadata.store.MetadataInfoStoreServiceRedis.publishClassInfo(ServiceMetadata) 生成元数据的代码
 */
public static ServiceDefinition generateMetadata(Class<?> interfaceClass) {
    ServiceDefinition sd = new ServiceDefinition();
    sd.setCanonicalName(interfaceClass.getCanonicalName());
    sd.setCodeSource(ClassUtils.getCodeSource(interfaceClass));
    TypeDefinitionBuilder builder = new TypeDefinitionBuilder();
    List<Method> methods = ClassUtils.getPublicNonStaticMethods(interfaceClass);
    for (Method method : methods) {
        MethodDefinition md = new MethodDefinition();
        md.setName(method.getName());
        Class<?>[] paramTypes = method.getParameterTypes();
        Type[] genericParamTypes = method.getGenericParameterTypes();
        String[] parameterTypes = new String[paramTypes.length];
        for (int i = 0; i < paramTypes.length; i++) {
            try {
                TypeDefinition td = builder.build(genericParamTypes[i], paramTypes[i]);
                parameterTypes[i] = td.getType();
            } catch (Exception e) {
                parameterTypes[i] = paramTypes[i].getName();
            }
        }
        md.setParameterTypes(parameterTypes);
        try {
            TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());
            md.setReturnType(td.getType());
        } catch (Exception e) {
            md.setReturnType(method.getReturnType().getName());
        }
        sd.getMethods().add(md);
    }
    sd.setTypes(builder.getTypeDefinitions());
    return sd;
}
Also used : Method(java.lang.reflect.Method) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition) Type(java.lang.reflect.Type) MethodDefinition(org.apache.dubbo.metadata.definition.model.MethodDefinition) ServiceDefinition(org.apache.dubbo.metadata.definition.model.ServiceDefinition)

Example 23 with TypeDefinition

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

the class GenericServiceTest method createComplexObject.

Map<String, Object> createComplexObject(FullServiceDefinition fullServiceDefinition, String var1, int var2, long l, String[] var3, List<Integer> var4, ComplexObject.TestEnum testEnum) {
    List<TypeDefinition> typeDefinitions = fullServiceDefinition.getTypes();
    TypeDefinition topTypeDefinition = null;
    TypeDefinition innerTypeDefinition = null;
    TypeDefinition inner2TypeDefinition = null;
    TypeDefinition inner3TypeDefinition = null;
    for (TypeDefinition typeDefinition : typeDefinitions) {
        if (typeDefinition.getType().equals(ComplexObject.class.getName())) {
            topTypeDefinition = typeDefinition;
        } else if (typeDefinition.getType().equals(ComplexObject.InnerObject.class.getName())) {
            innerTypeDefinition = typeDefinition;
        } else if (typeDefinition.getType().contains(ComplexObject.InnerObject2.class.getName())) {
            inner2TypeDefinition = typeDefinition;
        } else if (typeDefinition.getType().equals(ComplexObject.InnerObject3.class.getName())) {
            inner3TypeDefinition = typeDefinition;
        }
    }
    Assertions.assertEquals(topTypeDefinition.getProperties().get("v").getType(), "long");
    Assertions.assertEquals(topTypeDefinition.getProperties().get("maps").getType(), "java.util.Map<java.lang.String,java.lang.String>");
    Assertions.assertEquals(topTypeDefinition.getProperties().get("innerObject").getType(), "org.apache.dubbo.service.ComplexObject$InnerObject");
    Assertions.assertEquals(topTypeDefinition.getProperties().get("intList").getType(), "java.util.List<java.lang.Integer>");
    Assertions.assertEquals(topTypeDefinition.getProperties().get("strArrays").getType(), "java.lang.String[]");
    Assertions.assertEquals(topTypeDefinition.getProperties().get("innerObject3").getType(), "org.apache.dubbo.service.ComplexObject.InnerObject3[]");
    Assertions.assertEquals(topTypeDefinition.getProperties().get("testEnum").getType(), "org.apache.dubbo.service.ComplexObject.TestEnum");
    Assertions.assertEquals(topTypeDefinition.getProperties().get("innerObject2").getType(), "java.util.List<org.apache.dubbo.service.ComplexObject$InnerObject2>");
    Assertions.assertSame(innerTypeDefinition.getProperties().get("innerA").getType(), "java.lang.String");
    Assertions.assertSame(innerTypeDefinition.getProperties().get("innerB").getType(), "int");
    Assertions.assertSame(inner2TypeDefinition.getProperties().get("innerA2").getType(), "java.lang.String");
    Assertions.assertSame(inner2TypeDefinition.getProperties().get("innerB2").getType(), "int");
    Assertions.assertSame(inner3TypeDefinition.getProperties().get("innerA3").getType(), "java.lang.String");
    Map<String, Object> result = new HashMap<>();
    result.put("v", l);
    Map maps = new HashMap<>(4);
    maps.put(var1 + "_k1", var1 + "_v1");
    maps.put(var1 + "_k2", var1 + "_v2");
    result.put("maps", maps);
    result.put("intList", var4);
    result.put("strArrays", var3);
    result.put("testEnum", testEnum.name());
    Map innerObjectMap = new HashMap<>(4);
    result.put("innerObject", innerObjectMap);
    innerObjectMap.put("innerA", var1);
    innerObjectMap.put("innerB", var2);
    List<Map> innerObject2List = new ArrayList<>();
    result.put("innerObject2", innerObject2List);
    Map innerObject2Tmp1 = new HashMap<>(4);
    innerObject2Tmp1.put("innerA2", var1 + "_21");
    innerObject2Tmp1.put("innerB2", var2 + 100000);
    Map innerObject2Tmp2 = new HashMap<>(4);
    innerObject2Tmp2.put("innerA2", var1 + "_22");
    innerObject2Tmp2.put("innerB2", var2 + 200000);
    innerObject2List.add(innerObject2Tmp1);
    innerObject2List.add(innerObject2Tmp2);
    Map innerObject3Tmp1 = new HashMap<>(4);
    innerObject3Tmp1.put("innerA3", var1 + "_31");
    Map innerObject3Tmp2 = new HashMap<>(4);
    innerObject3Tmp2.put("innerA3", var1 + "_32");
    Map innerObject3Tmp3 = new HashMap<>(4);
    innerObject3Tmp3.put("innerA3", var1 + "_32");
    result.put("innerObject3", new Map[] { innerObject3Tmp1, innerObject3Tmp2, innerObject3Tmp3 });
    return result;
}
Also used : HashMap(java.util.HashMap) ComplexObject(org.apache.dubbo.service.ComplexObject) ArrayList(java.util.ArrayList) ComplexObject(org.apache.dubbo.service.ComplexObject) HashMap(java.util.HashMap) Map(java.util.Map) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition)

Example 24 with TypeDefinition

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

the class EnumTypeDefinitionBuilderTest method testBuild.

@Test
public void testBuild() {
    TypeElement typeElement = getType(Color.class);
    TypeDefinition typeDefinition = build(processingEnv, typeElement);
    assertEquals(Color.class.getName(), typeDefinition.getType());
    assertEquals(asList("RED", "YELLOW", "BLUE"), typeDefinition.getEnums());
// assertEquals(typeDefinition.getTypeBuilderName(), builder.getClass().getName());
}
Also used : TypeElement(javax.lang.model.element.TypeElement) Color(org.apache.dubbo.metadata.annotation.processing.model.Color) TypeDefinition(org.apache.dubbo.metadata.definition.model.TypeDefinition) Test(org.junit.jupiter.api.Test) AbstractAnnotationProcessingTest(org.apache.dubbo.metadata.annotation.processing.AbstractAnnotationProcessingTest)

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