全部产品
云市场

错误处理

更新时间:2018-03-07 12:54:01

SDK 可能出现的异常错误可以分成如下几类:

  • 由服务端返回的错误。这类错误由服务端返回并由 SDK 处理。关于这类错误的详细细节可以参考服务 API 的 通用错误码 和各个 API 接口的具体说明。
  • 由 SDK 在向服务端发出请求时出现的网络错误。这类错误包括网络连接不通,服务端返回超时等。
  • 由 SDK 自身产生的、与平台及语言相关的错误,如内存溢出等。

目前,各个语言 SDK 的实现都采取抛出异常的方式处理错误。具体原则如下:

  • 由如上第一或者第二类错误将会被 SDK 处理并包装在统一的 ClientException 类抛出给用户处理。
  • 由如上第三类错误不会被 SDK 处理,而是直接抛出平台及语言的 Native Exception 类给用户处理。

Exception:

Exception 是 SDK 定义的、用于处理服务自身逻辑错误的异常,提供如下异常信息:

错误代码(Error Code):标示错误类型。如果是来自服务端的返回错误,则这个错误代码 API 返回的错误代码一致。如果是 SDK 网络请求错误,则其错误代码为 “RequestError”。具体请参考各个语言的完整 API 参考。错误消息(Error Message):标示错误消息。如果是来自服务端的响应错误,则这个错误消息 API 返回的错误消息一致。如果是 SDK 网络请求错误,则其错误消息为“request is failed.”。具体请参考各个语言的完整 API 参考。错误请求 ID(Request Id):标示当前错误对应于服务端的请求 ID。该 ID 只有在服务端返回错误消息时有效,否则为空字符串。用户可以在遇到错误请求时记下该请求 ID 并提供给服务团队进行问题追踪和定位。

请求失败与重试:

在使用 SDK 访问服务端时,有可能会因为网络临时中断、传输延时过程、服务端处理过慢等一系列原因导致请求失败。目前,这类错误都直接以异常抛出,服务内部并未对此做任何重试逻辑。所以,您在使用 SDK 时需要自己定义相应的处理逻辑(重试请求或者直接报错等)。

Java

  1. public void testAll() throws ClientException {
  2. String projectName = "myproject1";
  3. //create project
  4. PutProjectRequest putProjectRequest = new PutProjectRequest();
  5. putProjectRequest.setProject(projectName);
  6. putProjectRequest.setServiceRole("test");
  7. String enginesStr = "[{\"Name\":\"CONVERT_OFFICE_FORMAT\",\"JobTtl\":100000},{\"Name\":\"PHOTO_PROCESS\",\"JobTtl\":100000}]";
  8. putProjectRequest.setEngines(enginesStr);
  9. String indexerStr = "[{\"Name\":\"FACE_GROUP\",\"Status\":\"Enable\"},{\"Name\":\"TAG\",\"Status\":\"Enable\"}]";
  10. putProjectRequest.setIndexers(indexerStr);
  11. PutProjectResponse putProjectResponse = client.getResponse(putProjectRequest);
  12. assertEquals(projectName, putProjectResponse.getProject());
  13. //get Project
  14. GetProjectRequest getProjectRequest = new GetProjectRequest();
  15. getProjectRequest.setProject(projectName);
  16. GetProjectResponse getProjectResponse = client.getResponse(getProjectRequest);
  17. assertEquals(projectName, getProjectResponse.getProject());
  18. try {
  19. client.getResponse(getProjectRequest);
  20. } catch (ClientException e) {
  21. assertEquals("InvalidProject.NotFound", e.getErrCode());
  22. }
  23. }