androidamazon-web-servicesexceptionamazon-simpledb

How to catch Amazon AWS errors Android


I am constantly getting error reports (from users) such as:

Caused by: Status Code: 400, AWS Service: AmazonSimpleDB, AWS Request ID: c5cb109d-bbff-fcea-bc0d-0cb60ff8f6af, AWS Error Code: RequestExpired, AWS Error Message: Request has expired. Timestamp date is 2012-06-06T13:19:59.415Z. Current date is 2012-06-06T14:20:03Z

Apparently this is because the user has the wrong timezone or something set? Regardless, I would like to catch this particular error and post a message to the user asking them to check their timezone settings however I can't find a way to do it. If I catch AmazonServiceException, the error shows up as null.

How can I catch errors based on Status Code or even Error Code? The current code that I tried looks like this:

try {
        dostuff()
    } catch (IOException e) {
        updateAWS("DownloadErrors");
        return "filenotfound";
    } catch (AmazonServiceException e) {
        return "downloadfail";
    }

However AmazonServiceException e is always null so I can't pull any information from it.

other code:

private void doStuff() throws IOException, AmazonServiceException{ 
//code here
}

Solution

  • Apparently this is what I needed. SDb tracks "RequestExpired" and S3 uses "RequestTimeTooSkewed"

    Also, this appears to be occurring because the system time is >15 minutes different than the AWS server. I put a note to the user to check their time and use "Automatic" date/time if possible. Tested it myself and reproduced the error as well as the solution.

    try {
            result = doOperations();
        } catch (AmazonServiceException e) {
            if (e.getErrorCode().equals("RequestExpired") || e.getErrorCode().equals("RequestTimeTooSkewed")) {
                result = "timestamp";
            }
            }
        return result;
    }