【问题标题】:Google api: cast credentialBuilder to httprequestInitializerGoogle api:将 credentialBuilder 转换为 httprequestInitializer
【发布时间】:2016-10-20 11:32:55
【问题描述】:

我正在尝试访问谷歌分析数据,但在我的 credentialBuilder 上不断收到 ClassCastException。这是我的代码:

(defn credential
  []
  (doto (GoogleCredential$Builder.)
    (.setTransport http-transport)
    (.setJsonFactory json-factory)
    (.setServiceAccountId "X")
    (.setServiceAccountPrivateKeyFromP12File (File. "X"))
    (.setServiceAccountScopes (AnalyticsReportingScopes/ANALYTICS_READONLY))
    (.build)))

(defn analytics
  []
  (doto (AnalyticsReporting$Builder. http-transport json-factory (credential))
    (.setApplicationName "X")
    (.build)))

我不断得到的确切错误是:

com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder 无法转换为 com.google.api.client.http.HttpRequestInitializer

我尝试遵循Hello Analytics Reporting API V4: Java quickstart for service accounts 的例子,我做错了什么?

【问题讨论】:

    标签: java clojure google-api google-analytics-api


    【解决方案1】:

    doto 返回作为其第一个参数传递的对象 - 在您的情况下,它将返回 GoogleCredential$Builder 的实例并忽略 (.build) 调用的结果。您需要更改它以将调用结果返回给(.build)

    (defn credential
      []
      (->
        (doto (GoogleCredential$Builder.)
          (.setTransport http-transport)
          (.setJsonFactory json-factory)
          (.setServiceAccountId "X")
          (.setServiceAccountPrivateKeyFromP12File (File. "X"))
          (.setServiceAccountScopes (AnalyticsReportingScopes/ANALYTICS_READONLY)))
        (.build))
    

    doto 被宏扩展为如下形式:

    (doto (StringBuilder.)
      (.append "a")
      (.append "b"))
    

    变成

    (let [obj (StringBuilder.)]
      (.append obj "a")
      (.append obj "b")
      obj)
    

    【讨论】:

    • 谢谢!现在我明白为什么我会收到错误以及如何解决它:)
    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2019-07-04
    • 1970-01-01
    相关资源
    最近更新 更多