我在Eclipse中有一个Google AppEngine(Java)项目。我想在Eclipse中调试我的本地代码,但是在AppEngine上使用已部署的数据库。到目前为止,我使用远程API和用户名/密码(旧方式)
此方法将被弃用,我想使用OAuth但是当我尝试使用它时,它会引发异常:
java.lang.IllegalStateException: OAuth-based authorization not supported for clients running on App Engine
at com.google.appengine.tools.remoteapi.RemoteApiOptions.getOrCreateHttpTransportForOAuth(RemoteApiOptions.java:359)
at com.google.appengine.tools.remoteapi.RemoteApiOptions.useApplicationDefaultCredential(RemoteApiOptions.java:162)
当我运行一个在Eclipse中使用远程api的简单Java客户端应用程序时,可以使用Everthing。但如果客户端是Eclipse中的AppEngine开发环境,则无法正常工作。
如何使用appengine数据库在eclipse中调试服务器代码?
错误报告:https://code.google.com/p/googleappengine/issues/detail?id=12556
答案 0 :(得分:0)
根据documentation,您需要从 $ {SDK_ROOT} /lib/appengine-remote-api.jar >添加 appengine-remote-api.jar strong>到您的WEB-INF / lib目录(或将其添加到您的Maven依赖项),然后才能使用。
更新:事实上,App Engine与远程API的OAuth似乎尚未实施。我认为在ClientLogin完全弃用之前会有所改变,但是现在我建议在public issue tracker上打开一个功能请求。
一种可能的解决方法是创建连接到远程API的常规控制台应用程序(根据文档中的示例),并且可以充当在开发服务器上运行的App Engine应用程序的代理。
答案 1 :(得分:0)
这是expected,因为ApiProxy.getCurrentEnvironment()
返回的值不是null
,而是com.google.appengine.tools.development.LocalHttpRequestEnvironment
对象。对于开发服务器,您现在必须使用旧样式(用户名/密码)。
答案 2 :(得分:0)
除了我的同事Adam和Nikita之前所说的,我还可以正式确认Google云计算工程团队决定在截止日期之前为ClientLogin shutdown影响的所有合理用例提供解决方案。
据推测,远程API解决方案将在即将发布的版本1.9.31 / 32中提供,尽管这只是一个假设,并且还没有ETA。
作为替代方案,您可以access Cloud Datastore using Protobufs远程使用服务帐户凭据,这可能符合您目前的需求。
更新2016/01/21:
该团队已将ClientLogin关闭截止日期延长至2016年4月12日。
更新2016/04/12:
如前所述,该修补程序已正确应用,并在最新版本的SDK和gcloud中提供。远程API现在可以再次与OAuth一起用于app-to-app(或devserver-to-app)连接。