in 3-extensions/serialization/dubbo-samples-protobuf-json/protobuf-json-serialization-implement/src/main/java/org/apache/dubbo/sample/protobuf/serialization/utils/ProtobufUtils.java [111:136]
private Parser<?> getParser(Class clazz)
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Parser<?> parser = class2ParserMap.get(clazz);
if (parser == null) {
synchronized (class2ParserMapLock) {
parser = class2ParserMap.get(clazz);
if (parser == null) {
try {
Method parserMethod = clazz.getMethod("parser");
parser = (Parser<?>) parserMethod.invoke(clazz);
} catch (NoSuchMethodException ex) {
// try to find from PARSER field
try {
Field parserField = clazz.getField("PARSER");
parser = (Parser<?>) parserField.get(clazz);
} catch (NoSuchFieldException ex2) {
// throw NoSuchMethodException instead of NoSuchFieldException
throw ex;
}
}
class2ParserMap.put(clazz, parser);
}
}
}
return parser;
}