2014-12-17 6 views
7

मैं बहुत कम विस्तार के साथ एक NullPointerException प्राप्त जब मैं अपने GoogleCredential पर setServiceAccountUser(ACCOUNT_TO_IMPERSONATE) करने का प्रयास, एक Google कार्य सेवा वस्तु का निर्माण और बाद में के लिए एक अनुरोध भेजने का प्रयास के लिए setServiceAccountUser() है ACCOUNT_TO_IMPERSONATE से कार्य की एक सूची।NullPointerException के बाद ही मैं GoogleCredential वस्तु (Grails/जावा)

def credential = new GoogleCredential.Builder() 
    .setTransport(HTTP_TRANSPORT) 
    .setJsonFactory(JSON_FACTORY) 
    .setServiceAccountId(SERVICE_ACCOUNT_ID) 
    .setServiceAccountPrivateKeyFromP12File(P12_FILE) 
    .setServiceAccountScopes(GOOGLE_TASK_SCOPES) 
    .setServiceAccountUser(ACCOUNT_TO_IMPERSONATE) 
    .build() 

    credential.refreshToken() 
    log.debug("Google Credential Impersonating: ${credential.getServiceAccountUser()}") 

    def service = new com.google.api.services.tasks.Tasks.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).build() 

    return service 

कृपया ध्यान दें कि credential.getServiceAccountUser() उम्मीद ACCOUNT_TO_IMPERSONATE बाहर लॉग करता है।

ने वही समस्या https://github.com/googleads/googleads-java-lib/issues/19

StackTrace : 
Caused by: java.lang.NullPointerException at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191) 
at com.google.api.client.util.Preconditions.checkNotNull(Preconditions.java:127) 
at com.google.api.client.json.jackson2.JacksonFactory.createJsonParser(JacksonFactory.java:96) 
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:85) 
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81) 
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:88) 
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) 
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) 
at com.google.api.client.auth.oauth2.Credential.executeRefreshToken(Credential.java:570) 
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:247) 
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) 
at com.google.api.ads.common.lib.auth.OAuth2Helper.callRefreshToken(OAuth2Helper.java:70) 
at com.google.api.ads.common.lib.auth.OfflineCredentials.generateCredential(OfflineCredentials.java:144) 
... 

में रिपोर्ट की गई त्रुटि में विस्तार की कमी Google कार्य के पुराने संस्करणों में एक मुद्दा होने के लिए कहा गया था नहीं था, लेकिन मैं नवीनतम संस्करण में अपग्रेड कर दिया है और कोई अंतर नहीं दिखाई ।

compile "com.google.api-client:google-api-client:1.19.0" 
compile 'com.google.apis:google-api-services-tasks:v1-rev41-1.19.0' 

संपादित करें: हमारी वेब आवेदन में grails कंसोल में कोड को संवारता बाद मैं देख सकता हूँ कि क्रियान्वित credential.refreshToken() एनपीई का कारण बनता है जब ServiceAccountUser निर्धारित है।

जब मैं ServiceAccountUser, refreshToken() को अनसेट करता हूं तो सफल होता है। इसके अतिरिक्त, Google कार्य की एक सूची पुनर्प्राप्त करने का प्रयास सेवा खाते के लिए सफल है जब ServiceAccountUser सेट नहीं है।

किसी भी मदद की सराहना की जाएगी।

+0

क्या आपने देखा इस? http://stackoverflow.com/questions/12479551/google-drive-oauth-cant-figure-out-how-to-get-re-usable-googlecredentials – user1807337

उत्तर

2

मुझे उस व्यवहार के कारण का पता चला जो हम अनुभव कर रहे थे, लेकिन आपके सुझावों के लिए धन्यवाद, कम-से-कम, उपयोगकर्ता 1807337 & श्रीनिवासन।

हमें अपने आवेदन के उपयोगकर्ताओं को हमारे आवेदन के लिए डोमेन-व्यापी प्राधिकरण को प्रतिनिधि करने की आवश्यकता है। यह organisataion के गूगल द्वारा किया जा सकता व्यवस्थापक एप्लिकेशन, उपधारा हकदार सेवा खाते

https://developers.google.com/accounts/docs/OAuth2ServiceAccount

यहाँ करने के लिए डोमेन-व्यापी अधिकार सौंपना में निर्देशों का पालन समान संसाधन में दिए गए स्पष्टीकरण है: "यदि आपने सेवा खाते में डोमेन-व्यापी पहुंच का प्रतिनिधि दिया है और आप किसी उपयोगकर्ता खाते का प्रतिरूपण करना चाहते हैं, तो GoogleCredential कारखाने की setServiceAccountUser विधि के साथ उपयोगकर्ता खाते का ईमेल पता निर्दिष्ट करें ..."

0

इस

'com.google.api.client.googleapis.auth.oauth2.GoogleCredential.Builder credential_origine_builder = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId("[[]]") 
       .setServiceAccountScopes(GOOGLE_TASK_SCOPES) 
       .setServiceAccountPrivateKeyFromP12File(new File("cfg/file.p12")); 

credential_origine_builder.setServiceAccountUser ("[email protected]") की कोशिश करो; '

+1

हम अपने सेवा खाता प्रमाण-पत्रों का उपयोग करके प्रमाणित करने में सक्षम हैं, समस्या यह है कि हम अपने डोमेन से संबंधित किसी अन्य उपयोगकर्ता का प्रतिरूपण करने में असमर्थ हैं। – rcgeorge23

संबंधित मुद्दे