Adwords 库中的枚举成员为空

Posted

技术标签:

【中文标题】Adwords 库中的枚举成员为空【英文标题】:Enum member null in Adwords library 【发布时间】:2019-03-08 12:10:17 【问题描述】:

我正在使用 Google Adwords 库。要创建凭证,提供了构建器模式:

new OfflineCredentials.Builder()
                      .forApi(OfflineCredentials.Api.ADWORDS)
                      .fromFile("D:\...\ads.properties")
                      .build()

此调用在我的应用程序中引发空指针异常,特别是 .forApi() 方法的参数为空。该对象是枚举成员defined thus:

 public static enum Api implements OAuthConfig 
  ADWORDS("api.adwords.", "https://www.googleapis.com/auth/adwords"),
  AD_MANAGER("api.admanager.", "https://www.googleapis.com/auth/dfp");

  private final String propKeyPrefix;
  private final String scope;

  private Api(String propKeyPrefix, String scope) 
    this.propKeyPrefix =
        Preconditions.checkNotNull(propKeyPrefix, "Null property key prefix for: %s", this);
    this.scope = Preconditions.checkNotNull(scope, "Null scope for: %s", this);
  

现在,枚举成员怎么可能是空的?我该怎么办?

这是类加载的问题吗?如果有帮助,它就是一个 Spring Boot 应用程序。

【问题讨论】:

明确一点:您是说 Api.ADWORDS 为空?因此,当它尝试调用 oAuthConfig.getInternals() 时,您会在 ForApiBuilder.defaultOptionals 中获得 NPE 吗?错误不是 getInternals() 返回 null 并且下一次调用失败吗? (虽然我也不确定这会如何发生) 是的。在调试器中评估 Api.ADWORDS 会导致 null。调用 .forApi(Api.ADWORDS) 会引发 NPE。对.getInternals() 的调用确实是第一次尝试访问ADWORDS 的成员。 【参考方案1】:

找到了。由于版本冲突,Preconditions.checkNotNull 抛出了 NoSuchMethodError。这会阻止枚举成员被正确初始化,从而保持为空并依次导致 NPE。

TIL:当枚举成员为 null 时,其构造函数中确实存在错误。

【讨论】:

以上是关于Adwords 库中的枚举成员为空的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法访问 Google App Scripts 中的 Adwords?

Adwords API C#:将 web.config 与类库一起使用

adwords 脚本中的 sheet.appendrow 附加了太多行

谷歌标签管理器中的adwords转换代码

大查询中的Google AdWords转帐:可以更改表格架构吗?

到 Big Query Data Transfer Service 的 Adwords 报告的值与 Adwords Manager 不同