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

  1. Supply a non-empty 'name' parameter on the skill query request (the published skill identifier).
  2. If building SkillQueryForm in Java, call form.setName(skillName) and guard with StringUtils.isBlank before invoking the API.
  3. 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

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.