1

サービス アカウントを使用して資格情報を作成しようとしています (Google アナリティクス情報を取得するため)。
しかし、Credential.refreshToken(..) が呼び出されると、
java.net.SocketException: Connection reset が発生します。

Google Developers Console を使用して OAuth サービス アカウントと P12 ファイルを作成しました。次に、次のコードを実行します。

// Create the credential

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
File p12File = new File(System.getProperty("user.home"), ".store/analytics/my-project.p12");
Set<String> serviceAccountScopes = Collections.singleton(AnalyticsScopes.ANALYTICS);

GoogleCredential.Builder builder = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setServiceAccountId("123abc<etc>@developer.gserviceaccount.com")
    .setServiceAccountPrivateKeyFromP12File(p12File)
    .setServiceAccountScopes(serviceAccountScopes);

GoogleCredential credential = builder.build();

// Attempt to refresh the credential's token
credential.refreshToken();

これにより、短い一時停止が発生し、次に次の例外が発生します。

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
    at sun.security.ssl.InputRecord.read(InputRecord.java:480)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
    at sun.security.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1705)
    at sun.security.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:122)
    at sun.security.ssl.Handshaker.kickstart(Handshaker.java:909)
    at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1423)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1288)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091)
    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:384)
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
<etc>

コードは、Tomcat で実行されている webapp で実行されています。
この問題の助けをいただければ幸いです。

4

1 に答える 1

2

ここにたどり着いた他の人のために...
問題は、職場でのある種のファイアウォールの問題でした。携帯電話で Wifi ホットスポットを作成し、それを実行したところ、すべてが完全に機能しました。

于 2015-03-25T09:21:21.680 に答える