Firebase access Service Account file for Java server

163 views
Skip to first unread message

booky99 via StackOverflow

unread,
Jun 18, 2016, 9:14:06 PM6/18/16
to google-appengin...@googlegroups.com

I am trying to connect to my Firebase database from Google App Engine. I don't know what I'm doing wrong but I can't access the Service Account file locally or from a Google Drive URL. I followed this tutorial to get my base code for Google App Engine. I'm using EndPoints for Android because it looked like the easiest to use but might not be the best.

I receive this error when trying to get it locally:

java.security.AccessControlException: access denied ("java.io.FilePermission" "\GPS Weather-a210c5ca1744.json" "read")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429)
    at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
    at java.io.FileInputStream.<init>(FileInputStream.java:127)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at productions.widowmaker110.backend.MyEndpoint.<init>(MyEndpoint.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

and its talking about line 49 which is the service acocunt line.

enter image description here

For security reasons, I removed the Firebase database link.

This is my attempt to access my service account file via Drive:

private FirebaseOptions options;
    private FirebaseDatabase ref;
    private DatabaseReference database;

    public MyEndpoint() {

        // firebase setup
        try {
            options = new FirebaseOptions.Builder()
                    .setServiceAccount(new URL("https://drive.google.com/file/d/...*SHARE LINK*").openStream())
                    .setDatabaseUrl("https://[firebase].firebaseio.com/")
                    .build();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        FirebaseApp.initializeApp(options);

        // database setup
        database = FirebaseDatabase.getInstance().getReference("data");
    }

Error Message:

Jun 18, 2016 9:10:05 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /_ah/spi/BackendService.getApiConfigs
java.lang.RuntimeException: Failed to read service account
    at com.google.firebase.FirebaseOptions$Builder.setServiceAccount(FirebaseOptions.java:82)
    at productions.widowmaker110.backend.MyEndpoint.<init>(MyEndpoint.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:142)
    at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:163)
    at com.google.api.server.spi.SystemServiceServlet.createService(SystemServiceServlet.java:189)
    at com.google.api.server.spi.SystemServiceServlet.registerService(SystemServiceServlet.java:179)
    at com.google.api.server.spi.SystemServiceServlet.createSystemService(SystemServiceServlet.java:172)
    at com.google.api.server.spi.SystemServiceServlet.createSystemService(SystemServiceServlet.java:136)
    at com.google.api.server.spi.SystemServiceServlet.init(SystemServiceServlet.java:59)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    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:43)
    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:512)
    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.content(HttpConnection.java:938)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    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)
Caused by: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
    at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
    at org.json.JSONObject.<init>(JSONObject.java:195)
    at org.json.JSONObject.<init>(JSONObject.java:319)
    at com.google.firebase.FirebaseOptions$Builder.setServiceAccount(FirebaseOptions.java:75)
    ... 49 more

The error message says I have a JSON file which doesn't have a curly brace ({) to start the file but that isn't true at all. I am using the auto-generated file from Google. Anyone have a clue how to fix this?



Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/37903077/firebase-access-service-account-file-for-java-server
Reply all
Reply to author
Forward
0 new messages