From dd7d797a921669039f4d258c4b529d16f5689919 Mon Sep 17 00:00:00 2001 From: Thomas Zurkan Date: Fri, 19 Apr 2019 15:01:31 -0700 Subject: [PATCH] older versions of JSONArray do not support iteration. In order to avoid crashes in this case, we use the get(index) instead --- .../ab/config/parser/JsonConfigParser.java | 60 ++++++++++++------- .../serializer/JacksonSerializer.java | 2 +- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/core-api/src/main/java/com/optimizely/ab/config/parser/JsonConfigParser.java b/core-api/src/main/java/com/optimizely/ab/config/parser/JsonConfigParser.java index 0cac06117..bc694c276 100644 --- a/core-api/src/main/java/com/optimizely/ab/config/parser/JsonConfigParser.java +++ b/core-api/src/main/java/com/optimizely/ab/config/parser/JsonConfigParser.java @@ -125,7 +125,8 @@ private List parseExperiments(JSONArray experimentJson) { private List parseExperiments(JSONArray experimentJson, String groupId) { List experiments = new ArrayList(experimentJson.length()); - for (Object obj : experimentJson) { + for (int i = 0; i < experimentJson.length(); i++) { + Object obj = experimentJson.get(i); JSONObject experimentObject = (JSONObject) obj; String id = experimentObject.getString("id"); String key = experimentObject.getString("key"); @@ -136,7 +137,8 @@ private List parseExperiments(JSONArray experimentJson, String group JSONArray audienceIdsJson = experimentObject.getJSONArray("audienceIds"); List audienceIds = new ArrayList(audienceIdsJson.length()); - for (Object audienceIdObj : audienceIdsJson) { + for (int j = 0; j < audienceIdsJson.length(); j++) { + Object audienceIdObj = audienceIdsJson.get(j); audienceIds.add((String) audienceIdObj); } @@ -163,7 +165,8 @@ private List parseExperiments(JSONArray experimentJson, String group private List parseExperimentIds(JSONArray experimentIdsJson) { ArrayList experimentIds = new ArrayList(experimentIdsJson.length()); - for (Object experimentIdObj : experimentIdsJson) { + for (int i = 0; i < experimentIdsJson.length(); i++) { + Object experimentIdObj = experimentIdsJson.get(i); experimentIds.add((String) experimentIdObj); } @@ -173,7 +176,8 @@ private List parseExperimentIds(JSONArray experimentIdsJson) { private List parseFeatureFlags(JSONArray featureFlagJson) { List featureFlags = new ArrayList(featureFlagJson.length()); - for (Object obj : featureFlagJson) { + for (int i = 0; i < featureFlagJson.length();i++) { + Object obj = featureFlagJson.get(i); JSONObject featureFlagObject = (JSONObject) obj; String id = featureFlagObject.getString("id"); String key = featureFlagObject.getString("key"); @@ -198,7 +202,8 @@ private List parseFeatureFlags(JSONArray featureFlagJson) { private List parseVariations(JSONArray variationJson) { List variations = new ArrayList(variationJson.length()); - for (Object obj : variationJson) { + for (int i = 0; i < variationJson.length(); i++) { + Object obj = variationJson.get(i); JSONObject variationObject = (JSONObject) obj; String id = variationObject.getString("id"); String key = variationObject.getString("key"); @@ -234,7 +239,8 @@ private Map parseForcedVariations(JSONObject forcedVariationJson private List parseTrafficAllocation(JSONArray trafficAllocationJson) { List trafficAllocation = new ArrayList(trafficAllocationJson.length()); - for (Object obj : trafficAllocationJson) { + for (int i = 0; i < trafficAllocationJson.length();i++) { + Object obj = trafficAllocationJson.get(i); JSONObject allocationObject = (JSONObject) obj; String entityId = allocationObject.getString("entityId"); int endOfRange = allocationObject.getInt("endOfRange"); @@ -248,7 +254,8 @@ private List parseTrafficAllocation(JSONArray trafficAllocati private List parseAttributes(JSONArray attributeJson) { List attributes = new ArrayList(attributeJson.length()); - for (Object obj : attributeJson) { + for (int i = 0; i < attributeJson.length();i++) { + Object obj = attributeJson.get(i); JSONObject attributeObject = (JSONObject) obj; String id = attributeObject.getString("id"); String key = attributeObject.getString("key"); @@ -262,7 +269,8 @@ private List parseAttributes(JSONArray attributeJson) { private List parseEvents(JSONArray eventJson) { List events = new ArrayList(eventJson.length()); - for (Object obj : eventJson) { + for (int i = 0; i < eventJson.length(); i++) { + Object obj = eventJson.get(i); JSONObject eventObject = (JSONObject) obj; List experimentIds = parseExperimentIds(eventObject.getJSONArray("experimentIds")); @@ -278,7 +286,8 @@ private List parseEvents(JSONArray eventJson) { private List parseAudiences(JSONArray audienceJson) { List audiences = new ArrayList(audienceJson.length()); - for (Object obj : audienceJson) { + for (int i = 0; i < audienceJson.length(); i++) { + Object obj = audienceJson.get(i); JSONObject audienceObject = (JSONObject) obj; String id = audienceObject.getString("id"); String key = audienceObject.getString("name"); @@ -304,7 +313,8 @@ private List parseAudiences(JSONArray audienceJson) { private List parseTypedAudiences(JSONArray audienceJson) { List audiences = new ArrayList(audienceJson.length()); - for (Object obj : audienceJson) { + for (int i = 0; i < audienceJson.length(); i++) { + Object obj = audienceJson.get(i); JSONObject audienceObject = (JSONObject) obj; String id = audienceObject.getString("id"); String key = audienceObject.getString("name"); @@ -320,7 +330,8 @@ private List parseTypedAudiences(JSONArray audienceJson) { private List parseGroups(JSONArray groupJson) { List groups = new ArrayList(groupJson.length()); - for (Object obj : groupJson) { + for (int i = 0; i < groupJson.length(); i++) { + Object obj = groupJson.get(i); JSONObject groupObject = (JSONObject) obj; String id = groupObject.getString("id"); String policy = groupObject.getString("policy"); @@ -334,10 +345,11 @@ private List parseGroups(JSONArray groupJson) { return groups; } - private List parseFeatureVariables(JSONArray FeatureVariablesJson) { - List FeatureVariables = new ArrayList(FeatureVariablesJson.length()); + private List parseFeatureVariables(JSONArray featureVariablesJson) { + List featureVariables = new ArrayList(featureVariablesJson.length()); - for (Object obj : FeatureVariablesJson) { + for (int i = 0; i < featureVariablesJson.length();i++) { + Object obj = featureVariablesJson.get(i); JSONObject FeatureVariableObject = (JSONObject) obj; String id = FeatureVariableObject.getString("id"); String key = FeatureVariableObject.getString("key"); @@ -348,19 +360,20 @@ private List parseFeatureVariables(JSONArray FeatureVariablesJs status = FeatureVariable.VariableStatus.fromString(FeatureVariableObject.getString("status")); } - FeatureVariables.add(new FeatureVariable(id, key, defaultValue, status, type)); + featureVariables.add(new FeatureVariable(id, key, defaultValue, status, type)); } - return FeatureVariables; + return featureVariables; } - private List parseFeatureVariableInstances(JSONArray FeatureVariableInstancesJson) { - List featureVariableUsageInstances = new ArrayList(FeatureVariableInstancesJson.length()); + private List parseFeatureVariableInstances(JSONArray featureVariableInstancesJson) { + List featureVariableUsageInstances = new ArrayList(featureVariableInstancesJson.length()); - for (Object obj : FeatureVariableInstancesJson) { - JSONObject FeatureVariableInstanceObject = (JSONObject) obj; - String id = FeatureVariableInstanceObject.getString("id"); - String value = FeatureVariableInstanceObject.getString("value"); + for (int i = 0; i < featureVariableInstancesJson.length(); i++) { + Object obj = featureVariableInstancesJson.get(i); + JSONObject featureVariableInstanceObject = (JSONObject) obj; + String id = featureVariableInstanceObject.getString("id"); + String value = featureVariableInstanceObject.getString("value"); featureVariableUsageInstances.add(new FeatureVariableUsageInstance(id, value)); } @@ -371,7 +384,8 @@ private List parseFeatureVariableInstances(JSONArr private List parseRollouts(JSONArray rolloutsJson) { List rollouts = new ArrayList(rolloutsJson.length()); - for (Object obj : rolloutsJson) { + for (int i = 0; i < rolloutsJson.length(); i++) { + Object obj = rolloutsJson.get(i); JSONObject rolloutObject = (JSONObject) obj; String id = rolloutObject.getString("id"); List experiments = parseExperiments(rolloutObject.getJSONArray("experiments")); diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/serializer/JacksonSerializer.java b/core-api/src/main/java/com/optimizely/ab/event/internal/serializer/JacksonSerializer.java index 8baa157fc..6087b4cce 100644 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/serializer/JacksonSerializer.java +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/serializer/JacksonSerializer.java @@ -23,7 +23,7 @@ class JacksonSerializer implements Serializer { - private final ObjectMapper mapper = + private ObjectMapper mapper = new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE);