【问题标题】:Google Appengine: User.equals throws NullPointerExceptionGoogle Appengine:User.equals 抛出 NullPointerException
【发布时间】:2012-10-09 02:37:15
【问题描述】:

我有一个令人沮丧的问题,即我在 Google Appengine 上的应用会引发 NullPointerException,例如:

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

我的代码如下:

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

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

if (excludeUser.equals(null))

所以我猜是 User.equals 中的一些内部逻辑导致了问题,还是在将用户对象存储到数据存储区时出现了其他一些棘手的问题?

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

我使用的是 Google Accounts API,而不是联合登录。我都试过了。同样的结果。任何线索表示赞赏,谢谢。

【问题讨论】:

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


    【解决方案1】:

    检查您的someEntity 对象.. 它很可能是一个空对象,因此您会看到该错误。我建议单步执行您的代码并验证该对象是否不为空。

    【讨论】:

    • 对象不为空。首先可以从管理控制台中的数据存储查看器中查看。其次,我将该值显式更改为 null,并且没有这样的异常(这意味着 User.equals(null) 可以正常工作)。第三,它适用于开发环境...这个问题真的很混乱:(...
    • 最有可能的 excludeUser 为空。如果从数据存储中获取 excludeUser 对象,则生产数据存储中的数据可能与您的 dev_appserver 版本不同,从而导致其崩溃。
    • excludeUser 在这里不为空。空指针异常是从 User.equals() 方法本身内部引发的。所以调用者引用(excludeUser)不应该为空。
    • 我想起了一些可疑的事情......以前该应用程序工作正常,但我在管理控制台中将身份验证方法从 Google Accounts API 更改为联合登录,并重新部署了几次应用程序,然后出现此错误.. .也许有一些关系?不太确定...
    • UserService.getCurrentUser() 中的情况是特殊情况。不知道为什么它返回一个非空用户,有时在我的浏览器中包含以下内容:authDomain:google.com/accounts/o8/ud, email:, federatedId:google.com/accounts/o8/id?id=.....,nickname:, userId: Invoking .equals method on此类对象与其他普通用户对象会导致 NullPointerException。猜猜这是某种联合登录怪人?
    【解决方案2】:

    从 UserService.getUser() 开始,事情变成了特殊情况。不知道为什么它返回一个非空用户,内容如下:

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

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

    【讨论】:

      【解决方案3】:

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

      federatedIdentity.equals here 的调用应该被翻转。

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

      我已将此情况报告给 Google。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-11
        • 2013-09-07
        • 2013-06-18
        • 2016-07-07
        • 2014-10-02
        • 2012-05-21
        • 2014-08-15
        • 2013-08-06
        相关资源
        最近更新 更多