quarkusio/quarkus · error · RegistryResolutionException

Failed to load non-platform extension catalog from ${jsonFil

Error message

Failed to load non-platform extension catalog from ${jsonFile}

What it means

MavenNonPlatformExtensionsResolver resolves the non-platform extensions catalog JSON from a local Maven repository file and parses it with ExtensionCatalog.mutableFromFile(). If parsing/loading throws any Exception, it is wrapped in RegistryResolutionException with the file path and the original cause attached. This distinguishes 'file downloaded but unreadable/unparseable' from 'artifact not found' (which returns null).

Source

Thrown at independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenNonPlatformExtensionsResolver.java:49

    public ExtensionCatalog.Mutable resolveNonPlatformExtensions(String quarkusVersion)
            throws RegistryResolutionException {
        final ArtifactCoords baseCoords = config.getArtifact();
        final Artifact catalogArtifact = new DefaultArtifact(baseCoords.getGroupId(),
                baseCoords.getArtifactId(), quarkusVersion, baseCoords.getType(), baseCoords.getVersion());
        log.debug("Resolving non-platform extension catalog %s", catalogArtifact);

        final Path jsonFile;
        try {
            jsonFile = artifactResolver.resolve(catalogArtifact);
        } catch (Exception e) {
            log.debug("Failed to resolve non-platform extension catalog %s", catalogArtifact);
            return null;
        }

        try {
            return ExtensionCatalog.mutableFromFile(jsonFile);
        } catch (Exception e) {
            throw new RegistryResolutionException("Failed to load non-platform extension catalog from " + jsonFile, e);
        }
    }
}

View on GitHub (pinned to e1c734241f)

Solutions

  1. Inspect the file named in the message and validate its JSON (jq/cat the beginning).
  2. Delete the corrupted artifact from the local Maven repo cache and re-resolve to re-download.
  3. Check the intermediate cause (getCause()) to identify the exact parse error.
  4. Verify the mirror/proxy is not substituting error pages for the artifact.
  5. Call clearRegistryCache() and retry the resolution.

Example fix

// before
rm -rf ~/.m2/repository/io/quarkus/registry  // then re-run resolution
// after — or guard in code
try {
    catalog = resolver.resolveNonPlatformExtensions(version);
} catch (RegistryResolutionException e) {
    resolver.clearRegistryCache();
    catalog = resolver.resolveNonPlatformExtensions(version); // re-download
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Java
Path jsonFile = ...; // resolved catalog path
if (jsonFile != null && Files.exists(jsonFile)) {
    try (var reader = Files.newBufferedReader(jsonFile)) {
        if (reader.read() != '{') throw new IllegalStateException("Not JSON: " + jsonFile);
    }
}

Try / catch

// Java
try {
    catalog = resolver.resolveNonPlatformExtensions(coreVersion);
} catch (RegistryResolutionException e) {
    if (e.getMessage().startsWith("Failed to load non-platform extension catalog")) {
        resolver.clearRegistryCache();            // purge corrupt artifact
        catalog = resolver.resolveNonPlatformExtensions(coreVersion); // re-download
    } else throw e;
}

Prevention

When it happens

Trigger: resolveNonPlatformExtensions() finds the downloaded non-platform catalog artifact for a given Quarkus core version, but ExtensionCatalog.mutableFromFile(jsonFile) fails — corrupt/truncated JSON, wrong artifact content (HTML error page saved as JSON), or Jackson mapping incompatibility.

Common situations: Corrupted local Maven cache (~/.m2) entry; a proxy or mirror returning an HTML error page stored as the artifact; a registry extension catalog JSON not matching the expected schema version.

Related errors


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