ここ数週間、 GAE/JとGoogle Cloud Endpointsを使用してアプリを開発してきました。カスタム エンドポイントを (注釈を使用して) 作成しました。かなり多くの問題がありましたが、それらを解決することができ、すべてがうまく機能していました。
しかし今 (2013 年 4 月 22 日) エンドポイント メソッドを変更しようとしたところ、突然Google Eclipse プラグインがクライアント ライブラリを生成しなくなりました。
生成されたすべての API ファイルをプロジェクトから削除しようとしましたが、何も機能しませんでした。Eclipse を再度ダウンロードし、GPE と GAE SDK の最新バージョンをすべてインストールし、新しいプロジェクトをゼロから開始しましたが、同じエラーが発生します...
編集:絶対にすべてを試した後、Googleの最後に問題があるに違いないようです。GPE は、CloudClientLibGenerator
少なくとも最後まで機能していない を使用しているようです...
【75時間~】
そして今、私は疑問に思っています:
- 必要なすべての情報 (コード、ライブラリなど) がローカルにあるのに、なぜエンドポイントのコードを生成するためにクラウド ジェネレーターが必要なのでしょうか? それともしていませんか?
- 私は GAE の無料版を使用して、大学向けのアプリを開発しています (私の修士課程の最終プロジェクト)。しかし、GAE にお金を払って実際のアプリを開発しているとしたらどうでしょうか? これはちょっと粗末すぎませんか?
とにかく、言葉はEndpointsとのdis-end-ppointmentだと思います...
注:この問題は Google Code で開いています。
編集: Google プロジェクト メンバーからの回答: 「現在、エンドポイント全般に問題があり、ライブラリ生成に関する現在または以前の問題がわかりにくくなっています。現在の問題が解決されたら更新します。」
「問題をできるだけ早く修正するよう取り組んでいます。問題が解決されたら、更新を投稿します。」
更新: 一部のユーザーは、問題が解決されたことを指摘して、上記の問題にコメントを投稿しています! ただし、Google からの公式コメントはありません。残念ながら、今のところ確認できません...
考えられる回避策:
以前の GAE SDK バージョンに変更する必要があります。1.7.5と1.7.6の両方が動作しています。Java版はこちらからダウンロードできます。
試してみたところ、エンドポイント ライブラリの生成が機能しています!!! また、開発サーバーの API Explorer により、バグが修正されるのを待ちながら開発を続けることができます。Google チームによると、明日はどうなるでしょうか...
そして突然、機能していなかった展開済みのエンドポイントが再び機能するようになりました! (ただし、クライアント生成は SDK 1.7.7 ではまだ機能していません)
EDIT:Googleから、コマンドラインからの生成も機能していると言っています。
クライアント ライブラリの生成中にスローされた例外のスタックトレース (GPE エラー ログ):
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createClientLibFromApiConfig(SwarmApiCreator.java:121)
at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createSwarmApi(SwarmApiCreator.java:242)
at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmServiceCreator.create(SwarmServiceCreator.java:364)
at com.google.gdt.eclipse.appengine.swarm.wizards.GenerateSwarmApiAction$1.run(GenerateSwarmApiAction.java:84)
at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372)
at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:507)
at com.google.gdt.eclipse.appengine.swarm.wizards.GenerateSwarmApiAction.run(GenerateSwarmApiAction.java:80)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
Caused by: com.google.appengine.repackaged.com.google.api.client.http.HttpResponseException: 400 Bad Request
{"error": {"message": "Bad Request", "code": 400, "errors": [{"message": "api error", "debug_info": "Could not parse api"}]}}
at com.google.appengine.repackaged.com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1155)
at com.google.api.server.spi.tools.CloudClientLibGenerator.postRequest(CloudClientLibGenerator.java:52)
at com.google.api.server.spi.tools.CloudClientLibGenerator.generateClientLib(CloudClientLibGenerator.java:43)
... 41 more