[ 
https://issues.apache.org/jira/browse/FINERACT-1105?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17183058#comment-17183058
 ] 

Awasum Yannick commented on FINERACT-1105:
------------------------------------------

[~aleks] if you like, you can still add the fix for this issue to 1.4.0 branch 
or if you all prefer, adjust the fixed version to 1.5.0 and leave the fix in 
develop for the future. You all decide.

> Swagger generates invalid Open API Specification file
> -----------------------------------------------------
>
>                 Key: FINERACT-1105
>                 URL: https://issues.apache.org/jira/browse/FINERACT-1105
>             Project: Apache Fineract
>          Issue Type: Improvement
>            Reporter: Chinmay Kulkarni
>            Assignee: Chinmay Kulkarni
>            Priority: Minor
>             Fix For: 1.4.0
>
>
> The Open API Specification file produced by Swagger Gradle Plugin is invalid.
>  # Run *./gradlew build*
>  # Use the contents of the generated Open API Spec file 
> *build/classes/java/main/static/swagger-ui/fineract.yaml* to debug/validate 
> spec file from here: [https://validator.swagger.io/]  - Use Debug POST 
> request to validate 
> The validator returns the following:
> {code:yaml}
> ---
> messages: - "attribute paths.'/glclosures'(get).responses.200.description is 
> missing"
> - "attribute paths.'/glclosures'(post).responses.200.description is missing"
> - "attribute paths.'/glclosures/{glClosureId}'(get).responses.200.description 
> is missing"
> - "attribute paths.'/glclosures/{glClosureId}'(put).responses.200.description 
> is missing"
> - "attribute 
> paths.'/glclosures/{glClosureId}'(delete).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/financialactivityaccounts'(get).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/financialactivityaccounts'(post).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/financialactivityaccounts/{mappingId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/financialactivityaccounts/{mappingId}'(put).responses.200.description\
>   \ is missing"
> - "attribute paths.'/glaccounts/template'(get).responses.200.description is 
> missing"
> - "attribute paths.'/glaccounts'(get).responses.200.description is missing"
> - "attribute paths.'/glaccounts'(post).responses.200.description is missing"
> - "attribute paths.'/glaccounts/{glAccountId}'(get).responses.200.description 
> is missing"
> - "attribute paths.'/glaccounts/{glAccountId}'(put).responses.200.description 
> is missing"
> - "attribute 
> paths.'/glaccounts/{glAccountId}'(delete).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/journalentries/{transactionId}'(post).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/journalentries/{journalEntryId}'(get).responses.200.description\
>   \ is missing"
> - "attribute paths.'/journalentries'(get).responses.200.description is 
> missing"
> - "attribute paths.'/journalentries'(post).responses.200.description is 
> missing"
> - "attribute paths.'/provisioningentries'(get).responses.200.description is 
> missing"
> - "attribute paths.'/provisioningentries'(post).responses.200.description is 
> missing"
> - "attribute 
> paths.'/provisioningentries/entries'(get).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/provisioningentries/{entryId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/provisioningentries/{entryId}'(post).responses.200.description\
>   \ is missing"
> - "attribute paths.'/accountingrules'(get).responses.200.description is 
> missing"
> - "attribute paths.'/accountingrules'(post).responses.200.description is 
> missing"
> - "attribute 
> paths.'/accountingrules/{accountingRuleId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/accountingrules/{accountingRuleId}'(put).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/accountingrules/{accountingRuleId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute paths.'/accountingrules/template'(get).responses.200.description 
> is missing"
> - "attribute paths.'/audits/searchtemplate'(get).responses.200.description is 
> missing"
> - "attribute paths.'/audits'(get).responses.200.description is missing"
> - "attribute paths.'/audits/{auditId}'(get).responses.200.description is 
> missing"
> - "attribute 
> paths.'/makercheckers/searchtemplate'(get).responses.200.description\
>   \ is missing"
> - "attribute paths.'/makercheckers/{auditId}'(post).responses.200.description 
> is missing"
> - "attribute 
> paths.'/makercheckers/{auditId}'(delete).responses.200.description is\
>   \ missing"
> - "attribute paths.'/makercheckers'(get).responses.200.description is missing"
> - "attribute paths.'/accountnumberformats'(get).responses.200.description is 
> missing"
> - "attribute paths.'/accountnumberformats'(post).responses.200.description is 
> missing"
> - "attribute 
> paths.'/accountnumberformats/template'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/accountnumberformats/{accountNumberFormatId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/accountnumberformats/{accountNumberFormatId}'(put).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/accountnumberformats/{accountNumberFormatId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute paths.'/caches'(get).responses.200.description is missing"
> - "attribute paths.'/caches'(put).responses.200.description is missing"
> - "attribute paths.'/smscampaigns/template'(get).responses.200.description is 
> missing"
> - "attribute 
> paths.'/smscampaigns/{campaignId}'(put).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/smscampaigns/{campaignId}'(post).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/smscampaigns/{campaignId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/smscampaigns/{resourceId}'(get).responses.200.description is\
>   \ missing"
> - "attribute paths.'/smscampaigns'(get).responses.200.description is missing"
> - "attribute paths.'/smscampaigns'(post).responses.200.description is missing"
> - "attribute 
> paths.'/codes/{codeId}/codevalues'(post).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/codes/{codeId}/codevalues/{codeValueId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/codes/{codeId}/codevalues/{codeValueId}'(put).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/codes/{codeId}/codevalues/{codeValueId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute paths.'/codes/{codeId}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/codes/{codeId}'(put).responses.200.description is 
> missing"
> - "attribute paths.'/codes/{codeId}'(delete).responses.200.description is 
> missing"
> - "attribute paths.'/codes'(get).responses.200.description is missing"
> - "attribute paths.'/codes'(post).responses.200.description is missing"
> - "attribute 
> paths.'/externalservice/{servicename}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/configurations/{configId}'(get).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/configurations/{configId}'(put).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/datatables/{datatable}/{apptableId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/datatables/{datatable}/{apptableId}'(put).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/datatables/{datatable}/{apptableId}'(post).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/datatables/{datatable}/{apptableId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/datatables/{datatable}/{apptableId}/{datatableId}'(put).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/datatables/{datatable}/{apptableId}/{datatableId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/datatables/deregister/{datatable}'(post).responses.200.description\
>   \ is missing"
> - "attribute paths.'/datatables'(get).responses.200.description is missing"
> - "attribute paths.'/datatables'(post).responses.200.description is missing"
> - "attribute 
> paths.'/datatables/{datatableName}'(put).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/datatables/{datatableName}'(delete).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/datatables/register/{datatable}/{apptable}'(post).responses.200.description\
>   \ is missing"
> - "attribute paths.'/datatables/{datatable}'(get).responses.200.description 
> is missing"
> - "attribute paths.'/entityDatatableChecks'(get).responses.200.description is 
> missing"
> - "attribute paths.'/entityDatatableChecks'(post).responses.200.description 
> is missing"
> - "attribute 
> paths.'/entityDatatableChecks/template'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/entityDatatableChecks/{entityDatatableCheckId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute paths.'/reports/template'(get).responses.200.description is 
> missing"
> - "attribute paths.'/reports'(get).responses.200.description is missing"
> - "attribute paths.'/reports'(post).responses.200.description is missing"
> - "attribute paths.'/reports/{id}'(get).responses.200.description is missing"
> - "attribute paths.'/reports/{id}'(put).responses.200.description is missing"
> - "attribute paths.'/reports/{id}'(delete).responses.200.description is 
> missing"
> - "attribute paths.'/runreports/{reportName}'(get).responses.200.description 
> is missing"
> - "attribute 
> paths.'/{entityType}/{entityId}/documents'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/{entityType}/{entityId}/documents/{documentId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/{entityType}/{entityId}/documents/{documentId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute paths.'/hooks/template'(get).responses.200.description is 
> missing"
> - "attribute paths.'/hooks/{hookId}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/hooks/{hookId}'(put).responses.200.description is 
> missing"
> - "attribute paths.'/hooks/{hookId}'(delete).responses.200.description is 
> missing"
> - "attribute paths.'/hooks'(get).responses.200.description is missing"
> - "attribute paths.'/hooks'(post).responses.200.description is missing"
> - "attribute paths.'/scheduler'(get).responses.200.description is missing"
> - "attribute paths.'/jobs'(get).responses.200.description is missing"
> - "attribute paths.'/jobs/{jobId}'(get).responses.200.description is missing"
> - "attribute paths.'/jobs/{jobId}/runhistory'(get).responses.200.description 
> is missing"
> - "attribute paths.'/reportmailingjobs'(get).responses.200.description is 
> missing"
> - "attribute paths.'/reportmailingjobs'(post).responses.200.description is 
> missing"
> - "attribute 
> paths.'/reportmailingjobs/{entityId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/reportmailingjobs/{entityId}'(put).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/reportmailingjobs/{entityId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/reportmailingjobs/template'(get).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/reportmailingjobrunhistory'(get).responses.200.description is\
>   \ missing"
> - "attribute paths.'/authentication'(post).responses.200.description is 
> missing"
> - "attribute paths.'/userdetails'(get).responses.200.description is missing"
> - "attribute 
> paths.'/survey/{surveyName}/{apptableId}'(post).responses.200.description\
>   \ is missing"
> - "attribute paths.'/survey/{surveyName}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/survey'(get).responses.200.description is missing"
> - "attribute paths.'/holidays'(get).responses.200.description is missing"
> - "attribute paths.'/holidays'(post).responses.200.description is missing"
> - "attribute paths.'/holidays/{holidayId}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/holidays/{holidayId}'(put).responses.200.description is 
> missing"
> - "attribute paths.'/holidays/{holidayId}'(post).responses.200.description is 
> missing"
> - "attribute paths.'/holidays/{holidayId}'(delete).responses.200.description 
> is missing"
> - "attribute paths.'/currencies'(get).responses.200.description is missing"
> - "attribute paths.'/currencies'(put).responses.200.description is missing"
> - "attribute paths.'/offices/template'(get).responses.200.description is 
> missing"
> - "attribute paths.'/offices/{officeId}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/offices/{officeId}'(put).responses.200.description is 
> missing"
> - "attribute paths.'/offices'(get).responses.200.description is missing"
> - "attribute paths.'/offices'(post).responses.200.description is missing"
> - "attribute 
> paths.'/provisioningcriteria/{criteriaId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/provisioningcriteria/{criteriaId}'(put).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/provisioningcriteria/{criteriaId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute paths.'/provisioningcriteria'(get).responses.200.description is 
> missing"
> - "attribute paths.'/provisioningcriteria'(post).responses.200.description is 
> missing"
> - "attribute paths.'/staff'(post).responses.200.description is missing"
> - "attribute paths.'/staff/{staffId}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/staff/{staffId}'(put).responses.200.description is 
> missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/{cashierId}/summaryandtransactions'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/{cashierId}/transactions'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/{cashierId}/transactions/template'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/{cashierId}/settle'(post).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/{cashierId}/allocate'(post).responses.200.description\
>   \ is missing"
> - "attribute paths.'/tellers/{tellerId}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/tellers/{tellerId}'(put).responses.200.description is 
> missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/{cashierId}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/{cashierId}'(put).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/{cashierId}'(delete).responses.200.description\
>   \ is missing"
> - "attribute paths.'/tellers'(get).responses.200.description is missing"
> - "attribute paths.'/tellers'(post).responses.200.description is missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers/template'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers'(get).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/tellers/{tellerId}/cashiers'(post).responses.200.description\
>   \ is missing"
> - "attribute paths.'/workingdays/template'(get).responses.200.description is 
> missing"
> - "attribute paths.'/workingdays'(get).responses.200.description is missing"
> - "attribute paths.'/workingdays'(put).responses.200.description is missing"
> - "attribute 
> paths.'/clients/{clientId}/charges'(post).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/clients/{clientId}/charges/{chargeId}'(get).responses.200.description\
>   \ is missing"
> - "attribute paths.'/search'(get).responses.200.description is missing"
> - "attribute paths.'/search/advance'(post).responses.200.description is 
> missing"
> - "attribute paths.'/search/template'(get).responses.200.description is 
> missing"
> - "attribute 
> paths.'/surveys/{surveyId}/lookuptables'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/surveys/{surveyId}/lookuptables/{key}'(get).responses.200.description\
>   \ is missing"
> - "attribute 
> paths.'/surveys/scorecards/{surveyId}'(get).responses.200.description\
>   \ is missing"
> - "attribute paths.'/surveys'(get).responses.200.description is missing"
> - "attribute paths.'/surveys/{id}'(get).responses.200.description is missing"
> - "attribute paths.'/templates/template'(get).responses.200.description is 
> missing"
> - "attribute paths.'/templates'(get).responses.200.description is missing"
> - "attribute paths.'/templates'(post).responses.200.description is missing"
> - "attribute paths.'/templates/{templateId}'(get).responses.200.description 
> is missing"
> - "attribute paths.'/templates/{templateId}'(put).responses.200.description 
> is missing"
> - "attribute 
> paths.'/templates/{templateId}'(delete).responses.200.description is\
>   \ missing"
> - "attribute paths.'/passwordpreferences'(get).responses.200.description is 
> missing"
> - "attribute 
> paths.'/passwordpreferences/template'(get).responses.200.description\
>   \ is missing"
> - "attribute paths.'/permissions'(get).responses.200.description is missing"
> - "attribute paths.'/permissions'(put).responses.200.description is missing"
> - "attribute paths.'/roles/{roleId}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/roles/{roleId}'(put).responses.200.description is 
> missing"
> - "attribute paths.'/roles/{roleId}'(post).responses.200.description is 
> missing"
> - "attribute paths.'/roles/{roleId}'(delete).responses.200.description is 
> missing"
> - "attribute paths.'/roles'(get).responses.200.description is missing"
> - "attribute paths.'/roles'(post).responses.200.description is missing"
> - "attribute 
> paths.'/roles/{roleId}/permissions'(get).responses.200.description is\
>   \ missing"
> - "attribute 
> paths.'/roles/{roleId}/permissions'(put).responses.200.description is\
>   \ missing"
> - "attribute paths.'/users/template'(get).responses.200.description is 
> missing"
> - "attribute paths.'/users'(get).responses.200.description is missing"
> - "attribute paths.'/users'(post).responses.200.description is missing"
> - "attribute paths.'/users/{userId}'(get).responses.200.description is 
> missing"
> - "attribute paths.'/users/{userId}'(put).responses.200.description is 
> missing"
> - "attribute paths.'/users/{userId}'(delete).responses.200.description is 
> missing"
> - "attribute paths.'/codes/{codeId}/codevalues/{codeValueId}'. Declared path 
> parameter\
>   \ codeId needs to be defined as a path parameter in path or operation level"
> - "attribute paths.'/likelihood/{ppiName}/{likelihoodId}'. Declared path 
> parameter\
>   \ ppiName needs to be defined as a path parameter in path or operation 
> level"
> - "attribute paths.'/likelihood/{ppiName}/{likelihoodId}'. Declared path 
> parameter\
>   \ ppiName needs to be defined as a path parameter in path or operation 
> level"
> - "attribute paths.'/accounts/{type}/uploadtemplate'. Declared path parameter 
> type\
>   \ needs to be defined as a path parameter in path or operation level"
> - "attribute paths.'/accounts/{type}/downloadtemplate'. Declared path 
> parameter type\
>   \ needs to be defined as a path parameter in path or operation level"
> - "attribute paths.'/{entityType}/{entityId}/calendars/template'. Declared 
> path parameter\
>   \ entityType needs to be defined as a path parameter in path or operation 
> level"
> - "attribute paths.'/{entityType}/{entityId}/calendars/template'. Declared 
> path parameter\
>   \ entityId needs to be defined as a path parameter in path or operation 
> level"
> - "attribute paths.'/clients/{clientId}/charges/template'. Declared path 
> parameter\
>   \ clientId needs to be defined as a path parameter in path or operation 
> level"
> - "attribute paths.'/clients/{clientId}/familymembers/{familyMemberId}'. 
> Declared\
>   \ path parameter clientId needs to be defined as a path parameter in path 
> or operation\
>   \ level"
> - "attribute paths.'/clients/{clientId}/familymembers/{familyMemberId}'. 
> Declared\
>   \ path parameter clientId needs to be defined as a path parameter in path 
> or operation\
>   \ level"
> - "attribute paths.'/clients/{clientId}/familymembers/{familyMemberId}'. 
> Declared\
>   \ path parameter clientId needs to be defined as a path parameter in path 
> or operation\
>   \ level"
> - "attribute paths.'/clients/{clientId}/identifiers/template'. Declared path 
> parameter\
>   \ clientId needs to be defined as a path parameter in path or operation 
> level"
> - "attribute paths.'/loans/{loanId}/collaterals/template'. Declared path 
> parameter\
>   \ loanId needs to be defined as a path parameter in path or operation level"
> - "attribute paths.'/interestratecharts/{chartId}/chartslabs/template'. 
> Declared path\
>   \ parameter chartId needs to be defined as a path parameter in path or 
> operation\
>   \ level"
> - "attribute paths.'/loans/{loanId}/guarantors/uploadtemplate'. Declared path 
> parameter\
>   \ loanId needs to be defined as a path parameter in path or operation level"
> - "attribute paths.'/loans/{loanId}/guarantors/template'. Declared path 
> parameter\
>   \ loanId needs to be defined as a path parameter in path or operation level"
> - "attribute paths.'/loans/{loanId}/guarantors/downloadtemplate'. Declared 
> path parameter\
>   \ loanId needs to be defined as a path parameter in path or operation level"
> - "attribute paths.'/shareproduct/{productId}/dividend/{dividendId}'. 
> Declared path\
>   \ parameter productId needs to be defined as a path parameter in path or 
> operation\
>   \ level"
> schemaValidationMessages: - level: "warning"
>   domain: "validation"
>   keyword: "format"
>   message: "format attribute \"uri-reference\" not supported"
>   schema:     loadingURI: "#"
>     pointer: "/definitions/License/properties/url"
>   instance: null
>   required: null
>   missing: null
> - level: "error"
>   domain: "validation"
>   keyword: "oneOf"
>   message: "instance failed to match exactly one schema (matched 0 out of 2)"
>   schema:     loadingURI: "#"
>     pointer: "/definitions/Responses/patternProperties/^[1-5](?:\\d{2}|XX)$"
>   instance:     pointer: "/paths/~1accountingrules/get/responses/200"
>   required: null
>   missing: null
> {code}
> In the above response, there are basically 2 types of errors:
>  # *"attribute paths.'\{path_name}'(request_type).responses.200.description 
> is missing"* - This is because the "description" field is empty in all the 
> APIs that are producing this error. Eg. 
> [GLClosureApi|https://github.com/apache/fineract/blob/a31d29f1f0aac86c6c7ceb6e1c5e513838312336/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java#L102]
>  # *"attribute paths.'\{path_name}' Declared path parameter\ 
> \{**path_param**} needs to be defined as a path parameter in path or 
> operation level"*
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to