在Play Framework中使用fbconnect模块获取NPE

时间:2011-02-02 21:18:34

标签: java facebook playframework

尝试使用Play FBConnect模块时,我收到以下NullPointerException:

Caused by: java.lang.NullPointerException
        at tags.fbconnect.FBConnectTags._button(FBConnectTags.java:26)
        at tags.fbconnect.FBConnectTags$_button.call(Unknown Source)
        at /app/views/main.html.(line:17)
        at play.templates.GroovyTemplate.render(GroovyTemplate.java:203)

这似乎是它出现的地方:https://github.com/rbamba/play-fbconnect/blob/master/app/tags/fbconnect/FBConnectTags.java#L26

不幸的是,我对Play模块不太熟悉,无法自行调试。

编辑:为了回应评论,我认为fbconnect模块已正确配置,因为这是在日志的前面报告的:

13:12:13,225 INFO  ~ Module fbconnect is available (/home/****/play-1.1.1/modules/fbconnect-0.3)

edit2:我实际上已经让它在我的本地机器上超过这一点,但仍然在我的生产服务器上获得这个NPE。

2 个答案:

答案 0 :(得分:0)

我看不出插件代码有什么特别的错误。为了解释一下发生了什么,

// the line of code with the error
String url = Play.plugin(FBConnectPlugin.class).session().getLoginUrl(scope);

让我们稍微打破一下

Play.plugin(FBConnectPlugin.class)

此行要求Play从Play中配置的插件列表中返回已初始化的插件。如果未设置插件,则返回null。这是导致错误的最可能原因。

.session()

这只是从FBConnectPlugin获取会话对象,这是一个静态创建的对象,因此不会为null。

.getLoginUrl(scope);

这会构建URL。不调用此方法,否则您将在堆栈跟踪中看到它。

因此,问题是您没有正确配置插件。再次检查文档以确定它有问题的原因。或者,您可能想要查看FbGraph模块。我几天前安装了这个,并且已经启动并运行了一个Facebook应用程序。它非常简单,文档非常好。

答案有点啰嗦,但正如你所说,你不明白模块是如何工作的,我认为值得解释。

答案 1 :(得分:0)

我和Regis Bamba谈过,他是从事fb-connect工作的程序员之一。

我最终决定使用fbgraph模块,我可能会建议任何想使用fb-connect的人,因为它更强大,似乎更好地维护。即使瑞吉斯建议使用它: - )

无论如何,Regis建议摆脱“java.net.URISyntaxException”:

解决方法是在编码整个字符串之前手动将其替换为编码值。

FBConnectSession.java中的getAuthUrl()函数应为:

public String getAuthUrl(String authCode){
  return "https://graph.facebook.com/oauth/access_token?client_id=" +
     WS.encode(id)+"&redirect_uri=" +
     WS.encode(Router.getFullUrl("FBConnect.callback")) +  
     "&client_secret="+WS.encode(secret)+"&code="+WS.encode(authCode.replace("|","%7C"));
}