1

我使用服務帳戶時收到berlow錯誤。 相同的代碼在本地運行良好,而且iam能夠使用服務帳戶創建憑證。java.net.SocketTimeoutException:連接超時+谷歌目錄,管理員sdk API

....Error Snapshot : 
aused by: java.net.SocketTimeoutException: connect timed out 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
     at java.net.Socket.connect(Socket.java:579) 
     at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618) 
     at sun.net.NetworkClient.doConnect(NetworkClient.java:175) 
     at sun.net.www.http.HttpClient.openServer(HttpClient.java:378) 
     at sun.net.www.http.HttpClient.openServer(HttpClient.java:473) 
     at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:270) 
     at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:327) 
     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) 
     at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:931) 
     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) 
     at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1090) 
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) 
     at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77) 
     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965) 
     at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283) 
     at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) 
     at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:269) 
+0

代碼快照------ >> GoogleCredential憑證=新GoogleCredential.Builder().setTransport(TRANSPORT).setJsonFactory(jsonFactory).setServiceAccountId(「SERVICE_ACCOUNT_EMAIL」 ).setServiceAccountPrivateKeyFromP12File(new java.io.File(「SERVICE_ACCOUNT_PKCS12_FILE_PATH」)).setServiceAccountScopes(scopes).setServiceAccountUser(「[email protected]」)。build(); – kcforstackoverflow 2014-11-05 05:04:16

+0

我已經得到了答案,但不知何故無法發佈它...我會發布一次我給予訪問 – kcforstackoverflow 2014-11-05 09:06:50

回答

2

請嘗試以下...

  1. 設置在Linux操作系統中的代理。
  2. 創建存儲時 - 新的NetHttpTransport()提供了自己的方式來創建套接字並在傳輸中添加代理。

實施例的代碼...

public HttpClient myHttpClient() throws Exception { 

     SchemeRegistry schemeRegistry = new SchemeRegistry(); 
     //SetRegisrty for both HTTP and HTTPS - Check google for this. 
     schemeRegistry.register(new Scheme("http", PlainSocketFactory 
       .getSocketFactory(), YOUR_PROXY_PORT)); 
     schemeRegistry.register(new Scheme("https", SSLSocketFactory 
       .getSocketFactory(), 443)); 

     HttpParams params = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(params, 30 * 1000); // SET the timeout 
     HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
     ClientConnectionManager connManager = new ThreadSafeClientConnManager(
       params, schemeRegistry); 
     DefaultHttpClient httpClient = new DefaultHttpClient(connManager, 
       params); 
     try { 
      int proxyPort = YOUR_PROXY_PORT; 
      String proxyHost = "YOUR_PROXT_HOST_NAME"; 
      if (proxyPort > 0 && proxyHost != null && proxyHost.length() > 0) { 
       System.setProperty("https.proxyHost", proxyHost); 
       System.setProperty("https.proxyPort", proxyPort + ""); 
       System.setProperty("http.proxyHost", proxyHost); 
       System.setProperty("http.proxyPort", proxyPort + ""); 
       HttpHost proxy = new HttpHost(proxyHost, proxyPort); 
       httpClient.getParams().setParameter(
         ConnRoutePNames.DEFAULT_PROXY, proxy); 
      } 
     } catch (NullPointerException e) { 
      System.out.println("Proxy error here"); 
     } 
     return httpClient; 
    } 


    public static HttpTransport myNetHttpTransport() 
       throws Exception { 
      return new ApacheHttpTransport(myHttpClient()); 
     } 

使用.setTransport(myNetHttpTransport())代替NetHttpTransport()。

我們在此花了很長時間。但截至目前,這似乎正在起作用。請讓我知道如果有任何幫助...

相關問題