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
- Use strategy 'highestVersion' instead — it computes the latest from the versions list and works without <release>.
- Check the maven-metadata.xml content to confirm whether <release> exists before choosing the strategy.
- Republish the artifact or correct the repository manager config so metadata includes <release>.
- 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
- Verify the metadata XML contains <release> before selecting 'releaseProperty'.
- Default to 'highestVersion' for snapshot-only or tools-generated repositories.
- Optional-chain check data.metadata.versioning.release before the call.
- Implement strategy fallback instead of hardcoding releaseProperty.
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
- property 'latest' not found
- no versions found
- license not found
- invalid json response
- Field `message` is required
AI-assisted analysis of badges/shields@766fd8bc89 (2026-08-30).
Data as JSON: /api/errors/9c065e41ba176386.
Report an issue: GitHub.