2016-10-20 6 views
1

Google Analyticsデータにアクセスしようとしていますが、CredentialBuilderでClassCastExceptionが引き続き発生しています。ここに私のコードは次のとおりです。Google api:httprequestInitializerにcredentialBuilderをキャスト

(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例に従うことをしようと、私が間違って何をやっていますか?

答えて

2

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) 
+0

おかげとなり!今私はなぜ私はエラーを取得する方法を理解し、それを修正する方法:) –

関連する問題