问题描述
在使用阿里云OSS移动端Android SDK请求OSS资源时,返回以下报错。
com.alibaba.sdk.android.oss.ClientException: No value for StatusCode
org.json.JSONException: No value for StatusCode
[ErrorMessage]: No value for StatusCode
org.json.JSONException: No value for StatusCode
问题原因
该报错是Android SDK对于JSON数据解析的错误,错误是在请求STS服务端时,STS服务端返回ststoken信息中参数问题导致发生报错。
解决方法
Android SDK请求OSS资源出现该报错的排查方法如下:
查看使用OSSAuthCredentialsProvider初始化方式直接访问鉴权应用服务器的代码,检查STS服务端地址是否正常。OSSAuthCredentialsProvider初始化方式请参见初始化。
说明STS_INFO_URL为STS服务端地址,authCredentialsProvider使用STS服务URL进行初始化。
查看SDK中OSSAuthCredentialsProvider类,对于STS服务端的请求的ststoken信息和处理方式,从而可以查看到对于请求STS服务端获取Token的JSON数据中需要有StatusCode字段,同时该值需要为200才能判定请求Token通过,否则返回“No value for StatusCode”错误。
由以上代码可知,使用OSSAuthCredentialsProvider方式的初始化,对于STS服务端返回的JSON数据是有要求的,如下为正确的JSON数据。
说明必须有字段StatusCode,且注意大小写区分。
{ "StatusCode":200, "AccessKeyId":"STS.NTH8eXffvqKXXXXXXCHMsu", "AccessKeySecret":"5rfu1899GJFJKXXXXXXXXXXXoGaTHX6V5BR4PZkNZ5x", "Expiration":"2021-08-10T06:57:05Z", "SecurityToken":"CAIS0w9XXXXXXXXXB2yfSjIr5f9c9/si7lXxomlNVWA00XXXXXXXXXlzz2IH1EfndpAOkfs/g/nmBU5/gSlqJ4T55XXXXXXzUco0/uc2T1fau5JkXXXXXXX9Umwyta2/SuH9S8ynQpXJQlvYlyh17KLnfDG5JTKMOoGIjpgVPrZyWRKjPwJbGPBcJAZptK1/MmDKZ9KsKQLSi3DMFygYvRFn20p17r6j59CY9hvGhUfm9/cRoI39WLbGCfNhJ5BiSdy48fVrf67aqk5q5gNN6b19gd4Gm3fOtcrPBEJKsVfUcbiY2OBEDyJFUY4TPoMD4N/Wt9BThtvrranZ6iYPH5kMDH6GGNz4mpWVSLrxZo9kT9uhZSSRiOLoH4LurgYpbUgcMA53YNc7Ihdyc0dxGmuEc/b+oQ2WMl3zF/nbgLtV3ZN+z1zu8saHPESf1CVTZ47E1fQagAE1EJun71o0MsRXEO6ZV5yra1zCnTlzwihYnH2NpGVngyDEI1niaqpA50Rch+r+6Ff3CWNzhn/tlzhI5tZjDaS4C6g8zvbc/zDWpxF6gq6QpwaLbDj7vEgbun6AuYy5PuXEZO6+j5Zzvxt333R73gPQN2oqRqaewdStQF3NrCKgYw==" }
使用以下两种方法进行解决。更多信息,请参见快速搭建移动应用直传服务。
修改您生成STS的接口代码,返回的JSON中,包含有StatusCode这个字段给Android SDK。
修改您Android SDK的代码,取消对StatusCode的获取,改成返回STS的接口JSON中的Key值。
文档内容是否对您有帮助?