apache/pulsar · error · IllegalArgumentException

Invalid topic domain

Error message

Invalid topic domain: '${value}'

What it means

TopicDomain.getEnum converts a string ('persistent' or 'non-persistent', case-insensitive) into the TopicDomain enum and throws IllegalArgumentException for any other value. The library restricts topic domains to its known enum values.

Solutions

  1. Use TopicDomain.persistent.value() (or the enum constant) instead of hand-writing the domain string
  2. Validate the domain string against the allowed values before calling getEnum
  3. Normalize user input (trim, lowercase) and reject unknown values with a clear message

Example fix

// before
TopicDomain domain = TopicDomain.getEnum(userInput);
// after
if (!"persistent".equalsIgnoreCase(userInput) && !"non-persistent".equalsIgnoreCase(userInput)) {
    throw new IllegalArgumentException("domain must be persistent or non-persistent");
}
TopicDomain domain = TopicDomain.getEnum(userInput.trim());
Defensive patterns

Strategy: validation

Validate before calling

boolean isValidTopicDomain(String v) {
    return "persistent".equalsIgnoreCase(v) || "non-persistent".equalsIgnoreCase(v);
}

Try / catch

try {
    TopicDomain d = TopicDomain.getEnum(value);
} catch (IllegalArgumentException e) {
    throw new IllegalArgumentException("topic domain must be persistent|non-persistent: " + value);
}

Prevention

When it happens

Trigger: Calling TopicDomain.getEnum(value) with anything other than 'persistent' or 'non-persistent' — e.g. building a TopicName from a user-supplied or config-supplied domain string.

Common situations: Typos like 'persistant', using 'persistent://...' parsing with a mangled scheme, dynamic topic URLs from user input containing unexpected domains, or future/unknown domain values from newer clients.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of apache/pulsar@820761864e (2026-09-06). Data as JSON: /api/errors/6785a41e05269e21. Report an issue: GitHub.

Appendix: source

Thrown at pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/naming/TopicDomain.java:44

    topic("topic"), segment("segment");

    private String value;

    private TopicDomain(String value) {
        this.value = value;
    }

    public String value() {
        return this.value;
    }

    public static TopicDomain getEnum(String value) {
        for (TopicDomain e : values()) {
            if (e.value.equalsIgnoreCase(value)) {
                return e;
            }
        }
        throw new IllegalArgumentException("Invalid topic domain: '" + value + "'");
    }

    @Override
    public String toString() {
        return this.value;
    }
}

View on GitHub (pinned to 820761864e)