{"record":{"id":"f692bb239fc86883","repo":"quarkusio/quarkus","slug":"value-was-null","errorCode":null,"errorMessage":"value was null","messagePattern":"value was null","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/headers/LinkDelegate.java","lineNumber":129,"sourceCode":"                        char c = value.charAt(curr);\n                        if (c == ',' || c == ';')\n                            break;\n                        buf.append(value.charAt(curr));\n                        curr++;\n                    }\n                    val = buf.toString();\n                }\n            }\n            attributes.add(name, val);\n\n        }\n\n    }\n\n    @Override\n    public Link fromString(String value) throws IllegalArgumentException {\n        if (value == null)\n            throw new IllegalArgumentException(\"value was null\");\n        Parser parser = new Parser(value);\n        parser.parse();\n        return parser.getLink();\n    }\n\n    @Override\n    public String toString(Link value) throws IllegalArgumentException {\n        if (value == null)\n            throw new IllegalArgumentException(\"value was null\");\n        StringBuilder buf = new StringBuilder(\"<\");\n        buf.append(value.getUri().toString()).append(\">\");\n\n        for (Map.Entry<String, String> entry : value.getParams().entrySet()) {\n            buf.append(\"; \").append(entry.getKey()).append(\"=\\\"\").append(entry.getValue()).append(\"\\\"\");\n        }\n\n        return buf.toString();\n    }","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/headers/LinkDelegate.java#L111-L147","documentation":"LinkDelegate.fromString(String) implements RuntimeDelegate's HeaderDelegate contract and explicitly rejects a null input with IllegalArgumentException(\"value was null\"), because a null header value cannot be parsed into a Link.","triggerScenarios":"Calling LinkDelegate.INSTANCE.fromString(null) directly, or framework code invoking the delegate with a null header value read from an incoming request/response.","commonSituations":"Client code parsing an optional Link header without checking HttpHeaders.getRequestHeader/getHeaderString for null first; tests passing null; header absent on responses (e.g. no pagination Link).","solutions":["Check the header value for null before parsing: String v = headers.getHeaderString(\"Link\"); if (v != null) Link.valueOf(v).","Provide an empty/default handling path when the header is absent instead of invoking the delegate.","Catch IllegalArgumentException if null cannot be ruled out at the call site.","In tests, assert header presence before parsing to localize the failure."],"exampleFix":"// before\nLink link = linkDelegate.fromString(response.getHeaderString(\"Link\")); // NPE-risk: throws when null\n// after\nString raw = response.getHeaderString(\"Link\");\nLink link = raw == null ? null : linkDelegate.fromString(raw);","handlingStrategy":"type-guard","validationCode":"String raw = headers.getHeaderString(\"Link\");\nif (raw == null || raw.isBlank()) { /* header absent: skip parsing */ }","typeGuard":"Link tryParseLink(String value) {\n    return value == null || value.isBlank() ? null : Link.valueOf(value);\n}","tryCatchPattern":"try {\n    Link link = linkDelegate.fromString(raw);\n} catch (IllegalArgumentException e) {\n    log.warn(\"Cannot parse Link header\", e);\n}","preventionTips":["getHeaderString returns null for absent headers — always check first","Treat the Link header as optional in clients (pagination may not be present)","Default to null/Optional.empty instead of parsing null"],"tags":["null-check","jaxrs","http-headers","link-header"],"backgroundTag":"null-argument","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}