{"record":{"id":"b5bbb3500e6da1d2","repo":"quarkusio/quarkus","slug":"extension-extension-was-configured-to-require-a","errorCode":null,"errorMessage":"Extension ${extension} was configured to require a capability with an empty name: ${requiresStr}","messagePattern":"Extension (.+?) was configured to require a capability with an empty name: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/CapabilityContract.java","lineNumber":40,"sourceCode":"     */\n    @Deprecated(forRemoval = true)\n    public static CapabilityContract providesCapabilities(String extension, String commaSeparatedList) {\n        return of(extension, commaSeparatedList, null);\n    }\n\n    public static CapabilityContract of(String extension, String providesStr, String requiresStr) {\n\n        final Collection<String> provides = parseCapabilities(providesStr);\n        for (String name : provides) {\n            if (name.isEmpty()) {\n                throw new IllegalArgumentException(\"Extension \" + extension\n                        + \" was configured to provide a capability with an empty name: \" + providesStr);\n            }\n        }\n        final Collection<String> requires = parseCapabilities(requiresStr);\n        for (String name : requires) {\n            if (name.isEmpty()) {\n                throw new IllegalArgumentException(\"Extension \" + extension\n                        + \" was configured to require a capability with an empty name: \" + requiresStr);\n            }\n        }\n\n        return new CapabilityContract(extension, provides, requires);\n    }\n\n    private static Collection<String> parseCapabilities(String s) {\n        return s == null || s.isBlank() ? List.of() : Arrays.asList(capabilitiesPattern.split(s));\n    }\n\n    private final String extension;\n    private final Collection<String> providesCapabilities;\n    private final Collection<String> requiresCapabilities;\n\n    /**\n     * @deprecated in favor of {@link #CapabilityContract(String, Collection, Collection)}\n     *","sourceCodeStart":22,"sourceCodeEnd":58,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/CapabilityContract.java#L22-L58","documentation":"CapabilityContract.of() also validates the 'requires' capability list; any empty capability name in the requires string throws IllegalArgumentException. This keeps capability dependency metadata well-formed so conflict/missing-capability resolution works correctly.","triggerScenarios":"Calling CapabilityContract.of(extension, providesStr, requiresStr) where requiresStr parses to an empty name — e.g. trailing comma 'a,b,', double comma, or a whitespace-only segment.","commonSituations":"Hand-edited quarkus.requires-capabilities values in extension descriptors, generated strings with empty items from list joining, copy-paste of capability lists.","solutions":["Fix the requires string so it contains only non-empty comma-separated capability names.","Sanitize input: split on comma, trim, filter blank entries before calling of().","Locate which extension declares the malformed requires list and correct its build metadata."],"exampleFix":"// before\nCapabilityContract.of(\"my-ext\", \"io.quarkus.jpa\", \"io.quarkus.datasource,\");\n// after\nString requires = Stream.of(\"io.quarkus.datasource,\")\n        .map(String::trim).filter(s -> !s.isEmpty())\n        .collect(Collectors.joining(\",\"));\nCapabilityContract.of(\"my-ext\", \"io.quarkus.jpa\", requires);","handlingStrategy":"validation","validationCode":"boolean valid = Arrays.stream(requiresStr.split(\",\"))\n        .map(String::trim)\n        .allMatch(s -> !s.isEmpty());\nif (!valid) throw new IllegalArgumentException(\"requires contains empty capability name: \" + requiresStr);","typeGuard":null,"tryCatchPattern":"try {\n    return CapabilityContract.of(ext, provides, requires);\n} catch (IllegalArgumentException e) {\n    throw new IllegalStateException(\"Malformed requires-capabilities for \" + ext, e);\n}","preventionTips":["Trim and filter capability entries before joining with commas.","Validate generated capability strings in extension build scripts.","Search extension config for 'quarkus.requires-capabilities' values with stray commas."],"tags":["capabilities","application-model","configuration"],"backgroundTag":"empty-capability-name","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}