Google Appengine:User.equals抛出NullPointerException

时间:2012-10-09 02:37:16

标签: google-app-engine google-cloud-datastore

我有一个令人沮丧的问题,我在Google Appengine上的应用会抛出NullPointerException,如:

java.lang.NullPointerException
    at com.google.appengine.api.users.User.equals(User.java:143)

我的代码如下:

if (excludeUser.equals(someEntity.getProperty("user")))

实体中的用户属性是先前存储在数据存储区中的另一个User对象。即使我将代码更改为类似以下内容,它也不会引发异常:

if (excludeUser.equals(null))

所以我猜这是User.equals中的一些内部逻辑导致问题,或者将用户对象存储到数据存储区时的其他一些棘手的事情?

此外,逻辑在开发环境中运行良好。这个问题只发生在GAE上。

我使用的是Google帐户API,而不是联合登录。我试过了两个。同样的结果。感谢任何线索,谢谢。

3 个答案:

答案 0 :(得分:0)

检查你的someEntity对象..由于你看到了这个错误,它可能是一个空对象。我建议单步执行代码并验证该对象是否为空。

答案 1 :(得分:0)

事情结果​​是UserService.getUser()的特例。不知道为什么它返回一个非null用户,具有以下内容:

authDomain:https://www.google.com/accounts/o8/ud, 
email:, 
federatedId:https://www.google.com/accounts/o8/id?id=....., 
nickname:, 
userId:

使用其他普通User对象对此类对象调用.equals方法会导致NullPointerException。猜猜这是联邦登录怪人的某种?

答案 2 :(得分:0)

这是User.equals()中的错误。

应该翻转对federatedIdentity.equals here的来电。

该行应为return federatedIdentity.equals(user.federatedIdentity)

我已经向Google报告了此情况。