2016-09-30 25 views
1

このガイドに従って、Google App EngineのリモートAPIに接続できません:私はガイドをfolowedとweb.xmlを変更した私は私のローカルマシンから自分のデータにアクセスやろうとしています

https://cloud.google.com/appengine/docs/java/tools/remoteapi

、展開コードは、私は例外を取得「のgcloudのinit」コマンドを実行し、クラウドSDKをインストールしてプロジェクトを選択したが、サンプルコードを実行するときに:ここで

Exception in thread "main" java.lang.RuntimeException: Failed to acquire Google Application Default credential. 
    at com.google.appengine.tools.remoteapi.RemoteApiOptions.useApplicationDefaultCredential(RemoteApiOptions.java:169) 
    at androidlost_remote.RemoteTest.main(RemoteTest.java:14) 
Caused by: java.io.IOException: The Application Default Credentials are not available. They are available if running on Google App Engine, Google Compute Engine, or Google Cloud Shell. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information. 
    at com.google.appengine.repackaged.com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredential(DefaultCredentialProvider.java:98) 
    at com.google.appengine.repackaged.com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:213) 
    at com.google.appengine.repackaged.com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:191) 
    at com.google.appengine.tools.remoteapi.RemoteApiOptions.useApplicationDefaultCredential(RemoteApiOptions.java:164) 
    ... 1 more 

は私のコードです:

import java.io.IOException; 

import com.google.appengine.api.datastore.DatastoreService; 
import com.google.appengine.api.datastore.DatastoreServiceFactory; 
import com.google.appengine.api.datastore.Entity; 
import com.google.appengine.tools.remoteapi.RemoteApiInstaller; 
import com.google.appengine.tools.remoteapi.RemoteApiOptions; 

public class RemoteTest { 

    public static void main(String[] args) throws IOException { 
     RemoteApiOptions options = new RemoteApiOptions().server("myappid-hr.appspot.com", 443).useApplicationDefaultCredential(); 
     RemoteApiInstaller installer = new RemoteApiInstaller(); 
     installer.install(options); 
     try { 
      DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); 
      System.out.println("Key of new entity is " + ds.put(new Entity("Hello Remote API!"))); 
     } finally { 
      installer.uninstall(); 
     } 
    } 
} 

誰でもこの問題を解決する方法がありますか?

UPDATE:

今資格が固定されているようです。サーバーは、web.xml内のリモートAPIを持っていませんが、私はそれを行っているときに発生する。このpostによる

Exception in thread "main" com.google.appengine.repackaged.com.google.api.client.http.HttpResponseException: 302 Found 
    at com.google.appengine.repackaged.com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1070) 
    at com.google.appengine.tools.remoteapi.OAuthClient.get(OAuthClient.java:64) 
    at com.google.appengine.tools.remoteapi.RemoteApiInstaller.getAppIdFromServer(RemoteApiInstaller.java:413) 
    at com.google.appengine.tools.remoteapi.RemoteApiInstaller.loginImpl(RemoteApiInstaller.java:376) 
    at com.google.appengine.tools.remoteapi.RemoteApiInstaller.login(RemoteApiInstaller.java:337) 
    at com.google.appengine.tools.remoteapi.RemoteApiInstaller.install(RemoteApiInstaller.java:173) 
    at androidlost_remote.RemoteTest3.main(RemoteTest3.java:16) 

:しかし今、スタックトレースは、302を返します。サーバー側で必要なものは何ですか?

答えて

0

のために新しい資格情報を作成し、IAMアクセス権を与え、jsonをダウンロードして、最後にAPIを使用する前に使用します。 :)

Make sure remote API is enabled 

<servlet> 
<display-name>Remote API Servlet</display-name> 
<servlet-name>RemoteApiServlet</servlet-name> 
<servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>RemoteApiServlet</servlet-name> 
<url-pattern>/remote_api</url-pattern> 
</servlet-mapping> 

RemoteApiOptions raoptions = new RemoteApiOptions() .server("my-module-dot-my-project.appspot.com", 443) .useServiceAccountCredential("my-service-account-id", "my-p12-file.p12"); 

here

+0

JSONを使用する方法上の任意のヒントをもっと読みますか?チュートリアルやサンプルコードのように?私が見つけることができる唯一のサンプルはgcloudライブラリを使用し、appengineは使用しません。 –

+0

RemoteApiOptions raoptions = new RemoteApiOptions() .server( "my-module-dot-my-project.appspot.com"、443) .useServiceAccountCredential( "my-service-account-id"、 "my-service-account-id"、 "my-service-account-id" .p12 "); – varun

+0

http://varunsweblog.appspot。com/posts/how-to-use-google-appengine-remote-api-for-java – varun

0

さて、エラーコードを分解してみましょう。エラーコードの最初の行:Failed to acquire Google Application Default credential.何が正しく動作していないかを伝えます(GAD資格情報を取得できませんでした)。

次の注記は、at androidlost_remote.RemoteTest.main(RemoteTest.java:14)です。これは、エラーがremoteTestクラスの14行目で発生したことを示しています。

行14はinstaller.install(options);です。これは変数RemoteApiOptions optionsに戻ります。引数.options()が正しいウェブサーバとポートを指していることを確認してください。

エラーコードに戻って、4行目がなぜ起きたのかがわかります:java.io.IOException。これは、They are available if running on Google App Engine, Google Compute Engine, or Google Cloud Shell.のすべて私はあなたが持っていないと思いますので起こったと言います。だから、エラーコードはあなたが何をする必要があるのか​​、どこに助けを求めるのかを伝えます。 Google App Engine、Google Compute Engine、Google Cloud Shellをインストールする必要があります。

あなたがそれらの1 /すべてをインストールし、または環境変数GOOGLE_APPLICATION_CREDENTIALSは、エラーコードの行4から資格情報

を定義するファイルを指して定義する必要があります次のいずれかのhttps://developers.google.com/accounts/docs/application-default-credentials詳しく

関連する問題