{"record":{"id":"6ee5454910cc789f","repo":"alibaba/nacos","slug":"restresult-getcode","errorCode":"{restResult.getCode()}","errorMessage":"{restResult.getMessage()}","messagePattern":"\\{restResult\\.getMessage\\(\\)\\}","errorType":"exception","errorClass":"NacosException","httpStatus":null,"severity":"error","filePath":"client/src/main/java/com/alibaba/nacos/client/ai/remote/AiHttpClientProxy.java","lineNumber":709,"sourceCode":"        Header header = Header.newInstance();\n        header.addAll(securityHeaders);\n        \n        String url = buildUrl(server, api);\n        \n        try {\n            HttpRestResult<byte[]> restResult = nacosRestTemplate.get(url, header,\n                Query.newInstance().initParams(params), byte[].class);\n            \n            if (restResult.ok()) {\n                return restResult.getData();\n            }\n            if (HttpURLConnection.HTTP_NOT_MODIFIED == restResult.getCode()) {\n                throw new NacosException(NacosException.NOT_MODIFIED, \"not modified\");\n            }\n            if (HttpURLConnection.HTTP_FORBIDDEN == restResult.getCode()) {\n                securityProxy.reLogin();\n            }\n            throw new NacosException(restResult.getCode(), restResult.getMessage());\n        } catch (NacosException e) {\n            throw e;\n        } catch (Exception e) {\n            LOGGER.error(\"[AI-HTTP] Failed to request {}\", url, e);\n            throw new NacosException(NacosException.SERVER_ERROR, e);\n        }\n    }\n    \n    /**\n     * Variant of {@link #callServerBytes} that exposes the raw {@link HttpRestResult} so callers\n     * can inspect response headers (e.g. {@code X-Nacos-Skill-Md5}). Status code translation rules\n     * mirror {@link #callServerBytes}: 304 raises {@link NacosException#NOT_MODIFIED}, 403\n     * triggers a security re-login before bubbling the original status code up.\n     */\n    private HttpRestResult<byte[]> callServerBytesWithHeader(String api,\n        Map<String, String> params, String server, RequestResource resource)\n        throws NacosException {\n        Map<String, String> securityHeaders = securityProxy.getIdentityContext(resource);","sourceCodeStart":691,"sourceCodeEnd":727,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/client/src/main/java/com/alibaba/nacos/client/ai/remote/AiHttpClientProxy.java#L691-L727","documentation":"Thrown by callServerBytes() when the server returns a non-OK, non-304, non-403 HTTP status code. The HTTP status code becomes the NacosException error code, and the server's response message becomes the error message. This is a catch-all for unexpected HTTP responses during byte[] API calls (e.g., 404 Not Found, 500 Internal Server Error, 502 Bad Gateway).","triggerScenarios":"The nacosRestTemplate.get() call succeeded at the HTTP transport level but returned a status code outside the handled set (200, 304, 403). The skill artifact or resource does not exist (404), the server hit an internal error (500), or a gateway/proxy returned an error (502, 503).","commonSituations":"404: skill/agentSpec name does not exist or has not been published. 500: server-side exception (storage failure, NPE). 502/503: reverse proxy or load balancer in front of Nacos is misconfigured or the backend is down. 400: malformed request parameters.","solutions":["Check getErrCode() to determine the HTTP status: 404 = resource not found, 500 = server error, 503 = overloaded.","For 404: verify the resource name, version, and namespace are correct and that the resource has been published.","For 500/502/503: check Nacos server logs for stack traces, verify server health.","For 400: validate request parameters (skillName, version, label)."],"exampleFix":"try {\n    byte[] zip = aiService.downloadSkill(\"my-skill\", \"1.0\", null);\n} catch (NacosException e) {\n    switch (e.getErrCode()) {\n        case NacosException.NOT_FOUND:\n            log.warn(\"Skill 'my-skill' not found on server\");\n            break;\n        case NacosException.SERVER_ERROR:\n            log.error(\"Server error downloading skill: {}\", e.getErrMsg());\n            break;\n        default:\n            log.error(\"HTTP {} downloading skill: {}\", e.getErrCode(), e.getErrMsg());\n    }\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    byte[] zip = aiService.downloadSkill(name, ver, label);\n} catch (NacosException e) {\n    switch (e.getErrCode()) {\n        case NacosException.NOT_FOUND:\n            log.warn(\"Skill not found: {}\", name);\n            break;\n        case NacosException.SERVER_ERROR:\n            log.error(\"Server error: {}\", e.getErrMsg());\n            break;\n        case NacosException.NO_RIGHT:\n            log.error(\"Access denied\");\n            break;\n        default:\n            log.error(\"HTTP {}: {}\", e.getErrCode(), e.getErrMsg());\n    }\n}","preventionTips":["Branch on getErrCode() to distinguish 404, 500, 403, etc.","Verify resource existence before downloading.","Check server logs for 500 errors to find root causes."],"tags":["nacos","ai-client","http","server-error","skill-download"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}