[
https://issues.apache.org/jira/browse/FINERACT-2860?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adam Saghy updated FINERACT-2860:
---------------------------------
Fix Version/s: 1.16.0
> Creating or updating a report fails with 501 when a report parameter has a
> JSON null member
> -------------------------------------------------------------------------------------------
>
> Key: FINERACT-2860
> URL: https://issues.apache.org/jira/browse/FINERACT-2860
> Project: Apache Fineract
> Issue Type: Bug
> Components: Reports
> Reporter: Foo Developer
> Assignee: Foo Developer
> Priority: Major
> Fix For: 1.16.0
>
>
> h3. Steps to reproduce
> On stock Fineract (develop), call {{POST /fineract-provider/api/v1/reports}}
> with a report parameter whose {{reportParameterName}} is an explicit JSON
> null, for example:
> {code:json}{
> "reportName": "Null param test",
> "reportType": "Table",
> "reportCategory": "Client",
> "reportSql": "select 1",
> "reportParameters": [ { "id": "", "parameterId": 1, "reportParameterName":
> null } ]
> }
> {code}
> h3. Expected
> The report is created. A null {{reportParameterName}} (or a null {{id}} /
> {{parameterId}}) is treated the same as an absent member.
> h3. Actual
> The request fails with HTTP 501 Not Implemented, caused by
> {{java.lang.UnsupportedOperationException: JsonNull}}.
> h3. Root cause
> {{ReportWritePlatformServiceImpl.assembleSetOfReportParameterUsages}} guards
> the {{id}}, {{parameterId}} and {{reportParameterName}} members with
> {{JsonObject.has(name)}} only, then calls {{getAsString()}} /
> {{getAsLong()}}. Gson's {{has()}} returns true for a member that is present
> with a JSON null value, and {{getAsString()}} / {{getAsLong()}} on
> {{JsonNull}} throw {{UnsupportedOperationException}}, which the generic
> exception mapper turns into a 501. Clients that serialize unset fields as
> null instead of omitting them hit this on every create. The update branch has
> the same latent defect for {{reportParameterName}}.
> h3. Proposed fix
> Add {{&& !jsonObject.get(name).isJsonNull()}} next to each {{has(name)}}
> check in the method (id, both parameterId reads, both reportParameterName
> reads), so a JSON null is handled like a missing member. Unit test: a
> parameter with a null {{reportParameterName}} assembles without throwing.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)