diff --git a/pom.xml b/pom.xml index 8fa801f7..be4c8527 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.contentstack.sdk java - 2.0.0 + 2.0.1 jar contentstack-java Java SDK for Contentstack Content Delivery API @@ -17,7 +17,7 @@ 1.8 UTF-8 2.22.0 - 2.2.1 + 3.3.1 3.4.1 3.0.0 3.1.8 @@ -183,6 +183,12 @@ ${json-simple-version} compile + + + com.fasterxml.jackson.core + jackson-databind + 2.15.2 + diff --git a/src/main/java/com/contentstack/sdk/CSHttpConnection.java b/src/main/java/com/contentstack/sdk/CSHttpConnection.java index e3c44d65..4a7c1b23 100644 --- a/src/main/java/com/contentstack/sdk/CSHttpConnection.java +++ b/src/main/java/com/contentstack/sdk/CSHttpConnection.java @@ -2,9 +2,11 @@ import okhttp3.Request; import okhttp3.ResponseBody; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; + import retrofit2.Call; import retrofit2.Response; @@ -20,6 +22,10 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.IntStream; +import com.fasterxml.jackson.databind.ObjectMapper; // Jackson for JSON parsing +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.type.MapType; import static com.contentstack.sdk.Constants.*; @@ -186,6 +192,14 @@ public void send() { } } + private JSONObject createOrderedJSONObject(Map map) { + JSONObject json = new JSONObject(); + for (Map.Entry entry : map.entrySet()) { + json.put(entry.getKey(), entry.getValue()); + } + return json; + } + private void getService(String requestUrl) throws IOException { this.headers.put(X_USER_AGENT_KEY, "contentstack-delivery-java/" + SDK_VERSION); @@ -210,16 +224,22 @@ private void getService(String requestUrl) throws IOException { if (request != null) { response = pluginResponseImp(request, response); } - String responseBody = response.body().string(); try { - responseJSON = new JSONObject(responseBody); + // Use Jackson to parse the JSON while preserving order + ObjectMapper mapper = JsonMapper.builder().build(); + MapType type = mapper.getTypeFactory().constructMapType(LinkedHashMap.class, String.class, + Object.class); + Map responseMap = mapper.readValue(response.body().string(), type); + + // Use the custom method to create an ordered JSONObject + responseJSON = createOrderedJSONObject(responseMap); if (this.config.livePreviewEntry != null && !this.config.livePreviewEntry.isEmpty()) { handleJSONArray(); } connectionRequest.onRequestFinished(CSHttpConnection.this); } catch (JSONException e) { // Handle non-JSON response - setError("Invalid JSON response: " + responseBody); + setError("Invalid JSON response"); } } else { assert response.errorBody() != null;