qorelanguage / qore

Qore Programming Language
GNU General Public License v2.0
58 stars 10 forks source link

Swagger calls can fail with spurious type errors #4825

Closed davidnich closed 9 months ago

davidnich commented 9 months ago

using hard typing and nested references while converting types to fit the scheme where allowed can cause spurious errors that we very difficult to debug - ex:

Unexpected exception: RUNTIME-TYPE-ERROR at /Users/david/src/Qorus/test/qlib/Swagger.qm:552 (Qore)
-----
    >> System exception: /Users/david/src/Qorus/test/qlib/Swagger.qm:552 (Qore): RUNTIME-TYPE-ERROR: <lvalue> expects type 'string', but got type 'list<string>' instead (while checking parameter "orderkeys") (while checking parameter "body") (while checking body parameter) (URL https://192.168.16.11:8011/orders/153209/updateKeys)
    >>   *** RETHROW at /Users/david/src/Qorus/test/qlib/QorusClientBase.qm:248 (Qore)
    >>   *** RETHROW at /Users/david/src/Qorus/test/qlib/RestClient.qm:1354 (Qore)
    >>   *** RETHROW at /Users/david/src/Qorus/test/qlib/Swagger.qm:3441 (Qore)
    >>   *** RETHROW at /Users/david/src/Qorus/test/qlib/Swagger.qm:556 (Qore)
    >>   *** RETHROW at /Users/david/src/Qorus/test/qlib/Swagger.qm:556 (Qore)
    >>   SchemaBase::check() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:4290 (Qore user code)
    >>   SchemaObject::check() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:4332 (Qore user code)
    >>   SchemaObject::checkIntern() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:557 (Qore user code)
    >>   SchemaBase::check() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:4290 (Qore user code)
    >>   SchemaObject::check() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:4332 (Qore user code)
    >>   SchemaObject::checkIntern() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:557 (Qore user code)
    >>   SchemaBase::check() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:4290 (Qore user code)
    >>   SchemaObject::check() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:3442 (Qore user code)
    >>   BodyParameter::check() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:2962 (Qore user code)
    >>   OperationObject::validateRequest() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:1909 (Qore user code)
    >>   SwaggerSchema::processRequestIntern() called at /Users/david/src/Qorus/test/qlib/Swagger.qm:1530 (Qore user code)
    >>   SwaggerSchema::processRequestImpl() called at /Users/david/src/Qorus/test/qlib/RestSchemaValidator.qm:249 (Qore user code)
    >>   AbstractRestSchemaValidator::processRequest() called at /Users/david/src/Qorus/test/qlib/RestClient.qm:1696 (Qore user code)
    >>   RestClient::prepareMsg() called at /Users/david/src/Qorus/test/qlib/DataStreamClient.qm:662 (Qore user code)
    >>   DataStreamClient::prepareMsg() called at /Users/david/src/Qorus/test/qlib/RestClient.qm:1361 (Qore user code)
    >>   RestClient::doRequestIntern() called at /Users/david/src/Qorus/test/qlib/RestClient.qm:1325 (Qore user code)
    >>   RestClient::doRequest() called at /Users/david/src/Qorus/test/qlib/QorusClientBase.qm:226 (Qore user code)
    >>   QorusSystemRestHelperBase::doRequest() called at /Users/david/src/Qorus/test/qlib/QorusClientBase.qm:15192 (Qore user code)
    >>   QorusSystemRestHelper::restDo() called at /Users/david/src/Qorus/test/qlib/QorusClientBase.qm:199 (Qore user code)
    >>   QorusSystemRestHelper::put() called at ./issue-3843.qtest:715 (Qore user code)
    >>   Main::mainTest() called at <builtin>:-1 (Qore user code)
    >>   call_function_args() called at /Users/david/src/Qorus/test/qlib/QUnit.qm:507 (Qore builtin code)
    >>   TestCase::run() called at /Users/david/src/Qorus/test/qlib/QUnit.qm:2120 (Qore user code)
    >>   Test::main() called at ./issue-3843.qtest:28 (Qore user code)
    >>   Main::constructor() called at <builtin>:-1 (Qore user code)