badges/shields · error · InvalidResponse

property 'release' not found

Error message

property 'release' not found

What it means

Thrown when strategy 'releaseProperty' is requested but the maven-metadata.xml lacks a <release> element under <versioning>, leaving data.metadata.versioning.release undefined. The library flags the upstream response as invalid because the requested field is mandatory for this strategy.

Source

Thrown at services/maven-metadata/maven-metadata.service.js:100

  static applyFilter({ versions, filter }) {
    if (!filter) {
      return versions
    }
    return matcher(versions, filter)
  }

  static getLatestVersion({ data, strategy, filter }) {
    if (strategy === 'latestProperty') {
      if (data.metadata.versioning.latest === undefined) {
        throw new InvalidResponse({
          prettyMessage: "property 'latest' not found",
        })
      }
      return data.metadata.versioning.latest
    } else if (strategy === 'releaseProperty') {
      if (data.metadata.versioning.release === undefined) {
        throw new InvalidResponse({
          prettyMessage: "property 'release' not found",
        })
      }
      return data.metadata.versioning.release
    } else if (strategy === 'highestVersion') {
      if (
        data.metadata.versioning.versions?.version === undefined ||
        data.metadata.versioning.versions?.version?.length === 0
      ) {
        throw new InvalidResponse({
          prettyMessage: 'no versions found',
        })
      }
      const versions = this.applyFilter({
        versions: data.metadata.versioning.versions.version,
        filter,
      })
      if (versions.length === 0) {

View on GitHub (pinned to 766fd8bc89)

Solutions

  1. Use strategy 'highestVersion' instead — it computes the latest from the versions list and works without <release>.
  2. Check the maven-metadata.xml content to confirm whether <release> exists before choosing the strategy.
  3. Republish the artifact or correct the repository manager config so metadata includes <release>.
  4. Catch the error and retry with a fallback strategy.

Example fix

// before
const v = await service.getLatestVersion({ data, strategy: 'releaseProperty', filter })
// after
const v = data.metadata.versioning.release !== undefined
  ? await service.getLatestVersion({ data, strategy: 'releaseProperty', filter })
  : await service.getLatestVersion({ data, strategy: 'highestVersion', filter })
Defensive patterns

Strategy: validation

Validate before calling

if (data?.metadata?.versioning?.release === undefined) {
  return service.getLatestVersion({ data, strategy: 'highestVersion' })
}

Type guard

function hasRelease(data) {
  return data?.metadata?.versioning?.release !== undefined
}

Try / catch

try {
  return await service.getLatestVersion({ data, strategy: 'releaseProperty' })
} catch (err) {
  if (err && err.prettyMessage === "property 'release' not found") {
    return service.getLatestVersion({ data, strategy: 'highestVersion' })
  }
  throw err
}

Prevention

When it happens

Trigger: Calling getLatestVersion/handle with strategy='releaseProperty' against metadata that contains only a <versions> list or only <latest>, e.g. repos hosting only snapshots or metadata generated without <release>.

Common situations: Artifacts published by tools that omit <release> (only versions list), repositories with exclusively SNAPSHOT builds, or stale/partial metadata on mirror servers.

Related errors


AI-assisted analysis of badges/shields@766fd8bc89 (2026-08-30). Data as JSON: /api/errors/9c065e41ba176386. Report an issue: GitHub.