core: move check Json object methods to JsonUtil (#6214)

This commit is contained in:
Chengyuan Zhang 2019-09-27 14:29:26 -07:00 committed by GitHub
parent d3e86da6b6
commit 18a9671ea0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 31 deletions

View File

@ -451,7 +451,7 @@ final class DnsNameResolver extends NameResolver {
throw new ClassCastException("wrong type " + rawChoices); throw new ClassCastException("wrong type " + rawChoices);
} }
List<?> listChoices = (List<?>) rawChoices; List<?> listChoices = (List<?>) rawChoices;
possibleServiceConfigChoices.addAll(ServiceConfigUtil.checkObjectList(listChoices)); possibleServiceConfigChoices.addAll(JsonUtil.checkObjectList(listChoices));
} }
return possibleServiceConfigChoices; return possibleServiceConfigChoices;
} }
@ -470,7 +470,7 @@ final class DnsNameResolver extends NameResolver {
if (!serviceConfigChoice.containsKey(SERVICE_CONFIG_CHOICE_CLIENT_LANGUAGE_KEY)) { if (!serviceConfigChoice.containsKey(SERVICE_CONFIG_CHOICE_CLIENT_LANGUAGE_KEY)) {
return null; return null;
} }
return ServiceConfigUtil.checkStringList( return JsonUtil.checkStringList(
JsonUtil.getList(serviceConfigChoice, SERVICE_CONFIG_CHOICE_CLIENT_LANGUAGE_KEY)); JsonUtil.getList(serviceConfigChoice, SERVICE_CONFIG_CHOICE_CLIENT_LANGUAGE_KEY));
} }
@ -479,7 +479,7 @@ final class DnsNameResolver extends NameResolver {
if (!serviceConfigChoice.containsKey(SERVICE_CONFIG_CHOICE_CLIENT_HOSTNAME_KEY)) { if (!serviceConfigChoice.containsKey(SERVICE_CONFIG_CHOICE_CLIENT_HOSTNAME_KEY)) {
return null; return null;
} }
return ServiceConfigUtil.checkStringList( return JsonUtil.checkStringList(
JsonUtil.getList(serviceConfigChoice, SERVICE_CONFIG_CHOICE_CLIENT_HOSTNAME_KEY)); JsonUtil.getList(serviceConfigChoice, SERVICE_CONFIG_CHOICE_CLIENT_HOSTNAME_KEY));
} }

View File

@ -115,4 +115,35 @@ public class JsonUtil {
} }
return (Boolean) value; return (Boolean) value;
} }
/**
* Casts a list of unchecked JSON values to a list of checked objects in Java type.
* If the given list contains a value that is not a Map, throws an exception.
*/
@SuppressWarnings("unchecked")
public static List<Map<String, ?>> checkObjectList(List<?> rawList) {
for (int i = 0; i < rawList.size(); i++) {
if (!(rawList.get(i) instanceof Map)) {
throw new ClassCastException(
String.format("value %s for idx %d in %s is not object", rawList.get(i), i, rawList));
}
}
return (List<Map<String, ?>>) rawList;
}
/**
* Casts a list of unchecked JSON values to a list of String. If the given list
* contains a value that is not a String, throws an exception.
*/
@SuppressWarnings("unchecked")
public static List<String> checkStringList(List<?> rawList) {
for (int i = 0; i < rawList.size(); i++) {
if (!(rawList.get(i) instanceof String)) {
throw new ClassCastException(
String.format(
"value '%s' for idx %d in '%s' is not string", rawList.get(i), i, rawList));
}
}
return (List<String>) rawList;
}
} }

View File

@ -293,7 +293,7 @@ public final class ServiceConfigUtil {
if (!methodConfig.containsKey(METHOD_CONFIG_NAME_KEY)) { if (!methodConfig.containsKey(METHOD_CONFIG_NAME_KEY)) {
return null; return null;
} }
return checkObjectList(JsonUtil.getList(methodConfig, METHOD_CONFIG_NAME_KEY)); return JsonUtil.checkObjectList(JsonUtil.getList(methodConfig, METHOD_CONFIG_NAME_KEY));
} }
/** /**
@ -345,7 +345,8 @@ public final class ServiceConfigUtil {
if (!serviceConfig.containsKey(SERVICE_CONFIG_METHOD_CONFIG_KEY)) { if (!serviceConfig.containsKey(SERVICE_CONFIG_METHOD_CONFIG_KEY)) {
return null; return null;
} }
return checkObjectList(JsonUtil.getList(serviceConfig, SERVICE_CONFIG_METHOD_CONFIG_KEY)); return JsonUtil
.checkObjectList(JsonUtil.getList(serviceConfig, SERVICE_CONFIG_METHOD_CONFIG_KEY));
} }
/** /**
@ -373,7 +374,7 @@ public final class ServiceConfigUtil {
List<Map<String, ?>> lbConfigs = new ArrayList<>(); List<Map<String, ?>> lbConfigs = new ArrayList<>();
if (serviceConfig.containsKey(SERVICE_CONFIG_LOAD_BALANCING_CONFIG_KEY)) { if (serviceConfig.containsKey(SERVICE_CONFIG_LOAD_BALANCING_CONFIG_KEY)) {
List<?> configs = JsonUtil.getList(serviceConfig, SERVICE_CONFIG_LOAD_BALANCING_CONFIG_KEY); List<?> configs = JsonUtil.getList(serviceConfig, SERVICE_CONFIG_LOAD_BALANCING_CONFIG_KEY);
for (Map<String, ?> config : checkObjectList(configs)) { for (Map<String, ?> config : JsonUtil.checkObjectList(configs)) {
lbConfigs.add(config); lbConfigs.add(config);
} }
} }
@ -433,7 +434,7 @@ public final class ServiceConfigUtil {
public static List<LbConfig> getChildPolicyFromXdsConfig(Map<String, ?> rawXdsConfig) { public static List<LbConfig> getChildPolicyFromXdsConfig(Map<String, ?> rawXdsConfig) {
List<?> rawChildPolicies = JsonUtil.getList(rawXdsConfig, XDS_CONFIG_CHILD_POLICY_KEY); List<?> rawChildPolicies = JsonUtil.getList(rawXdsConfig, XDS_CONFIG_CHILD_POLICY_KEY);
if (rawChildPolicies != null) { if (rawChildPolicies != null) {
return unwrapLoadBalancingConfigList(checkObjectList(rawChildPolicies)); return unwrapLoadBalancingConfigList(JsonUtil.checkObjectList(rawChildPolicies));
} }
return null; return null;
} }
@ -445,7 +446,7 @@ public final class ServiceConfigUtil {
public static List<LbConfig> getFallbackPolicyFromXdsConfig(Map<String, ?> rawXdsConfig) { public static List<LbConfig> getFallbackPolicyFromXdsConfig(Map<String, ?> rawXdsConfig) {
List<?> rawFallbackPolicies = JsonUtil.getList(rawXdsConfig, XDS_CONFIG_FALLBACK_POLICY_KEY); List<?> rawFallbackPolicies = JsonUtil.getList(rawXdsConfig, XDS_CONFIG_FALLBACK_POLICY_KEY);
if (rawFallbackPolicies != null) { if (rawFallbackPolicies != null) {
return unwrapLoadBalancingConfigList(checkObjectList(rawFallbackPolicies)); return unwrapLoadBalancingConfigList(JsonUtil.checkObjectList(rawFallbackPolicies));
} }
return null; return null;
} }
@ -462,29 +463,6 @@ public final class ServiceConfigUtil {
return JsonUtil.getString(serviceConfig, SERVICE_CONFIG_STICKINESS_METADATA_KEY); return JsonUtil.getString(serviceConfig, SERVICE_CONFIG_STICKINESS_METADATA_KEY);
} }
@SuppressWarnings("unchecked")
static List<Map<String, ?>> checkObjectList(List<?> rawList) {
for (int i = 0; i < rawList.size(); i++) {
if (!(rawList.get(i) instanceof Map)) {
throw new ClassCastException(
String.format("value %s for idx %d in %s is not object", rawList.get(i), i, rawList));
}
}
return (List<Map<String, ?>>) rawList;
}
@SuppressWarnings("unchecked")
static List<String> checkStringList(List<?> rawList) {
for (int i = 0; i < rawList.size(); i++) {
if (!(rawList.get(i) instanceof String)) {
throw new ClassCastException(
String.format(
"value '%s' for idx %d in '%s' is not string", rawList.get(i), i, rawList));
}
}
return (List<String>) rawList;
}
/** /**
* Parse from a string to produce a duration. Copy of * Parse from a string to produce a duration. Copy of
* {@link com.google.protobuf.util.Durations#parse}. * {@link com.google.protobuf.util.Durations#parse}.