-
Notifications
You must be signed in to change notification settings - Fork 2.2k
FINERACT-1266: Fix NullPointerException in SavingsHelper.determineInterestPostingPeriods #5282
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FINERACT-1266: Fix NullPointerException in SavingsHelper.determineInterestPostingPeriods #5282
Conversation
|
@airajena Please rebase this PR with latest |
|
|
||
| final List<LocalDateInterval> postingPeriods = new ArrayList<>(); | ||
|
|
||
| if (startInterestCalculationLocalDate == null || interestPostingUpToDate == null) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please explain this new condition and why it is the correct behavior?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The null check prevents a NullPointerException that occurs when either startInterestCalculationLocalDate or interestPostingUpToDate is null.
DateUtils.isAfter() at line 64 throws NPE when comparing null dates, This happens when closing a Fixed Deposit account where depositPeriodFrequencyType is INVALID, causing the maturity date (and subsequently interestPostingUpToDate) to be null
If either date is null, there are no valid interest posting periods to determine
- An empty list semantically means "no posting periods" - which is accurate when dates are undefined
- This allows the calling code (e.g., account closure) to continue gracefully
I've also rebased the PR with the latest develop branch as requested.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In what situations can these values be null?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
interestPostingUpToDate can be null when:
depositPeriodFrequencyType is INVALID: In FixedDepositAccount.calculateMaturityDate(), the switch statement handles DAYS, WEEKS, MONTHS, and YEARS, but when depositPeriodFrequencyType is INVALID, it falls through with an empty break, leaving maturityDate as null:
Database has null/invalid deposit_period_frequency_enum: SavingsPeriodFrequencyType.fromInt() returns INVALID when the input is null or an unrecognized value. The column deposit_period_frequency_enum is marked as nullable = true in DepositAccountTermAndPreClosure
Account reinvestment: DepositAccountTermAndPreClosure.copy() explicitly sets maturityDate = null when creating a copy for reinvestment.
startInterestCalculationLocalDate can be null when:
Account in early submission state: accountSubmittedOrActivationDate() could return null if both activationDate and submittedOnDate are null.
adamsaghy
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Kindly see my questions.
…erestPostingPeriods
3c22492 to
889857a
Compare
Description
Fixes NullPointerException that occurs in
SavingsHelper.determineInterestPostingPeriods()when date parameters are null.The NPE occurs when closing a Fixed Deposit account if the maturity date is null (e.g., when
depositPeriodFrequencyTypeis INVALID).Root Cause
The method
determineInterestPostingPeriods()usesDateUtils.isAfter()which throws NPE when eitherstartInterestCalculationLocalDateorinterestPostingUpToDateis null.Fix
Added null check at the start of the method to return an empty list early if either date parameter is null.
Testing
Related Issue
Fixes FINERACT-1266