quarkusio/quarkus · error · IllegalArgumentException

proxyHost must not be null

Error message

proxyHost must not be null

What it means

RestClientBuilderImpl.proxyAddress(String, int) validates its arguments before storing them. A null host cannot form a proxy address, so the builder throws IllegalArgumentException 'proxyHost must not be null'. The special host value "none" is allowed to disable the proxy.

Solutions

  1. Pass "none" instead of null if you intend to disable the proxy
  2. Guard the call with a null/empty check and skip proxyAddress when no host is configured
  3. Fix the config source so the proxy host env var/property is actually populated

Example fix

// before
builder.proxyAddress(System.getenv("PROXY_HOST"), 8080);
// after
String host = System.getenv("PROXY_HOST");
if (host != null) {
    builder.proxyAddress(host, 8080);
}
Defensive patterns

Strategy: validation

Validate before calling

String host = config.getProxyHost();
if (host != null && !host.isBlank()) {
    builder.proxyAddress(host, config.getProxyPort());
}

Type guard

static boolean isUsableProxyHost(String h) { return h != null && !h.isBlank(); }

Try / catch

try {
    builder.proxyAddress(host, port);
} catch (IllegalArgumentException e) {
    if (e.getMessage().contains("proxyHost must not be null")) {
        log.warn("No proxy host configured; skipping proxy");
    } else throw e;
}

Prevention

When it happens

Trigger: Calling builder.proxyAddress(null, somePort) directly, or programmatically passing a null host variable sourced from an unset environment/config value.

Common situations: Reading proxy host from env/config that is unset and passing it unvalidated; code paths that compute the host conditionally but always call proxyAddress.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/75c39d97241f3391. Report an issue: GitHub.

Appendix: source

Thrown at extensions/resteasy-reactive/rest-client/runtime/src/main/java/io/quarkus/rest/client/reactive/runtime/RestClientBuilderImpl.java:229

        return this;
    }

    @Override
    public RestClientBuilderImpl hostnameVerifier(HostnameVerifier hostnameVerifier) {
        clientBuilder.hostnameVerifier(hostnameVerifier);
        return this;
    }

    @Override
    public RestClientBuilderImpl followRedirects(final boolean follow) {
        this.followRedirects = follow;
        return this;
    }

    @Override
    public RestClientBuilderImpl proxyAddress(final String proxyHost, final int proxyPort) {
        if (proxyHost == null) {
            throw new IllegalArgumentException("proxyHost must not be null");
        }
        if ((proxyPort <= 0 || proxyPort > 65535) && !proxyHost.equals("none")) {
            throw new IllegalArgumentException("Invalid port number");
        }
        this.proxyHost = proxyHost;
        this.proxyPort = proxyPort;

        return this;
    }

    public RestClientBuilderImpl proxyPassword(String proxyPassword) {
        this.proxyPassword = proxyPassword;
        return this;
    }

    public RestClientBuilderImpl proxyUser(String proxyUser) {
        this.proxyUser = proxyUser;
        return this;

View on GitHub (pinned to e1c734241f)