alibaba/nacos · warning · NacosApiException
PARAMETER_MISSING
PARAMETER_MISSING
Error message
Skill name is required
What it means
Thrown by SkillQueryForm.validate() when the skill 'name' field is blank. The skill client-runtime query API requires a non-empty skill name to look up; unlike namespaceId (which defaults to 'public'), name has no default and cannot be omitted. It surfaces as a PARAMETER_MISSING detail code wrapped in a NacosApiException with the INVALID_PARAM top-level code.
Source
Thrown at ai/src/main/java/com/alibaba/nacos/ai/form/skills/client/SkillQueryForm.java:54
private String label;
/**
* Optional content MD5 carried by skill listener. When provided and matches the published
* content MD5, the server returns NOT_MODIFIED so the client may keep its local cache.
*/
private String md5;
/**
* Validate and normalize query parameters.
*
* @throws NacosApiException if required parameters are missing
*/
public void validate() throws NacosApiException {
if (StringUtils.isBlank(namespaceId)) {
namespaceId = "public";
}
if (StringUtils.isBlank(name)) {
throw new NacosApiException(NacosApiException.INVALID_PARAM,
ErrorCode.PARAMETER_MISSING,
"Skill name is required");
}
}
public String getNamespaceId() {
return namespaceId;
}
public void setNamespaceId(String namespaceId) {
this.namespaceId = namespaceId;
}
public String getName() {
return name;
}
public void setName(String name) {View on GitHub (pinned to 9b989acdf1)
Solutions
- Supply a non-empty 'name' parameter on the skill query request (the published skill identifier).
- If building SkillQueryForm in Java, call form.setName(skillName) and guard with StringUtils.isBlank before invoking the API.
- Validate the name client-side before issuing the HTTP call so the user gets an immediate message instead of a server round-trip.
Example fix
// before
SkillQueryForm form = new SkillQueryForm();
form.setNamespaceId("public");
// name never set -> server returns PARAMETER_MISSING
skillService.querySkill(form);
// after
SkillQueryForm form = new SkillQueryForm();
form.setNamespaceId("public");
form.setName("my-skill"); // required
skillService.querySkill(form); Defensive patterns
Strategy: validation
Validate before calling
if (StringUtils.isBlank(form.getName())) {
throw new IllegalArgumentException("Skill 'name' is required before querying.");
}
form.validate(); Prevention
- Always set SkillQueryForm.name from a non-optional input source.
- Run form.validate() in a unit test for every request-building code path.
- Treat namespaceId as optional (defaults to 'public') but name as mandatory in client code.
When it happens
Trigger: Calling the skill query/get HTTP endpoint (the client-runtime skill fetch backed by SkillQueryForm) without supplying the 'name' request parameter, or supplying it as an empty/whitespace string. Any caller that builds a SkillQueryForm programmatically and forgets setName(...).
Common situations: A frontend or SDK consumer that constructs the query from optional form fields and submits before the user picks a skill name; copy-paste of a query URL with the name parameter stripped; a listener re-query path that loses the name after a config reload.
Related errors
AI-assisted analysis of alibaba/nacos@9b989acdf1 (2026-08-14).
Data as JSON: /api/errors/f1559f3e27816a96.
Report an issue: GitHub.