使用java gdata sdk时未知的授权标头

时间:2012-08-22 08:59:38

标签: google-docs-api google-drive-api

最近,我们在回归测试中遇到了大约30%的API调用失败,这是由“未知授权标头”异常引起的。 我们从gdata java sdk获得以下异常:

Caused By AuthenticationException:

com.google.gdata.util.AuthenticationException: Unknown authorization header
<HTML>
<HEAD>
<TITLE>Unknown authorization header</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unknown authorization header</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:600)
at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563)
at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552)
at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530)
at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535)
at com.google.gdata.client.Service.getFeed(Service.java:1135)
at com.google.gdata.client.Service.getFeed(Service.java:998)
at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:631)
at com.google.gdata.client.Service.getFeed(Service.java:1017)

我们正在使用gdata api运行我们的回归测试,每个测试用例使用20多个JVM。 这个错误是新的。它的出现没有改变我们的实现,也没有重大的负载变化。 但是,随着我们更改并发JVM的数量,错误率会相应更改,因为我们将JVM的数量减少到几个,因此错误率降低到大约10%。

我们非常感谢有关错误原因和可能修复的任何帮助。

由于 阿萨弗

1 个答案:

答案 0 :(得分:0)

    private DocsService getDocsService(boolean withHeader) {

    DocsService docsService = new DocsService(APP_NAME);

    try {

        docsService.setOAuthCredentials(getAuthParameters(),
                new OAuthHmacSha1Signer());

        if (withHeader) {
            docsService.getRequestFactory().setHeader("If-Match", "*");
        }

        return docsService;

    } catch (OAuthException oAuthException) {

        throw new TestFlowException(
                "Failed to set Google Drive Oauth Credentials",
                oAuthException);
    }

}

private GoogleOAuthParameters getAuthParameters() {

    GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();

    oauthParameters.setOAuthConsumerKey(GOOGLE_DRIVE_KEY.getKey());
    oauthParameters.setOAuthConsumerSecret(GOOGLE_DRIVE_KEY.getSecret());
    oauthParameters.setOAuthToken(ACCESS_CREDENTIALS.getKey());
    oauthParameters.setOAuthTokenSecret(ACCESS_CREDENTIALS.getPassword());

    return oauthParameters;
}