quarkusio/quarkus · error · IllegalArgumentException
URI was null
Error message
URI was null
What it means
Link.Builder.uri(URI) throws IllegalArgumentException when the supplied URI is null. A Web Link requires a target URI; the JAX-RS Link.Builder contract mandates non-null input, so the implementation fails fast rather than producing an invalid link.
Source
Thrown at independent-projects/resteasy-reactive/common/runtime/src/main/java/org/jboss/resteasy/reactive/common/jaxrs/LinkBuilderImpl.java:45
return this;
}
@Override
public Link.Builder link(String link) {
Link l = LinkImpl.valueOf(link);
return link(l);
}
@Override
public Link.Builder uriBuilder(UriBuilder uriBuilder) {
this.uriBuilder = uriBuilder.clone();
return this;
}
@Override
public Link.Builder uri(URI uri) {
if (uri == null)
throw new IllegalArgumentException("URI was null");
uriBuilder = UriBuilder.fromUri(uri);
return this;
}
@Override
public Link.Builder uri(String uri) throws IllegalArgumentException {
if (uri == null)
throw new IllegalArgumentException("URI was null");
uriBuilder = UriBuilder.fromUri(uri);
return this;
}
@Override
public Link.Builder rel(String rel) {
if (rel == null)
throw new IllegalArgumentException("param was null");
final String rels = this.map.get(Link.REL);
param(Link.REL, rels == null ? rel : rels + " " + rel);View on GitHub (pinned to e1c734241f)
Solutions
- Ensure the URI is non-null before building the link; derive a sensible default (e.g. from the current request).
- Skip link generation entirely when the target URI is unavailable.
- Use uri(String) with a validated string if that fits better, but still null-check first.
- Guard helper methods that build links so they return Optional<Link> when the URI is missing.
Example fix
// before
Link link = Link.fromUri(baseUri).build(); // NPE risk / IllegalArgumentException when baseUri == null
// after
if (baseUri == null) {
return null; // or a default link
}
Link link = Link.fromUri(baseUri).build(); Defensive patterns
Strategy: validation
Validate before calling
if (uri == null) {
// skip or substitute
return null;
}
Link link = Link.fromUri(uri).build(); Type guard
static Optional<Link> linkIfPresent(URI uri) {
return Optional.ofNullable(uri).map(u -> Link.fromUri(u).build());
} Try / catch
try {
return Link.fromUri(uri).build();
} catch (IllegalArgumentException e) {
if ("URI was null".equals(e.getMessage())) {
LOG.warn("link target URI missing; skipping link");
return null;
}
throw e;
} Prevention
- Make base URIs required configuration so they are never null.
- Return Optional<Link> from link-building helpers.
- Null-check URIs parsed from headers before using them for links.
When it happens
Trigger: Calling Link.fromUri(someUri) / builder.uri(someUri) where the URI variable is null — commonly from an unresolved lookup like UriInfo.getRequestUri() returning null in a test, or a config-derived base URI that was never set.
Common situations: Building HATEOAS links where the base URL comes from optional configuration; constructing links from parsed headers that were absent; unit tests that skip URI initialization.
Related errors
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/c1d0cb07652de210.
Report an issue: GitHub.