{"record":{"id":"119e2ba118bef9e2","repo":"quarkusio/quarkus","slug":"param-was-null-119e2b","errorCode":null,"errorMessage":"Param was null","messagePattern":"Param was null","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"warning","filePath":"independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/headers/DateDelegate.java","lineNumber":18,"sourceCode":"package org.jboss.resteasy.reactive.common.headers;\n\nimport java.util.Date;\n\nimport jakarta.ws.rs.ext.RuntimeDelegate;\n\nimport org.jboss.resteasy.reactive.common.util.DateUtil;\n\n/**\n * @author <a href=\"mailto:bill@burkecentral.com\">Bill Burke</a>\n */\npublic class DateDelegate implements RuntimeDelegate.HeaderDelegate<Date> {\n    public static final DateDelegate INSTANCE = new DateDelegate();\n\n    @Override\n    public Date fromString(String value) {\n        if (value == null)\n            throw new IllegalArgumentException(\"Param was null\");\n        return DateUtil.parseDate(value);\n    }\n\n    @Override\n    public String toString(Date value) {\n        if (value == null)\n            throw new IllegalArgumentException(\"Param was null\");\n        return DateUtil.formatDate(value);\n    }\n}\n","sourceCodeStart":1,"sourceCodeEnd":29,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/headers/DateDelegate.java#L1-L29","documentation":"DateDelegate parses an HTTP date header string (Date, Expires, Last-Modified, etc.) into java.util.Date. Null input is rejected with IllegalArgumentException per the RuntimeDelegate.HeaderDelegate contract before DateUtil.parseDate is invoked.","triggerScenarios":"Calling DateDelegate.INSTANCE.fromString(null) directly, or framework header parsing invoking it when a date header is absent/null.","commonSituations":"Reading Expires/Last-Modified from responses that don't include the header; caching layers that assume the header exists; tests feeding null into the delegate.","solutions":["Null-check the header string before parsing","Skip cache/date logic when the header is missing","Default to 'now' or a sentinel only when your use case allows it","Guard Map lookups with getOrDefault or Optional.ofNullable"],"exampleFix":"// before\nDate expires = DateDelegate.INSTANCE.fromString(headers.getFirst(\"Expires\"));\n// after\nString v = headers.getFirst(\"Expires\");\nDate expires = (v == null) ? null : DateDelegate.INSTANCE.fromString(v);","handlingStrategy":"type-guard","validationCode":"if (dateHeader == null || dateHeader.isBlank()) { /* no date header present */ }","typeGuard":"boolean hasDate(String v) { return v != null && !v.isBlank(); }","tryCatchPattern":"try {\n    Date d = DateDelegate.INSTANCE.fromString(v);\n} catch (IllegalArgumentException e) {\n    // null or unparseable date; treat header as absent\n}","preventionTips":["Null-check before parsing date headers","Handle missing Date/Expires/Last-Modified headers explicitly","Prefer Optional lookups from header maps"],"tags":["jaxrs","http-date","null-check","http-headers"],"backgroundTag":"null-header-value","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"}