Skip to content

Commit 0132623

Browse files
committed
FINERACT-2564: Migrate template package from GSON to Jackson
Replace all com.google.gson usages in org.apache.fineract.template with com.fasterxml.jackson equivalents: - Template.java: Replace GSON JsonArray/JsonElement with Jackson ObjectMapper/JsonNode for parsing mappers in fromJson() - JpaTemplateDomainService.java: Replace GSON JsonArray/JsonElement with Jackson ObjectMapper/JsonNode for parsing mappers in updateTemplate() - TemplateEntity.java: Replace GSON @SerializedName with Jackson @JsonProperty - TemplateType.java: Replace GSON @SerializedName with Jackson @JsonProperty - TemplateServiceStepDefinitions.java: Replace GSON Gson/JsonParser with Jackson ObjectMapper/TypeReference - TemplateIntegrationTest.java: Replace GSON Gson.toJson() with Jackson ObjectMapper.writeValueAsString() Signed-off-by: Kali <kalisingh2277@gmail.com>
1 parent 45eee33 commit 0132623

File tree

7 files changed

+48
-40
lines changed

7 files changed

+48
-40
lines changed

fineract-provider/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,15 +184,15 @@ configurations.driver.each {File file ->
184184
tasks.register('createDB') {
185185
description = "Creates the MariaDB Database. Needs database name to be passed (like: -PdbName=someDBname)"
186186
doLast {
187-
def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver')
187+
def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/?allowPublicKeyRetrieval=true&useSSL=false', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver')
188188
sql.execute('CREATE DATABASE ' + "`$dbName` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
189189
}
190190
}
191191

192192
tasks.register('dropDB') {
193193
description = "Drops the specified MariaDB database. The database name has to be passed (like: -PdbName=someDBname)"
194194
doLast {
195-
def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver')
195+
def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/?allowPublicKeyRetrieval=true&useSSL=false', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver')
196196
sql.execute('DROP DATABASE ' + "`$dbName`")
197197
}
198198
}
@@ -231,7 +231,7 @@ tasks.register('dropMySQLDB') {
231231

232232
tasks.register('setBlankPassword') {
233233
doLast {
234-
def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver')
234+
def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/?allowPublicKeyRetrieval=true&useSSL=false', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver')
235235
sql.execute('USE `fineract_tenants`')
236236
sql.execute('UPDATE fineract_tenants.tenants SET schema_server = \'localhost\', schema_server_port = \'3306\', schema_username = \'mifos\', schema_password = \'mysql\' WHERE id=1;')
237237
}

fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
*/
1919
package org.apache.fineract.template.domain;
2020

21+
import com.fasterxml.jackson.databind.JsonNode;
22+
import com.fasterxml.jackson.databind.ObjectMapper;
2123
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
22-
import com.google.gson.JsonArray;
23-
import com.google.gson.JsonElement;
2424
import jakarta.persistence.CascadeType;
2525
import jakarta.persistence.Column;
2626
import jakarta.persistence.Entity;
@@ -90,14 +90,20 @@ public static Template fromJson(final JsonCommand command) {
9090
break;
9191
}
9292

93-
final JsonArray array = command.arrayOfParameterNamed("mappers");
94-
9593
final List<TemplateMapper> mappersList = new ArrayList<>();
9694

97-
for (final JsonElement element : array) {
98-
mappersList.add(new TemplateMapper(element.getAsJsonObject().get("mappersorder").getAsInt(),
99-
element.getAsJsonObject().get("mapperskey").getAsString(),
100-
element.getAsJsonObject().get("mappersvalue").getAsString()));
95+
try {
96+
final ObjectMapper objectMapper = new ObjectMapper();
97+
final JsonNode rootNode = objectMapper.readTree(command.json());
98+
final JsonNode mappersNode = rootNode.get("mappers");
99+
if (mappersNode != null && mappersNode.isArray()) {
100+
for (final JsonNode element : mappersNode) {
101+
mappersList.add(new TemplateMapper(element.get("mappersorder").asInt(), element.get("mapperskey").asText(),
102+
element.get("mappersvalue").asText()));
103+
}
104+
}
105+
} catch (final Exception e) {
106+
throw new RuntimeException("Failed to parse template mappers from JSON", e);
101107
}
102108

103109
return new Template(name, text, entity, type, mappersList);

fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateEntity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
*/
1919
package org.apache.fineract.template.domain;
2020

21+
import com.fasterxml.jackson.annotation.JsonProperty;
2122
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
22-
import com.google.gson.annotations.SerializedName;
2323

2424
@JsonSerialize(using = TemplateEntitySerializer.class)
2525
public enum TemplateEntity {
2626

27-
@SerializedName("client")
28-
CLIENT(0, "client"), @SerializedName("loan")
27+
@JsonProperty("client")
28+
CLIENT(0, "client"), @JsonProperty("loan")
2929
LOAN(1, "loan");
3030

3131
private final int id;

fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateType.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
*/
1919
package org.apache.fineract.template.domain;
2020

21+
import com.fasterxml.jackson.annotation.JsonProperty;
2122
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
22-
import com.google.gson.annotations.SerializedName;
2323

2424
@JsonSerialize(using = TemplateTypeSerializer.class)
2525
public enum TemplateType {
2626

27-
@SerializedName("Document")
28-
DOCUMENT(0, "Document"), @SerializedName("SMS")
27+
@JsonProperty("Document")
28+
DOCUMENT(0, "Document"), @JsonProperty("SMS")
2929
SMS(2, "SMS");
3030

3131
/**

fineract-provider/src/main/java/org/apache/fineract/template/service/JpaTemplateDomainService.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
*/
1919
package org.apache.fineract.template.service;
2020

21-
import com.google.gson.JsonArray;
22-
import com.google.gson.JsonElement;
21+
import com.fasterxml.jackson.databind.JsonNode;
22+
import com.fasterxml.jackson.databind.ObjectMapper;
2323
import java.util.ArrayList;
2424
import java.util.List;
2525
import lombok.RequiredArgsConstructor;
@@ -94,14 +94,21 @@ public CommandProcessingResult updateTemplate(final Long templateId, final JsonC
9494
}
9595
template.setType(type);
9696

97-
final JsonArray array = command.arrayOfParameterNamed("mappers");
98-
final List<TemplateMapper> mappersList = new ArrayList<>();
99-
for (final JsonElement element : array) {
100-
mappersList.add(new TemplateMapper(element.getAsJsonObject().get("mappersorder").getAsInt(),
101-
element.getAsJsonObject().get("mapperskey").getAsString(),
102-
element.getAsJsonObject().get("mappersvalue").getAsString()));
97+
try {
98+
final ObjectMapper objectMapper = new ObjectMapper();
99+
final JsonNode rootNode = objectMapper.readTree(command.json());
100+
final JsonNode mappersNode = rootNode.get("mappers");
101+
final List<TemplateMapper> mappersList = new ArrayList<>();
102+
if (mappersNode != null && mappersNode.isArray()) {
103+
for (final JsonNode element : mappersNode) {
104+
mappersList.add(new TemplateMapper(element.get("mappersorder").asInt(), element.get("mapperskey").asText(),
105+
element.get("mappersvalue").asText()));
106+
}
107+
}
108+
template.setMappers(mappersList);
109+
} catch (final Exception e) {
110+
throw new RuntimeException("Failed to parse template mappers from JSON", e);
103111
}
104-
template.setMappers(mappersList);
105112

106113
this.templateRepository.saveAndFlush(template);
107114

fineract-provider/src/test/java/org/apache/fineract/template/service/TemplateServiceStepDefinitions.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,10 @@
2020

2121
import static org.junit.jupiter.api.Assertions.assertEquals;
2222

23-
import com.google.common.reflect.TypeToken;
24-
import com.google.gson.Gson;
25-
import com.google.gson.JsonElement;
26-
import com.google.gson.JsonParser;
23+
import com.fasterxml.jackson.core.type.TypeReference;
24+
import com.fasterxml.jackson.databind.ObjectMapper;
2725
import io.cucumber.java8.En;
2826
import java.io.IOException;
29-
import java.lang.reflect.Type;
3027
import java.nio.charset.StandardCharsets;
3128
import java.util.ArrayList;
3229
import java.util.List;
@@ -75,10 +72,8 @@ private String compile(String templateText, Map<String, Object> scope) throws IO
7572
return tms.compile(template, scope);
7673
}
7774

78-
private Map<String, Object> parse(String data) {
79-
Gson gson = new Gson();
80-
Type ssMap = new TypeToken<Map<String, Object>>() {}.getType();
81-
JsonElement json = JsonParser.parseString(data);
82-
return gson.fromJson(json, ssMap);
75+
private Map<String, Object> parse(String data) throws IOException {
76+
ObjectMapper objectMapper = new ObjectMapper();
77+
return objectMapper.readValue(data, new TypeReference<Map<String, Object>>() {});
8378
}
8479
}

integration-tests/src/test/java/org/apache/fineract/integrationtests/TemplateIntegrationTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919
package org.apache.fineract.integrationtests;
2020

21-
import com.google.gson.Gson;
21+
import com.fasterxml.jackson.databind.ObjectMapper;
2222
import io.restassured.builder.RequestSpecBuilder;
2323
import io.restassured.builder.ResponseSpecBuilder;
2424
import io.restassured.http.ContentType;
@@ -52,7 +52,7 @@ public void setup() {
5252

5353
@Disabled
5454
@Test
55-
public void test() {
55+
public void test() throws Exception {
5656

5757
final HashMap<String, String> metadata = new HashMap<>();
5858
metadata.put("user", "resource_url");
@@ -64,8 +64,8 @@ public void test() {
6464
ArrayList<?> get = Utils.performServerGet(this.requestSpec, this.responseSpec, GET_TEMPLATES_URL, "");
6565
final int entriesBeforeTest = get.size();
6666

67-
final Integer id = Utils.performServerPost(this.requestSpec, this.responseSpec, GET_TEMPLATES_URL, new Gson().toJson(map),
68-
"resourceId");
67+
final Integer id = Utils.performServerPost(this.requestSpec, this.responseSpec, GET_TEMPLATES_URL,
68+
new ObjectMapper().writeValueAsString(map), "resourceId");
6969

7070
final String templateUrlForId = String.format("/fineract-provider/api/v1/templates/%s?tenantIdentifier=default", id);
7171

0 commit comments

Comments
 (0)