scribe + twitter>无法从null对象获取String

时间:2014-01-28 22:04:54

标签: scribe

我尝试使用scribe与facebook和twitter进行授权。 Facebook没有问题。但是当我尝试

requestToken = service.getRequestToken()

对于twitter我得到了

无法从空对象获取String

> ru.myx.ae3.exec.ExecErrorDefault
    > Cannot get String from a null object
    > java.lang.IllegalArgumentException
      : org.scribe.utils.Preconditions.check(Preconditions.java:84)
      : org.scribe.utils.Preconditions.checkNotNull(Preconditions.java:31)
      : org.scribe.utils.StreamUtils.getStreamContents(StreamUtils.java:22)
      : org.scribe.model.Response.parseBodyContents(Response.java:43)
      : org.scribe.model.Response.getBody(Response.java:69)
      : org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:60)
      : org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:40)
      : org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:45)
      : sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      : sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      : sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      : java.lang.reflect.Method.invoke(Method.java:606)

有人可以帮我解决吗?

2 个答案:

答案 0 :(得分:4)

幸运的是,Scribe具有SSL支持,您只需要在构建器内部使用正确的TwitterAPI类(用于SSL连接的类:

final OAuthService service = new ServiceBuilder()
.provider(**TwitterApi.SSL.class**)
.apiKey(...)
.apiSecret(...)
.callback(...)
.build();

像魅力一样为我工作:)

答案 1 :(得分:0)

我也遇到过这个问题......

我做的是我创建了一个像bellow一样的自定义TwitterApi。出于某种原因,twitter oauth停止支持http并且仅支持ssl。见下文。

import org.scribe.builder.api.DefaultApi10a;
import org.scribe.model.Token;


public class CustomTwitterApi extends DefaultApi10a {

private static final String AUTHORIZATION_URL = "https://api.twitter.com/oauth/authorize?oauth_token=%s";

public String getRequestTokenEndpoint() {
    return "https://api.twitter.com/oauth/request_token";
}

public String getAccessTokenEndpoint() {
    return "https://api.twitter.com/oauth/access_token";
}

public String getAuthorizationUrl(Token requestToken) {
    return String.format(AUTHORIZATION_URL, requestToken.getToken());
}
}