Foo Developer created FINERACT-2860:
---------------------------------------

             Summary: 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


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)

Reply via email to