2016-10-27 20 views
5

मैं बस एक सेवा खाते का उपयोग एक JUnit परीक्षण में जीमेल से एक ईमेल भेजने के लिए कोशिश कर रहा हूँ में विफल रहा है।Gmail API सेवा देने के खाते में पूर्व शर्त प्रतिक्रिया

@Test 
public void testGmailCredential() throws GeneralSecurityException, URISyntaxException { 
    try { 
     InputStream is = getClass().getClassLoader().getResourceAsStream("myProject.json"); 
     GoogleCredential credential = GoogleCredential.fromStream(is).createScoped(GmailScopes.all()); 

     System.out.println("Scopes are " + credential.getServiceAccountScopesAsString()); 

     Gmail gmailService = new Gmail.Builder(getHttpTransport(), JSON_FACTORY, credential) 
        .setApplicationName("WHAT SHOULD THIS VALUE BE?") 
        //.setHttpRequestInitializer(credential) 
        .build(); 

     InternetAddress to = new InternetAddress("[email protected]", "Tom Catfish"); 
     InternetAddress from = new InternetAddress("[email protected]", "Some Name"); 

     Properties props = new Properties(); 
     Session session = Session.getDefaultInstance(props, null); 

     MimeMessage email = new MimeMessage(session); 

     email.setFrom(from); 
     email.addRecipient(javax.mail.Message.RecipientType.TO, to); 
     email.setSubject("Subject here"); 
     email.setText("body here"); 

     ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
     email.writeTo(buffer); 
     byte[] bytes = buffer.toByteArray(); 
     String encodedEmail = Base64.getUrlEncoder().encodeToString(bytes); 
     Message message = new Message(); 
     message.setRaw(encodedEmail);  
     message = gmailService.users().messages().send("me", message).execute(); 

     System.out.println("Message id: " + message.getId()); 
     System.out.println(message.toPrettyString()); 
     // other code... 
} 

कौन इस के साथ विफल रहता है:

मैं इस परीक्षण है

Scopes are https://www.googleapis.com/auth/gmail.compose 
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request 
{ 
    "code" : 400, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Bad Request", 
    "reason" : "failedPrecondition" 
    } ], 
    "message" : "Bad Request" 
} 
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
    at com.op.services.NotificationServiceTest.testGmailCredential(NotificationServiceTest.java:90) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

मैं फ़ाइल src/test/resources/myProject.json जो इस में जानकारी शामिल है:

{ 
    "type": "service_account", 
    "project_id": "xxxxxxxxxxx", 
    "private_key_id": "28341330...", 
    "private_key": "-----BEGIN PRIVATE KEY-----\.........\n-----END PRIVATE KEY-----\n", 
    "client_email": "[email protected]", 
    "client_id": "1182....", 
    "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
    "token_uri": "https://accounts.google.com/o/oauth2/token", 
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/myApp%40xxxxxxx.iam.gserviceaccount.com" 
} 

मैं कैसे दूर करूं क्या गूगल से इस बेवकूफ, नहीं उपयोगी failedPrecondition प्रतिसाद खड़ी कर रहा है?

+0

सर्वर http के साथ उत्तर दिया 400 प्रश्न है: जो सर्वर; क्या आप प्रॉक्सी का उपयोग कर रहे हैं? आप नेटवर्क यातायात सूंघ कर सकते हैं? – rds

+0

जब से तुम googleapis ग्राहक के कोड स्रोत है, तो आप प्रतिक्रिया के बारे में अधिक विवरण देखने के AbstractGoogleClientRequest interceptResponse() में एक breakpint लगा सके। – rds

उत्तर

0

आप यहाँ से अपने मुद्दे को हल करने के लिए एक पूर्ण प्रक्रिया प्राप्त कर सकते हैं:

Gmail REST API : 400 Bad Request + Failed Precondition

400 गलत अनुरोध के लिए, मैं एक जवाब दे दिया है। आप इस के माध्यम से जा सकते हैं।

  1. https://stackoverflow.com/a/36290762/2293534

जवाब की इसी प्रकार भी यहां उपलब्ध है: Google Admin Directory API is returning 400 bad request

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