{"record":{"id":"490dc4b682acbe06","repo":"quarkusio/quarkus","slug":"param-was-null-490dc4","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/EntityTagDelegate.java","lineNumber":14,"sourceCode":"package org.jboss.resteasy.reactive.common.headers;\n\nimport jakarta.ws.rs.core.EntityTag;\nimport jakarta.ws.rs.ext.RuntimeDelegate;\n\n/**\n * @author <a href=\"mailto:bill@burkecentral.com\">Bill Burke</a>\n */\npublic class EntityTagDelegate implements RuntimeDelegate.HeaderDelegate<EntityTag> {\n    public static final EntityTagDelegate INSTANCE = new EntityTagDelegate();\n\n    public EntityTag fromString(String value) throws IllegalArgumentException {\n        if (value == null)\n            throw new IllegalArgumentException(\"param was null\");\n        boolean weakTag = false;\n        if (value.startsWith(\"W/\")) {\n            weakTag = true;\n            value = value.substring(2);\n        }\n        if (value.startsWith(\"\\\"\")) {\n            value = value.substring(1);\n        }\n        if (value.endsWith(\"\\\"\")) {\n            value = value.substring(0, value.length() - 1);\n        }\n        return new EntityTag(value, weakTag);\n    }\n\n    public String toString(EntityTag value) {\n        String weak = value.isWeak() ? \"W/\" : \"\";\n        return weak + '\"' + value.getValue() + '\"';\n    }","sourceCodeStart":1,"sourceCodeEnd":32,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/headers/EntityTagDelegate.java#L1-L32","documentation":"EntityTagDelegate parses an ETag header value into a javax.ws.rs.core.EntityTag. Null input is rejected with IllegalArgumentException per the HeaderDelegate contract before any W/-prefix or quote parsing.","triggerScenarios":"Calling EntityTagDelegate.INSTANCE.fromString(null), or framework code parsing If-None-Match/If-Match/ETag headers when the header value is null.","commonSituations":"Conditional request handling on clients that send no ETag; reading ETag from responses of servers that don't emit it; manual header map access returning null.","solutions":["Null-check the header string before parsing","Skip conditional-request logic when the ETag is missing","Use Optional for the parsed EntityTag","Ensure servers emit the ETag when clients depend on it"],"exampleFix":"// before\nEntityTag etag = EntityTagDelegate.INSTANCE.fromString(headers.getFirst(\"ETag\"));\n// after\nString v = headers.getFirst(\"ETag\");\nEntityTag etag = (v == null) ? null : EntityTagDelegate.INSTANCE.fromString(v);","handlingStrategy":"type-guard","validationCode":"if (etagHeader == null || etagHeader.isBlank()) { /* no ETag; skip conditional logic */ }","typeGuard":"boolean hasEtag(String v) { return v != null && (v.startsWith(\"W/\\\"\") || v.startsWith(\"\\\"\")); }","tryCatchPattern":"try {\n    EntityTag tag = EntityTagDelegate.INSTANCE.fromString(v);\n} catch (IllegalArgumentException e) {\n    // null/malformed ETag; treat as absent\n}","preventionTips":["Null-check ETag headers before parsing","Verify ETag format (quoted, optional W/ prefix) in tests","Skip conditional-request handling when no ETag is available"],"tags":["jaxrs","etag","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"}