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;
}
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;
}
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;
}
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());
}
Aggregations