quarkusio/quarkus · error · RuntimeException

Not enough information to build the page. Set at least one o

Error message

Not enough information to build the page. Set at least one of componentLink and/or componentName and/or title

What it means

PageBuilder.build() requires identifying information for the page: at least one of componentName, componentLink, or title. The builder derives a component link from the component name or title when componentLink is absent, but with none of the three set there is nothing to render, so it fails fast.

Source

Thrown at extensions/devui/deployment-spi/src/main/java/io/quarkus/devui/spi/page/PageBuilder.java:147

        return (T) this;
    }

    public T excludeFromMenu() {
        this.includeInMenu = false;
        return (T) this;
    }

    @SuppressWarnings("unchecked")
    public T extension(String extension) {
        this.extensionId = extension.toLowerCase().replaceAll(SPACE, DASH);
        this.metadata.put("extensionName", extension);
        this.metadata.put("extensionId", extensionId); // TODO: Remove ?
        return (T) this;
    }

    public Page build() {
        if (this.componentName == null && this.componentLink == null && this.title == null) {
            throw new RuntimeException(
                    "Not enough information to build the page. Set at least one of componentLink and/or componentName and/or title");
        }

        // Guess the component link from the component name or title
        if (this.componentLink == null) {
            if (this.componentName != null) {
                this.componentLink = this.componentName + DOT_JS;
            } else if (this.title != null) {
                this.componentLink = QWC_DASH + this.title.toLowerCase().replaceAll(SPACE, DASH) + DOT_JS;
            }
        }

        // Guess the component name from the componentlink or title
        if (this.componentName == null) {
            this.componentName = this.componentLink.substring(0, this.componentLink.lastIndexOf(DOT)); // Remove the file extension (.js)
        }

        // Guess the title

View on GitHub (pinned to e1c734241f)

Solutions

  1. Add a title: pageBuilder().title("My Page") — the builder will derive a component link from it
  2. Or set componentLink("qwc-my-page.js") / componentName("qwc-my-page") directly
  3. Validate the source data before building; skip creating the page when the identifying fields are blank
  4. Chain setters in one fluent expression so an identifying call is structurally required

Example fix

// before
PageBuilder pb = new PageBuilder();
Page page = pb.build(); // throws
// after
PageBuilder pb = new PageBuilder()
        .title("My Extension")
        .componentLink("qwc-my-extension.js");
Page page = pb.build();
Defensive patterns

Strategy: validation

Validate before calling

if (componentName == null && componentLink == null && (title == null || title.isBlank())) {
    throw new IllegalStateException("PageBuilder needs componentName, componentLink, or title");
}

Type guard

boolean isBuildablePage(PageBuilder b) {
    return b != null; // plus keep your own record of which identifying setter was applied
}

Try / catch

try {
    return pageBuilder.build();
} catch (RuntimeException e) {
    if (e.getMessage().contains("Not enough information to build the page")) {
        log.warn("Skipping unnamed Dev UI page");
        return null;
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling pageBuilder().build() on a completely fresh builder, or where all three of componentName(...), componentLink(...), title(...) calls were conditionally skipped or passed null/blank values.

Common situations: Extension authors adding Dev UI pages whose name/title come from config that is empty; copy-pasted builder code where all identifying setters were removed; generic page-generation loops where the data source yielded an empty record.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


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