quarkusio/quarkus · error · RuntimeException

Platform ${platformKey} does not include any stream

Error message

Platform ${platformKey} does not include any stream

What it means

Platform.getRecommendedStream() is a convenience that returns the first stream of the platform. If the platform's streams collection is empty there is nothing to recommend, so it throws RuntimeException identifying the platform key. It indicates an incomplete or degenerate platform catalog entry.

Source

Thrown at independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/catalog/Platform.java:26

import io.quarkus.registry.json.JsonBuilder;

public interface Platform {

    String getPlatformKey();

    String getName();

    Collection<PlatformStream> getStreams();

    Map<String, Object> getMetadata();

    PlatformStream getStream(String id);

    @JsonIgnore
    default PlatformStream getRecommendedStream() {
        final Collection<PlatformStream> streams = getStreams();
        if (streams.isEmpty()) {
            throw new RuntimeException("Platform " + getPlatformKey() + " does not include any stream");
        }
        return streams.iterator().next();
    }

    default Mutable mutable() {
        return new PlatformImpl.Builder(this);
    }

    interface Mutable extends Platform, JsonBuilder<Platform> {
        Mutable setMetadata(Map<String, Object> metadata);

        Mutable setPlatformKey(String platformKey);

        Mutable setName(String name);

        Mutable setStreams(Collection<PlatformStream> streams);

        Mutable addStream(PlatformStream stream);

View on GitHub (pinned to e1c734241f)

Solutions

  1. Check streams.isEmpty()/getStreams() before calling getRecommendedStream() and pick a platform with streams.
  2. Use a different platformKey whose catalog actually contains streams.
  3. Fix the platform catalog JSON on the registry side to include at least one stream.
  4. Guard with try-catch and fall back to a known-good platform.

Example fix

// before
PlatformStream s = platform.getRecommendedStream(); // throws if empty
// after
if (!platform.getStreams().isEmpty()) {
    PlatformStream s = platform.getRecommendedStream();
} else {
    // pick another platform or skip
}
Defensive patterns

Strategy: type-guard

Validate before calling

// Java
if (platform == null || platform.getStreams() == null || platform.getStreams().isEmpty()) {
    // skip or choose another platform
}

Type guard

// Java
static Optional<PlatformStream> recommendedStreamOrNull(Platform p) {
    return (p == null || p.getStreams().isEmpty())
            ? Optional.empty()
            : Optional.of(p.getStreams().iterator().next());
}

Try / catch

// Java
try {
    PlatformStream s = platform.getRecommendedStream();
} catch (RuntimeException e) {
    if (e.getMessage().endsWith("does not include any stream")) {
        // fall back to another platformKey
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling getRecommendedStream() on a Platform deserialized from a platform catalog JSON whose streams array is empty — e.g. a registry returning a platform entry with no published streams for the requested version.

Common situations: A newly created/partially published platform in a registry; an internal registry with a placeholder platform entry; filtered-out streams leaving an empty list after upstream filtering.

Related errors


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