{"record":{"id":"5ff51713a2f477a7","repo":"flowable/flowable-engine","slug":"no-queryuserbyfullnamelike-configured","errorCode":null,"errorMessage":"No 'queryUserByFullNameLike' configured","messagePattern":"No 'queryUserByFullNameLike' configured","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-ldap/src/main/java/org/flowable/ldap/LDAPQueryBuilder.java","lineNumber":90,"sourceCode":"                }\n\n            });\n\n            searchExpression = MessageFormat.format(ldapConfigurator.getQueryGroupsForUser(), Rdn.escapeValue(userDn));\n\n        } else {\n            searchExpression = userId;\n        }\n        return searchExpression;\n    }\n\n    public String buildQueryByFullNameLike(final LDAPConfiguration ldapConfigurator, String searchText) {\n        String searchExpression = null;\n        if (ldapConfigurator.getQueryUserByFullNameLike() != null) {\n            searchExpression = MessageFormat.format(ldapConfigurator.getQueryUserByFullNameLike(), ldapConfigurator.getUserFirstNameAttribute(), searchText, ldapConfigurator.getUserLastNameAttribute(),\n                    searchText);\n        } else {\n            throw new FlowableIllegalArgumentException(\"No 'queryUserByFullNameLike' configured\");\n        }\n        return searchExpression;\n    }\n\n    public String buildQueryGroupsById(LDAPConfiguration ldapConfigurator, String groupId) {\n        String searchExpression;\n        if (ldapConfigurator.getQueryGroupByGroupId() != null) {\n            searchExpression = MessageFormat.format(ldapConfigurator.getQueryGroupByGroupId(), groupId);\n        } else {\n            searchExpression = groupId;\n        }\n        return searchExpression;\n    }\n\n    protected SearchControls createSearchControls(LDAPConfiguration ldapConfigurator) {\n        SearchControls searchControls = new SearchControls();\n        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);\n        searchControls.setTimeLimit(ldapConfigurator.getSearchTimeLimit());","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-ldap/src/main/java/org/flowable/ldap/LDAPQueryBuilder.java#L72-L108","documentation":"LDAPQueryBuilder.buildQueryByFullNameLike builds the LDAP search filter for 'find users where full name like X'. Unlike most other query templates, the Flowable LDAP integration has no built-in default for this filter, so it requires the 'queryUserByFullNameLike' property in the LDAPConfigurator. When it is absent, the builder throws FlowableIllegalArgumentException.","triggerScenarios":"Executing a UserQuery with .userFullNameLike(\"...\") (e.g. via LDAPIdentityService.createUserQuery().userFullNameLike(...)) while the LDAPConfigurator instance was created without setting queryUserByFullNameLike.","commonSituations":"Applications that use LDAP user queries for other criteria but only later add a full-name-like search; config files copied from older examples that omit the queryUserByFullNameLike property; upgrades where new query capabilities are used but the LDAP config was not extended.","solutions":["Set queryUserByFullNameLike on the LDAPConfigurator, e.g. ldapConfigurator.setQueryUserByFullNameLike(\"(& (objectclass=inetOrgPerson) (|({0}={1})(_givenName={2}*)(sn={3}*)))\") with a MessageFormat pattern matching your schema.","Avoid calling userFullNameLike on the LDAP user query until the property is configured.","Verify the LDAP configuration actually loaded the property (check that getQueryUserByFullNameLike() returns non-null at startup)."],"exampleFix":"// before\nLDAPConfigurator cfg = LDAPConfiguratorImpl.fromXml(...); // no queryUserByFullNameLike\nList<User> users = cfg.getIdentityService().createUserQuery().userFullNameLike(\"jo\").list();\n\n// after\ncfg.setQueryUserByFullNameLike(\"(& (objectclass=inetOrgPerson) (|({0}={2}*)(displayName={1}*)))\");\nList<User> users = cfg.getIdentityService().createUserQuery().userFullNameLike(\"jo\").list();","handlingStrategy":"validation","validationCode":"Objects.requireNonNull(ldapConfigurator.getQueryUserByFullNameLike(), \"queryUserByFullNameLike must be configured before using userFullNameLike queries\");","typeGuard":null,"tryCatchPattern":"try { return userQuery.userFullNameLike(pattern).list(); } catch (FlowableIllegalArgumentException e) { log.error(\"LDAP config missing queryUserByFullNameLike\", e); throw e; }","preventionTips":["Define all LDAP query templates (including queryUserByFullNameLike) in the base configurator used across the app.","Add a startup check that asserts required LDAP query properties are set.","Keep LDAP configuration templates in version control to avoid omissions."],"tags":["ldap","configuration","missing-property","user-query"],"backgroundTag":"missing-required-config-field","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"}