diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle index f79a834a841..c29aef9a7c2 100644 --- a/fineract-provider/build.gradle +++ b/fineract-provider/build.gradle @@ -184,7 +184,7 @@ configurations.driver.each {File file -> tasks.register('createDB') { description = "Creates the MariaDB Database. Needs database name to be passed (like: -PdbName=someDBname)" doLast { - def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver') + def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/?allowPublicKeyRetrieval=true&useSSL=false', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver') sql.execute('CREATE DATABASE ' + "`$dbName` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci") } } @@ -192,7 +192,7 @@ tasks.register('createDB') { tasks.register('dropDB') { description = "Drops the specified MariaDB database. The database name has to be passed (like: -PdbName=someDBname)" doLast { - def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver') + def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/?allowPublicKeyRetrieval=true&useSSL=false', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver') sql.execute('DROP DATABASE ' + "`$dbName`") } } @@ -231,7 +231,7 @@ tasks.register('dropMySQLDB') { tasks.register('setBlankPassword') { doLast { - def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver') + def sql = Sql.newInstance('jdbc:mariadb://localhost:3306/?allowPublicKeyRetrieval=true&useSSL=false', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver') sql.execute('USE `fineract_tenants`') sql.execute('UPDATE fineract_tenants.tenants SET schema_server = \'localhost\', schema_server_port = \'3306\', schema_username = \'mifos\', schema_password = \'mysql\' WHERE id=1;') } diff --git a/fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java b/fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java index 9ddd970a231..9fbe82ef0f6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java +++ b/fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java @@ -18,9 +18,9 @@ */ package org.apache.fineract.template.domain; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -90,14 +90,20 @@ public static Template fromJson(final JsonCommand command) { break; } - final JsonArray array = command.arrayOfParameterNamed("mappers"); - final List mappersList = new ArrayList<>(); - for (final JsonElement element : array) { - mappersList.add(new TemplateMapper(element.getAsJsonObject().get("mappersorder").getAsInt(), - element.getAsJsonObject().get("mapperskey").getAsString(), - element.getAsJsonObject().get("mappersvalue").getAsString())); + try { + final ObjectMapper objectMapper = new ObjectMapper(); + final JsonNode rootNode = objectMapper.readTree(command.json()); + final JsonNode mappersNode = rootNode.get("mappers"); + if (mappersNode != null && mappersNode.isArray()) { + for (final JsonNode element : mappersNode) { + mappersList.add(new TemplateMapper(element.get("mappersorder").asInt(), element.get("mapperskey").asText(), + element.get("mappersvalue").asText())); + } + } + } catch (final Exception e) { + throw new RuntimeException("Failed to parse template mappers from JSON", e); } return new Template(name, text, entity, type, mappersList); diff --git a/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateEntity.java b/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateEntity.java index 4c8e545149a..8c46c30ddae 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateEntity.java +++ b/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateEntity.java @@ -18,14 +18,14 @@ */ package org.apache.fineract.template.domain; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.gson.annotations.SerializedName; @JsonSerialize(using = TemplateEntitySerializer.class) public enum TemplateEntity { - @SerializedName("client") - CLIENT(0, "client"), @SerializedName("loan") + @JsonProperty("client") + CLIENT(0, "client"), @JsonProperty("loan") LOAN(1, "loan"); private final int id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateType.java b/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateType.java index 7ca149fd8db..78da3c830f3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateType.java +++ b/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateType.java @@ -18,14 +18,14 @@ */ package org.apache.fineract.template.domain; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.gson.annotations.SerializedName; @JsonSerialize(using = TemplateTypeSerializer.class) public enum TemplateType { - @SerializedName("Document") - DOCUMENT(0, "Document"), @SerializedName("SMS") + @JsonProperty("Document") + DOCUMENT(0, "Document"), @JsonProperty("SMS") SMS(2, "SMS"); /** diff --git a/fineract-provider/src/main/java/org/apache/fineract/template/service/JpaTemplateDomainService.java b/fineract-provider/src/main/java/org/apache/fineract/template/service/JpaTemplateDomainService.java index 8fc798d81a7..969341ecde6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/template/service/JpaTemplateDomainService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/template/service/JpaTemplateDomainService.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.template.service; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.List; import lombok.RequiredArgsConstructor; @@ -94,14 +94,21 @@ public CommandProcessingResult updateTemplate(final Long templateId, final JsonC } template.setType(type); - final JsonArray array = command.arrayOfParameterNamed("mappers"); - final List mappersList = new ArrayList<>(); - for (final JsonElement element : array) { - mappersList.add(new TemplateMapper(element.getAsJsonObject().get("mappersorder").getAsInt(), - element.getAsJsonObject().get("mapperskey").getAsString(), - element.getAsJsonObject().get("mappersvalue").getAsString())); + try { + final ObjectMapper objectMapper = new ObjectMapper(); + final JsonNode rootNode = objectMapper.readTree(command.json()); + final JsonNode mappersNode = rootNode.get("mappers"); + final List mappersList = new ArrayList<>(); + if (mappersNode != null && mappersNode.isArray()) { + for (final JsonNode element : mappersNode) { + mappersList.add(new TemplateMapper(element.get("mappersorder").asInt(), element.get("mapperskey").asText(), + element.get("mappersvalue").asText())); + } + } + template.setMappers(mappersList); + } catch (final Exception e) { + throw new RuntimeException("Failed to parse template mappers from JSON", e); } - template.setMappers(mappersList); this.templateRepository.saveAndFlush(template); diff --git a/fineract-provider/src/test/java/org/apache/fineract/template/service/TemplateServiceStepDefinitions.java b/fineract-provider/src/test/java/org/apache/fineract/template/service/TemplateServiceStepDefinitions.java index 69f9ee6c4da..40932f83450 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/template/service/TemplateServiceStepDefinitions.java +++ b/fineract-provider/src/test/java/org/apache/fineract/template/service/TemplateServiceStepDefinitions.java @@ -20,13 +20,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -import com.google.common.reflect.TypeToken; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import io.cucumber.java8.En; import java.io.IOException; -import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -75,10 +72,8 @@ private String compile(String templateText, Map scope) throws IO return tms.compile(template, scope); } - private Map parse(String data) { - Gson gson = new Gson(); - Type ssMap = new TypeToken>() {}.getType(); - JsonElement json = JsonParser.parseString(data); - return gson.fromJson(json, ssMap); + private Map parse(String data) throws IOException { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readValue(data, new TypeReference>() {}); } } diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/TemplateIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/TemplateIntegrationTest.java index b7a152eff6f..8d9b01ea2ff 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/TemplateIntegrationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/TemplateIntegrationTest.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.integrationtests; -import com.google.gson.Gson; +import com.fasterxml.jackson.databind.ObjectMapper; import io.restassured.builder.RequestSpecBuilder; import io.restassured.builder.ResponseSpecBuilder; import io.restassured.http.ContentType; @@ -52,7 +52,7 @@ public void setup() { @Disabled @Test - public void test() { + public void test() throws Exception { final HashMap metadata = new HashMap<>(); metadata.put("user", "resource_url"); @@ -64,8 +64,8 @@ public void test() { ArrayList get = Utils.performServerGet(this.requestSpec, this.responseSpec, GET_TEMPLATES_URL, ""); final int entriesBeforeTest = get.size(); - final Integer id = Utils.performServerPost(this.requestSpec, this.responseSpec, GET_TEMPLATES_URL, new Gson().toJson(map), - "resourceId"); + final Integer id = Utils.performServerPost(this.requestSpec, this.responseSpec, GET_TEMPLATES_URL, + new ObjectMapper().writeValueAsString(map), "resourceId"); final String templateUrlForId = String.format("/fineract-provider/api/v1/templates/%s?tenantIdentifier=default", id);