quarkusio/quarkus · error · IllegalArgumentException
value was null
Error message
value was null
What it means
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.
Source
Thrown at independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/headers/LinkDelegate.java:129
char c = value.charAt(curr);
if (c == ',' || c == ';')
break;
buf.append(value.charAt(curr));
curr++;
}
val = buf.toString();
}
}
attributes.add(name, val);
}
}
@Override
public Link fromString(String value) throws IllegalArgumentException {
if (value == null)
throw new IllegalArgumentException("value was null");
Parser parser = new Parser(value);
parser.parse();
return parser.getLink();
}
@Override
public String toString(Link value) throws IllegalArgumentException {
if (value == null)
throw new IllegalArgumentException("value was null");
StringBuilder buf = new StringBuilder("<");
buf.append(value.getUri().toString()).append(">");
for (Map.Entry<String, String> entry : value.getParams().entrySet()) {
buf.append("; ").append(entry.getKey()).append("=\"").append(entry.getValue()).append("\"");
}
return buf.toString();
}View on GitHub (pinned to e1c734241f)
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.
Example fix
// before
Link link = linkDelegate.fromString(response.getHeaderString("Link")); // NPE-risk: throws when null
// after
String raw = response.getHeaderString("Link");
Link link = raw == null ? null : linkDelegate.fromString(raw); Defensive patterns
Strategy: type-guard
Validate before calling
String raw = headers.getHeaderString("Link");
if (raw == null || raw.isBlank()) { /* header absent: skip parsing */ } Type guard
Link tryParseLink(String value) {
return value == null || value.isBlank() ? null : Link.valueOf(value);
} Try / catch
try {
Link link = linkDelegate.fromString(raw);
} catch (IllegalArgumentException e) {
log.warn("Cannot parse Link header", e);
} Prevention
- 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
When it happens
Trigger: Calling LinkDelegate.INSTANCE.fromString(null) directly, or framework code invoking the delegate with a null header value read from an incoming request/response.
Common situations: 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).
Related errors
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/f692bb239fc86883.
Report an issue: GitHub.