【发布时间】:2013-04-15 23:57:54
【问题描述】:
在过去的几周里,我一直在使用 GAE/J 和 Google Cloud Endpoints 开发应用程序。我创建了我的自定义端点(使用注释),虽然我遇到了很多问题,但我可以解决它们并且一切都很好。
但是现在 (22/04/2013) 我尝试在端点方法中进行更改,突然 Google Eclipse 插件 不再生成客户端库了!
我试图从我的项目中删除所有生成的 api 文件,但没有任何效果。我什至再次下载了 Eclipse,安装了所有最新版本的 GPE 和 GAE SDK,并从头开始了一个新项目,但我遇到了同样的错误......
EDIT:在尝试了绝对EVERYTHING之后,看来Google的端肯定有问题。似乎 GPE 使用了CloudClientLibGenerator,至少在最近一段时间内它没有工作......
[ 75 小时 ... ]
现在我想知道:
- 如果他们在本地拥有所有必要的信息(代码、库等),为什么还需要云生成器来生成端点代码?还是没有?
- 我正在使用 GAE 的免费版,为大学开发一个应用程序(我的硕士毕业项目),但如果我正在开发一个为 GAE 付费的真正应用程序怎么办?是不是有点太粗制滥造?
无论如何,我认为这个词是 dis-end-ppointment with Endpoints...
注意:我在 Google 代码中打开了this issue。
编辑:来自 Google 项目成员的回复:“目前普遍存在 Endpoints 问题,它混淆了当前或之前的库生成问题。当前问题解决后我会更新。"
“我们正在努力尽快解决问题。一旦问题解决,我们将发布更新。”
更新:一些用户现在在上面的问题中发布 cmets 指出问题已解决!不过,谷歌没有发表官方评论。不幸的是,我暂时无法检查...
可能的解决方法:
您必须更改为以前的 GAE SDK 版本。 1.7.5 和 1.7.6 都在工作。您可以从here下载Java版本。
我已经尝试过了,端点库生成正在运行!!!还有开发服务器中的 APIs Explorer,所以我们可以在等待错误修复的同时继续开发,根据 Google 团队的说法,明天会发生什么......
突然间,我已经部署的端点无法正常工作,现在又开始工作了! (尽管客户端生成仍然无法与 SDK 1.7.7 一起使用)
编辑:来自 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
【问题讨论】:
-
我也有同样的问题。谷歌的问题是,在使用他们的任何“实验性 API”时,你永远不能过于小心/信任。他们在没有任何通知或线索的情况下改变和打破。一次又一次地发生在我身上。 :-(
-
有没有人尝试过命令行生成云端点库的方法? developers.google.com/appengine/docs/java/endpoints/gen_clients
-
其实我没有,但我不认为它会做任何改变,因为毕竟生成过程应该是相同的,无论是从命令行调用还是从GPE,对吧?而且,谷歌项目成员的评论并没有让我觉得暂时有什么解决办法,而是等待......
-
是的,你是对的。甚至我的应用程序 api 资源管理器也没有响应。 developers.google.com/apis-explorer/?base=https://…
-
没错,我已经编辑过了。到目前为止,至少我可以访问我的 edpoints ......这真是太棒了!我需要尽快修复它......暂时我想忘记这种情况,所以我要去观看冠军联赛;)
标签: google-app-engine google-cloud-endpoints google-eclipse-plugin