java.lang.NullPointerException при создании соединения Firestore с идентификатором моего проекта - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать соединение Firestore из моего веб-приложения Google App Engine.Я следовал руководству на веб-сайте Google (https://cloud.google.com/firestore/docs/quickstart-servers) и настраивал необходимый сервисный ключ, а также устанавливал переменную среды GOOGLE_APPLICATION_CREDENTIALS для пути к файлу json с ключом. Однако я продолжаю получать исключение NullPointerException в строкекогда я вызываю build () после установки идентификатора своего проекта. Кто-нибудь сталкивался с такой же проблемой и исправлял ее раньше? Я не могу найти подобных проблем в сети. Строков кода не так много, поэтому кажется, что проблема должна бытьОтносительно просто.

Это сама ошибка: вызвана: java.lang.NullPointerException на com.google.common.base.Preconditions.checkNotNull (Preconditions.java:770) на com.google.cloud.ServiceOptions$ Builder.setCredentials (ServiceOptions.java:203) в com.google.cloud.firestore.FirestoreOptions $ Builder.build (FirestoreOptions.java:213) в com.tellafirma.mappers.PierMapper. (PierMapper.java:63) в com.tellafirma.controller.PierController.displayLogin (PierController.java:60) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invo.j.jpg.jjMethod.java:498) в org.springframework.web.method.support.InvocableHandlerMethod.invoke (InvocableHandlerMethod.java:219) в org.springframework.web.method.support.InvocableHandlerMet.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod..springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java:686) в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter().web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:936) в org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:827) в javax.servlet.http.HttpServlet.Servlet.Servlet.) в org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:812) в javax.servlet.http.HttpServlet.service (HttpServlet.java:790) в org.eclipse.jetty.letol.erlet.Serv.erletServletHolder.java:867) по адресу org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1623) по адресу com.google.appengine.tools.development.ResponseRewriterFilter.doFilava :34) или Response.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1610) в com.google.appengine.tools.development.HeaderVerificationFilter.doFilter (HeaderVerificationFilter.java:34) в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1610) в com.google.appbbs.i.ServeBlobFilter.48) в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1610) в com.google.appengine.tools.development.jetty9.StaticFileFilter.doFilter (StaticFileFilter.java:12)в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1610) на com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest (DevAppServerModulesFilter.java:366) на com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest (DevAppServerModulesFilter.java:349) на com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter (DevAppServerModulesFilter.java:116) в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1610) на com.google.appengine.tools.development.DevAppServerRequestLogFilter.doFilter (DevAppServerRequestLogFilter.java:44) в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1602) в org.eclipse.jetty.servlet.ServletHandler.doHandle (ServletHandler.java:540) в org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:146) в org.eclipse.jetty.security.SecurityHandler.handle (SecurityHandler.java:524) в org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132) в org.eclipse.jetty.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:257) в org.eclipse.jetty.server.session.SessionHandler.doHandle (SessionHandler.java:1588) в org.eclipse.jetty.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:255) в org.eclipse.jetty.server.handler.ContextHandler.doHandle (ContextHandler.java:1345) в org.eclipse.jetty.server.handler.ScopedHandler.nextScope (ScopedHandler.java:203) в org.eclipse.jetty.servlet.ServletHandler.doScope (ServletHandler.java:480) в org.eclipse.jetty.server.session.SessionHandler.doScope (SessionHandler.java:1557) в org.eclipse.jetty.server.handler.ScopedHandler.nextScope (ScopedHandler.java:201) в org.eclipse.jetty.server.handler.ContextHandler.doScope (ContextHandler.java:1247) на com.google.appengine.tools.development.jetty9.DevAppEngineWebAppContext.doScope (DevAppEngineWebAppContext.java:94) в org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:144) в org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132) на com.google.appengine.tools.development.jetty9.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:595) в org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132) в org.eclipse.jetty.server.Server.handle (Server.java:502) в org.eclipse.jetty.server.HttpChannel.handle (HttpChannel.java:364) в org.eclipse.jetty.server.HttpConnection.onFillable (HttpConnection.java:260) at org.eclipse.jetty.io.AbstractConnection $ ReadCallback.succeeded (AbstractConnection.java:305) в org.eclipse.jetty.io.FillInterest.fillable (FillInterest.java:103) в org.eclipse.jetty.io.ChannelEndPoint $ 2.run (ChannelEndPoint.java:118) в org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:765) в org.eclipse.jetty.util.thread.QueuedThreadPool $ 2.run (QueuedThreadPool.java:683) at java.lang.Thread.run (Thread.java:748)

Я попытался переделать сервисный ключ и снова установить GOOGLE_APPLICATION_CREDENTIALS через командную строку. Я распечатал объект FirestoreOptions и объект FirestoreOptions.Builder, и у них есть адреса памяти, которые не равны нулю. Я разделил каждый вызов метода, чтобы попытаться увидеть конкретное место, где произошла ошибка, и она находится в строке build (). Я также обновил свои облачные компоненты, чтобы посмотреть, не устарело ли что-нибудь.

    public PierMapper(String id)
{
    projectId = id;
    firestoreOptions = FirestoreOptions.getDefaultInstance();
    System.out.println(firestoreOptions.toString());
    firestoreBuilder = firestoreOptions.toBuilder();
    System.out.println(firestoreBuilder.toString());
    firestoreBuilder = firestoreBuilder.setProjectId(projectId);
    System.out.println(firestoreBuilder.toString());
    System.out.println(firestoreBuilder.build());
    firestoreOptions = firestoreBuilder.build();
    database = firestoreOptions.getService();
}

Мне нужно, чтобы это соединение работало с Firestore, чтобы я мог начать читать и записывать данные из моего веб-приложения.

1 Ответ

0 голосов
/ 19 апреля 2019

Попробуйте установить GOOGLE_APPLICATION_CREDENTIALS на полный путь к вашему файлу json.Я подозреваю, что ваше приложение не находит ваш ключевой файл.

Вы также можете попробовать использовать gcloud auth application-default login, как описано здесь 1006 *, вместо переменной env.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...