badges/shields · error · InvalidResponse

property 'latest' not found

Error message

property 'latest' not found

What it means

Thrown when strategy 'latestProperty' is requested but the parsed maven-metadata.xml has no <latest> element under <versioning>, so data.metadata.versioning.latest is undefined. The library treats a missing required field in the upstream XML as an InvalidResponse rather than silently returning undefined.

Source

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

  async fetch({ metadataUrl }) {
    return this._requestXml({
      schema,
      url: metadataUrl,
      parserOptions: { parseTagValue: false },
    })
  }

  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',

View on GitHub (pinned to 766fd8bc89)

Solutions

  1. Switch strategy to 'releaseProperty' if the metadata has <release>, or 'highestVersion' which derives the version from the versions list.
  2. Inspect the raw maven-metadata.xml for the artifact and confirm which versioning fields it actually contains.
  3. Regenerate/republish the artifact so its maven-metadata.xml includes <latest>, or fix the repository manager (e.g. Nexus/Artifactory) metadata.
  4. Wrap the call in a try/catch and fall back to the highestVersion strategy when this error occurs.

Example fix

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

Strategy: validation

Validate before calling

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

Type guard

function hasLatest(data) {
  return data?.metadata?.versioning?.latest !== undefined
}

Try / catch

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

Prevention

When it happens

Trigger: Calling handle/getLatestVersion with strategy='latestProperty' on metadata from a repository that omits the <latest> tag — common in modern maven-metadata.xml files generated by newer build tools where only <release> or <versions> is present.

Common situations: Publishing with Gradle or maven-publish plugins that no longer emit <latest>, pointing at artifact metadata for snapshot-free release-only repos, or third-party/mirror repositories with incomplete metadata.

Related errors


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