{"record":{"id":"2db89fb794f91226","repo":"quarkusio/quarkus","slug":"headername-must-not-be-null","errorCode":null,"errorMessage":"headerName must not be null","messagePattern":"headerName must not be null","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/jaxrs/EntityPartBuilderImpl.java","lineNumber":67,"sourceCode":"            throw new IllegalArgumentException(\"mediaType must not be null\");\n        }\n        this.mediaType = mediaType;\n        return this;\n    }\n\n    @Override\n    public EntityPart.Builder mediaType(String mediaTypeString) throws IllegalArgumentException {\n        if (mediaTypeString == null) {\n            throw new IllegalArgumentException(\"mediaType must not be null\");\n        }\n        this.mediaType = MediaType.valueOf(mediaTypeString);\n        return this;\n    }\n\n    @Override\n    public EntityPart.Builder header(String headerName, String... headerValues) throws IllegalArgumentException {\n        if (headerName == null) {\n            throw new IllegalArgumentException(\"headerName must not be null\");\n        }\n        if (headerValues == null) {\n            throw new IllegalArgumentException(\"headerValues must not be null\");\n        }\n        for (String value : headerValues) {\n            headers.add(headerName, value);\n        }\n        return this;\n    }\n\n    @Override\n    public EntityPart.Builder headers(MultivaluedMap<String, String> newHeaders) throws IllegalArgumentException {\n        if (newHeaders == null) {\n            throw new IllegalArgumentException(\"newHeaders must not be null\");\n        }\n        this.headers = new QuarkusMultivaluedHashMap<>();\n        this.headers.putAll(newHeaders);\n        return this;","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/jaxrs/EntityPartBuilderImpl.java#L49-L85","documentation":"EntityPart.Builder.header(String, String...) adds a header to the part; the header name is mandatory per the Jakarta REST spec, so a null name throws IllegalArgumentException. Header values are validated separately.","triggerScenarios":"Calling partBuilder.header(null, \"value\") or passing a null header name obtained from iteration/lookup.","commonSituations":"Looping over a map whose keys can be null, or copying headers from another request where a name was never set; dynamic header construction from config keys.","solutions":["Pass a valid header name literal, e.g. header(\"Content-Disposition\", ...).","Filter out null keys before copying headers from a map into the builder.","Fix the source collection so header names are never null.","Validate header names (non-null, valid token) before adding."],"exampleFix":"// before\nfor (Entry<String, String> h : headerMap.entrySet()) {\n    builder.header(h.getKey(), h.getValue()); // key may be null\n}\n\n// after\nheaderMap.entrySet().stream()\n    .filter(h -> h.getKey() != null)\n    .forEach(h -> builder.header(h.getKey(), h.getValue()));","handlingStrategy":"validation","validationCode":"if (headerName != null) {\n    builder.header(headerName, headerValue);\n}","typeGuard":"boolean hasHeaderName(String name) {\n    return name != null && !name.isEmpty();\n}","tryCatchPattern":"try {\n    builder.header(name, value);\n} catch (IllegalArgumentException e) {\n    log.warn(\"Skipping part header with null name\");\n}","preventionTips":["Filter null keys when copying headers from maps.","Use literals for well-known header names (Content-Disposition, Content-Type).","Validate header names as valid HTTP tokens before adding."],"tags":["resteasy-reactive","jax-rs","multipart","entitypart","headers","null-argument"],"backgroundTag":"null-required-argument","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}