This is an automated email from the ASF dual-hosted git repository.
adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new fe98aa6a58 FINERACT-2489: Fix NPE for missing charts in Recurring
Deposit Product
fe98aa6a58 is described below
commit fe98aa6a5848d8275e23f17e7cc3637a83cc5d26
Author: Dhananjay Bhagat <[email protected]>
AuthorDate: Fri Feb 13 19:56:54 2026 +0530
FINERACT-2489: Fix NPE for missing charts in Recurring Deposit Product
---
.../portfolio/savings/api/RecurringDepositProductsApiResource.java | 4 ++--
.../fineract/portfolio/savings/data/DepositProductDataValidator.java | 4 ++++
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java
index 9b9e23f7b0..06ca18b6a2 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java
@@ -115,9 +115,9 @@ public class RecurringDepositProductsApiResource {
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Operation(summary = "Create a Recurring Deposit Product", description =
"Creates a Recurring Deposit Product\n\n"
- + "Mandatory Fields: name, shortName, description, currencyCode,
digitsAfterDecimal,inMultiplesOf, interestCompoundingPeriodType,
interestPostingPeriodType, interestCalculationType,
interestCalculationDaysInYearType, minDepositTerm, minDepositTermTypeId,
accountingRule, depositAmount\n\n"
+ + "Mandatory Fields: name, shortName, description, currencyCode,
digitsAfterDecimal,inMultiplesOf, interestCompoundingPeriodType,
interestPostingPeriodType, interestCalculationType,
interestCalculationDaysInYearType, minDepositTerm, minDepositTermTypeId,
accountingRule, depositAmount, charts\n\n"
+ "Mandatory Fields for Cash based accounting (accountingRule =
2): savingsReferenceAccountId, savingsControlAccountId,
interestOnSavingsAccountId, incomeFromFeeAccountId,
transfersInSuspenseAccountId, incomeFromPenaltyAccountId\n\n"
- + "Optional Fields: lockinPeriodFrequency,
lockinPeriodFrequencyType, maxDepositTerm, maxDepositTermTypeId,
inMultiplesOfDepositTerm, inMultiplesOfDepositTermTypeId,
preClosurePenalApplicable, preClosurePenalInterest,
preClosurePenalInterestOnTypeId, feeToIncomeAccountMappings,
penaltyToIncomeAccountMappings, charges, charts, minDepositAmount,
maxDepositAmount, withHoldTax, taxGroupId")
+ + "Optional Fields: lockinPeriodFrequency,
lockinPeriodFrequencyType, maxDepositTerm, maxDepositTermTypeId,
inMultiplesOfDepositTerm, inMultiplesOfDepositTermTypeId,
preClosurePenalApplicable, preClosurePenalInterest,
preClosurePenalInterestOnTypeId, feeToIncomeAccountMappings,
penaltyToIncomeAccountMappings, charges, minDepositAmount, maxDepositAmount,
withHoldTax, taxGroupId")
@RequestBody(required = true, content = @Content(schema =
@Schema(implementation =
RecurringDepositProductsApiResourceSwagger.PostRecurringDepositProductsRequest.class)))
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content =
@Content(schema = @Schema(implementation =
RecurringDepositProductsApiResourceSwagger.PostRecurringDepositProductsResponse.class)))
})
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java
index e3a7401092..33069eae69 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java
@@ -366,6 +366,10 @@ public class DepositProductDataValidator {
final JsonArray array =
this.fromApiJsonHelper.extractJsonArrayNamed(chartsParamName, element);
baseDataValidator.reset().parameter(chartsParamName).value(array).notNull().jsonArrayNotEmpty();
+ if (array == null) {
+ return;
+ }
+
for (int i = 0; i < array.size(); i++) {
final JsonObject interestRateChartElement =
array.get(i).getAsJsonObject();
final String json =
this.fromApiJsonHelper.toJson(interestRateChartElement);