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 附加了太多行
大查询中的Google AdWords转帐:可以更改表格架构吗?
到 Big Query Data Transfer Service 的 Adwords 报告的值与 Adwords Manager 不同