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

  1. Ensure the URI is non-null before building the link; derive a sensible default (e.g. from the current request).
  2. Skip link generation entirely when the target URI is unavailable.
  3. Use uri(String) with a validated string if that fits better, but still null-check first.
  4. 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

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.