apache/dubbo · error · IllegalArgumentException
defaultValue <= 0
Error message
defaultValue <= 0
What it means
Thrown by getPositiveServiceParameter(service, key, double defaultValue) when the caller passes a defaultValue that is <= 0. The 'positive' accessors enforce that the fallback itself is strictly positive so the returned value can never be zero/negative; a non-positive default is a programming error and is rejected immediately with IllegalArgumentException before any lookup.
Source
Thrown at dubbo-common/src/main/java/org/apache/dubbo/common/URL.java:1759
return StringUtils.isEmpty(value) ? defaultValue : Boolean.parseBoolean(value);
}
public boolean hasServiceParameter(String service, String key) {
String value = getServiceParameter(service, key);
return StringUtils.isNotEmpty(value);
}
public float getPositiveServiceParameter(String service, String key, float defaultValue) {
if (defaultValue <= 0) {
throw new IllegalArgumentException("defaultValue <= 0");
}
float value = getServiceParameter(service, key, defaultValue);
return value <= 0 ? defaultValue : value;
}
public double getPositiveServiceParameter(String service, String key, double defaultValue) {
if (defaultValue <= 0) {
throw new IllegalArgumentException("defaultValue <= 0");
}
double value = getServiceParameter(service, key, defaultValue);
return value <= 0 ? defaultValue : value;
}
public long getPositiveServiceParameter(String service, String key, long defaultValue) {
if (defaultValue <= 0) {
throw new IllegalArgumentException("defaultValue <= 0");
}
long value = getServiceParameter(service, key, defaultValue);
return value <= 0 ? defaultValue : value;
}
public int getPositiveServiceParameter(String service, String key, int defaultValue) {
if (defaultValue <= 0) {
throw new IllegalArgumentException("defaultValue <= 0");
}
int value = getServiceParameter(service, key, defaultValue);View on GitHub (pinned to 3a3043227f)
Solutions
- Pass a genuinely positive default value (e.g. the documented default timeout/weight) instead of 0.
- If zero/negative should be allowed, use getServiceParameter(...) (the non-positive variant) instead of getPositiveServiceParameter.
- Initialize the field holding the default with a real positive constant so it never evaluates to <= 0 at the call site.
Example fix
// before int timeout = url.getPositiveServiceParameter(svc, "timeout", 0); // throws // after double factor = url.getPositiveServiceParameter(svc, "factor", 1.0);
Defensive patterns
Strategy: validation
Validate before calling
// Ensure a strictly positive default before calling the positive accessor
if (defaultValue <= 0) {
throw new IllegalArgumentException("defaultValue must be > 0 for key " + key);
} Prevention
- Never pass 0 as a placeholder to getPositive* accessors.
- Use getServiceParameter(...) when zero/negative is valid.
- Initialize default fields to real positive constants.
When it happens
Trigger: Calling url.getPositiveServiceParameter(service, key, <someDouble>) with a literal 0, negative number, or a computed default that evaluates to <= 0 (e.g. an uninitialized field defaulting to 0.0). The check fires at call time, independent of the actual configured value.
Common situations: Passing 0 as a placeholder default instead of a real positive fallback; a timeout/retry/weight default field left at its JVM zero default; copy-pasting a getPositive* call without supplying a meaningful default; mixing primitive defaults that silently zero-initialize.
Related errors
- Map pairs can not be odd number.
- Invalid url, password without username!
- Invalid url, password without username!
- url missing protocol: "${fullURLStr}"
- task
AI-assisted analysis of apache/dubbo@3a3043227f (2026-08-14).
Data as JSON: /api/errors/39578b386019b478.
Report an issue: GitHub.