{"record":{"id":"03b625de9ec376da","repo":"flowable/flowable-engine","slug":"configurations-are-null","errorCode":null,"errorMessage":"configurations are null","messagePattern":"configurations are null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-eventsubscription-service/src/main/java/org/flowable/eventsubscription/service/impl/EventSubscriptionQueryImpl.java","lineNumber":449,"sourceCode":"    @Override\n    public EventSubscriptionQueryImpl configuration(String configuration) {\n        if (configuration == null) {\n            throw new FlowableIllegalArgumentException(\"configuration is null\");\n        }\n\n        if (inOrStatement) {\n            this.currentOrQueryObject.configuration = configuration;\n        } else {\n            this.configuration = configuration;\n        }\n\n        return this;\n    }\n\n    @Override\n    public EventSubscriptionQueryImpl configurations(Collection<String> configurations) {\n        if (configurations == null) {\n            throw new FlowableIllegalArgumentException(\"configurations are null\");\n        }\n\n        if (inOrStatement) {\n            this.currentOrQueryObject.configurations = configurations;\n        } else {\n            this.configurations = configurations;\n        }\n\n        return this;\n    }\n\n    @Override\n    public EventSubscriptionQueryImpl withoutConfiguration() {\n        if (inOrStatement) {\n            this.currentOrQueryObject.withoutConfiguration = true;\n        } else {\n            this.withoutConfiguration = true;\n        }","sourceCodeStart":431,"sourceCodeEnd":467,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-eventsubscription-service/src/main/java/org/flowable/eventsubscription/service/impl/EventSubscriptionQueryImpl.java#L431-L467","documentation":"EventSubscriptionQueryImpl.configurations() requires a non-null Collection of configuration values for an IN-style filter. Flowable throws FlowableIllegalArgumentException when the collection is null; empty is permitted, null is not, because the query builder cannot translate null into a predicate.","triggerScenarios":"Calling eventSubscriptionQuery.configurations(null), e.g. passing a nullable list of message/signal names loaded from config or deserialized from a request with the field omitted.","commonSituations":"Batch lookups of subscriptions for multiple signal names where the name list is assembled dynamically and can be absent; JSON body field missing mapped to null.","solutions":["Default the collection to Collections.emptyList() before the call, or skip the configurations() call","Coerce null lists to empty at deserialization time (e.g. initialize field to a new ArrayList)","Validate the input list at the API boundary before building the query"],"exampleFix":"// before\nquery.configurations(signalNames);\n\n// after\nquery.configurations(signalNames == null ? Collections.emptyList() : signalNames);","handlingStrategy":"validation","validationCode":"if (configurations == null) {\n    configurations = Collections.emptyList();\n}","typeGuard":"boolean validConfigurations(Collection<String> c) { return c != null && c.stream().allMatch(Objects::nonNull); }","tryCatchPattern":"try {\n    query.configurations(configurations);\n} catch (FlowableIllegalArgumentException e) {\n    log.warn(\"configurations null\", e);\n}","preventionTips":["Default collection fields to empty lists in DTOs","Normalize null lists before query building","Prefer empty-collection semantics over null in APIs"],"tags":["flowable","query","null-check","collection"],"backgroundTag":"null-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}