Comment #1 on issue 866 by
omer.daw...@gmail.com: Storage API request from
setting HttpRequestInitializer to attach an UnsuccessfulResponseHandler
which reattaches the oauth token to the redirect url seems to get around
the issue
this.storage = new Storage.Builder(getHttpTransport(), JSON_FACTORY, new
HttpRequestInitializer() {
public void initialize(HttpRequest request) {
request.setUnsuccessfulResponseHandler(new RedirectHandler());
}
})
.setApplicationName(Constants.APP_NAME).build();
public class RedirectHandler implements HttpUnsuccessfulResponseHandler {
private static final String OAUTH_TOKEN_PARAM = "?oauth_token=";
/*
* (non-Javadoc)
* @see
com.google.api.client.http.HttpUnsuccessfulResponseHandler#handleResponse(
* com.google.api.client.http.HttpRequest,
com.google.api.client.http.HttpResponse, boolean)
*/
public boolean handleResponse(
HttpRequest request, HttpResponse response, boolean retrySupported)
throws IOException {
if (response.getStatusCode() ==
HttpStatusCodes.STATUS_CODE_TEMPORARY_REDIRECT) {
String redirectLocation = response.getHeaders().getLocation();
if (request.getFollowRedirects() && redirectLocation != null) {
String url = request.getUrl().toString();
String oauthToken = StringUtils.substringAfterLast(url,
OAUTH_TOKEN_PARAM);
// resolve the redirect location relative to the current location
// re-append the oauth token request parameter
request.setUrl(new GenericUrl(request.getUrl().toURL(redirectLocation +
OAUTH_TOKEN_PARAM + oauthToken)));
return true;
}
}
return false;