{"record":{"id":"6f6f65f10aa30cee","repo":"flowable/flowable-engine","slug":"error-retrieving-app-engine-info","errorCode":null,"errorMessage":"Error retrieving app engine info","messagePattern":"Error retrieving app engine info","errorType":"exception","errorClass":"FlowableException","httpStatus":500,"severity":"error","filePath":"modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/management/AppEngineResource.java","lineNumber":66,"sourceCode":"            restApiInterceptor.accessAppManagementInfo();\n        }\n        \n        EngineInfoResponse response = new EngineInfoResponse();\n\n        try {\n            AppEngine appEngine = AppEngines.getDefaultAppEngine();\n            EngineInfo appEngineInfo = AppEngines.getAppEngineInfo(appEngine.getName());\n\n            if (appEngineInfo != null) {\n                response.setName(appEngineInfo.getName());\n                response.setResourceUrl(appEngineInfo.getResourceUrl());\n                response.setException(appEngineInfo.getException());\n            } else {\n                response.setName(appEngine.getName());\n            }\n            \n        } catch (Exception e) {\n            throw new FlowableException(\"Error retrieving app engine info\", e);\n        }\n\n        response.setVersion(AppEngine.class.getPackage().getImplementationVersion());\n\n        return response;\n    }\n}\n","sourceCodeStart":48,"sourceCodeEnd":74,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/management/AppEngineResource.java#L48-L74","documentation":"Thrown by HistoricTaskInstanceQuery.taskNameInIgnoreCase(Collection) when the passed collection is null. The query builder requires a concrete, non-null list of task names to build the SQL IN clause; a null would make it impossible to construct a valid query. This is an argument-validation guard at API entry.","triggerScenarios":"Calling taskNameInIgnoreCase(null), typically when a nullable variable holding the name list is passed straight into the query builder.","commonSituations":"A method parameter or configuration value that resolves to null (empty optional, missing request parameter, unmapped JSON field) is forwarded directly to taskNameInIgnoreCase.","solutions":["Check the collection for null before calling taskNameInIgnoreCase and skip setting the filter when absent.","Default to an empty list at the source and only call taskNameInIgnoreCase when it is non-empty (note: an empty list also throws).","Fix the upstream producer so the name list is populated instead of null."],"exampleFix":"// before\nquery.taskNameInIgnoreCase(names); // names may be null\n\n// after\nif (names != null && !names.isEmpty()) {\n    query.taskNameInIgnoreCase(names);\n}","handlingStrategy":"validation","validationCode":"if (names == null) { return Collections.emptyList(); }\nif (names.isEmpty()) { return Collections.emptyList(); }\nquery.taskNameInIgnoreCase(names);","typeGuard":"static boolean isNonEmpty(Collection<String> c) { return c != null && !c.isEmpty(); }","tryCatchPattern":"try {\n    query.taskNameInIgnoreCase(names);\n} catch (FlowableIllegalArgumentException e) {\n    LOG.warn(\"Invalid task name filter: {}\", e.getMessage());\n    return Collections.emptyList();\n}","preventionTips":["Never pass optional collections straight into Flowable query builders","Normalize null lists to empty lists at API boundaries","Wrap query construction in a shared validation helper"],"tags":["flowable","query-builder","null-argument","validation"],"backgroundTag":"null-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}