java - 调试谷歌数据存储 : IllegalArgumentException: projectId must match the following pattern

标签 java google-app-engine debugging google-cloud-datastore datastore

我正在开发一个应用引擎项目并使用 Google 数据存储存储我的数据。我想调试它,但我仍然有异常 java.lang.IllegalArgumentException: projectId must match the following pattern: ([a-z\d\-]{1,100}~)?([a-z\d][a-z\d\-\.]{0,99}:)?([a-z\d][a-z\d\-]{0,99})

我能够调试我的 Appengine 项目,我可以部署它并将数据正确地存储在 Google Datastore 中。

为了允许调试,我遵循了数据存储模拟器的说明:

https://cloud.google.com/datastore/docs/tools/datastore-emulator

我已经安装了 Google Cloud SDK,并使用我的项目 ID 的默认值正确启动它(我还尝试通过命令行设置我自己的项目 ID)。

这是我在 gcloud 中执行的命令:

gcloud beta emulators datastore start --project="my-project-name"

WARNING: Reusing existing data in [C:\gcloud\emulators\datastore]. Executing: cmd /c C:\google-cloud-sdk\platform\cloud-datastore-emulator\cloud_datastore_emulator.cmd start --host=localhost --port=8806 --store_on_disk=True --consistency=0.9 --allow_remote_shutdown C:\gcloud\emulators\datastore [datastore] nov 27, 2016 5:08:17 PM com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$7 apply [datastore] INFORMACI?N: Provided --allow_remote_shutdown to start command which is no longer necessary. [datastore] nov 27, 2016 5:08:17 PM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub [datastore] INFORMACI?N: Local Datastore initialized: [datastore]
Type: High Replication [datastore] Storage: C:\gcloud\emulators\datastore\WEB-INF\appengine-generated\local_db.bin [datastore] nov 27, 2016 5:08:17 PM io.grpc.internal.ManagedChannelImpl [datastore] INFORMACI?N: [ManagedChannelImpl@5f71c76a] Created with target localhost:8806 [datastore] nov 27, 2016 5:08:17 PM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load [datastore] INFORMACI?N: The backing store, C:\gcloud\emulators\datastore\WEB-INF\appengine-generated\local_db.bin, does not exist. It will be created. [datastore] nov 27, 2016 5:08:17 PM io.gapi.emulators.netty.NettyUtil applyJava7LongHostnameWorkaround [datastore] INFORMACI?N: Unable to apply Java 7 long hostname workaround. [datastore] API endpoint: http://localhost:8806 [datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run: [datastore] [datastore] export DATASTORE_EMULATOR_HOST=localhost:8806 [datastore] [datastore] Dev App Server is now running. [datastore]

这是我尝试使用它时的堆栈跟踪:

java.lang.IllegalArgumentException: projectId must match the following pattern: ([a-z\d-]{1,100}~)?([a-z\d][a-z\d-.]{0,99}:)?([a-z\d][a-z\d-]{0,99}) at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122) at com.google.cloud.datastore.Validator.validateDatabase(Validator.java:42) at com.google.cloud.datastore.BaseKey$Builder.(BaseKey.java:58) at com.google.cloud.datastore.KeyFactory.(KeyFactory.java:35) at com.google.cloud.datastore.DatastoreHelper.newKeyFactory(DatastoreHelper.java:59) at com.google.cloud.datastore.DatastoreImpl.newKeyFactory(DatastoreImpl.java:371) at com.myproject.api.CronServlet.saveToDataStore(CronServlet.java:187) at com.myproject.api.CronServlet.doGet(CronServlet.java:105) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:50) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366) at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349) at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:511) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

编辑:代码(我没有包括因为我认为问题不在代码中,因为我部署并且它工作得很好)。在“datastore.newKeyFactory()”中引发异常

Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
Key taskKey = datastore.newKeyFactory().setKind(ENTITY_TYPE_MEDIDAS).
    newKey(Calendar.getInstance(TimeZone.getTimeZone("CET")).getTimeInMillis());
Entity.Builder task = Entity.newBuilder(taskKey)
        .set(PROPERTY_COMPUESTO, DATA_COMPUESTO)
        .set(PROPERTY_AVISO,DATA_AVISO);
Entity entity = task.build();
datastore.put(entity);

最佳答案

目前尚不清楚您是在寻找连接到数据存储模拟器(用于开发)的示例还是 Google Cloud Platform 上的真实数据存储。看起来您的主要目标是从 IDE 调试您的代码,您可以通过任何一种方式进行调试。

要连接到数据存储模拟器 - 请参阅以下帖子:

Google Datastore Emulator using Java (Not using GAE)

用于连接到 GCP 上的数据存储 -

如果您尚未运行 glcoud init 命令,请运行它并按照屏幕上的说明设置默认项目和身份验证凭据。然后你可以使用下面的代码访问真正的数据存储:

Datastore datastore = DatastoreOptions.getDefaultInstance().getService();

其他选项是使用 DatastoreOptions.Builder 在代码中设置项目 ID 和 Auth Credentials。您需要从 Google Cloud Console 获取/下载 JSON 凭证。

有关更多信息/示例代码,请参阅以下链接:

https://github.com/GoogleCloudPlatform/google-cloud-java#specifying-a-project-id

https://github.com/GoogleCloudPlatform/google-cloud-java#authentication

关于java - 调试谷歌数据存储 : IllegalArgumentException: projectId must match the following pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40831513/

相关文章:

python - Google AppEngine 端点错误 : Fetching service config failed (status code 404)

debugging - Monodevelop Windows->使用软调试器进行Linux远程调试

java - 使用 CustomListAdapter 时出现 NullPointerException

java - 查找单向链表的倒数第 K 个元素

android - 如何在 Windows 7 中取消签名 bcprov-jdk15on-146.jar?

python - 如何跟踪 Python 中局部变量的值?

debugging - 如何配置 gdb 以调试脚本而不是二进制文件 [gdb : file format not recognized]

java - 如何直接在jasper中打印

java - 不使用 Eclipse 进行重构

java - java中的GAE : Get position in highscore database