GCE Migration to Framework v2 -- NPE when accessing endpoint in deployed app in appspot

120 views
Skip to first unread message

cupv...@gmail.com

unread,
May 5, 2018, 2:05:58 PM5/5/18
to Google Cloud Endpoints
Hello Everyone,

I am trying to migrate to GCE Framework v2, and my app does not work either on locally or when deploying to appspot. I encountered an error once the endpoints are deployed on the appspot (/_ah/api/discovery/v1/...) 

I found an old topic that has exactly the same problem as me, https://groups.google.com/d/msg/google-cloud-endpoints/FLpwoNp-4CM/UILuw6CCCQAJ, and tried all the suggestions in there and still have problem. It appears that this problem is specifically related to dependencies for particular project. I would very much appreciate and welcome any advice to solving this issue for my project.  I am sorry for the long post, but I would like to get as much as info in as possible.  I have tried this with both java 7 and java8 runtime (same error).

Please note: The project is compiled successfully, I could generate the APIDiscoveryDoc for my endpoints as well. 

2018-05-05 13:35:19.621 EDT
/_ah/api/discovery/v1/apis
java.lang.NullPointerException
at com.google.api.server.spi.EndpointsServlet.service(EndpointsServlet.java:71)
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.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
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.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:257)
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 com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:686)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:648)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:618)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:455)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:462)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:320)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:321)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:313)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:459)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:274)
at java.lang.Thread.run(Thread.java:745)

All of my endpoints are not getting discovered, do not get displayed in the API Explorer both either locally and on the appspot. When trying to call my API the first time after deployment, I will get the following exception:

2018-05-05 13:53:16.663 EDT
com.google.apphosting.runtime.jetty9.JettyLogger warn: Error for /_ah/api/registration/v1/matchRecords (JettyLogger.java:29)
java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:537)
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:448)
at com.google.api.server.spi.ObjectMapperUtil.createStandardObjectMapper(ObjectMapperUtil.java:75)
at com.google.api.server.spi.ObjectMapperUtil.createStandardObjectMapper(ObjectMapperUtil.java:62)
at com.google.api.server.spi.config.jsonwriter.JsonConfigWriter.<clinit>(JsonConfigWriter.java:92)
at com.google.api.server.spi.SystemService$Builder.withDefaults(SystemService.java:470)
at com.google.api.server.spi.EndpointsServlet.createSystemService(EndpointsServlet.java:123)
at com.google.api.server.spi.EndpointsServlet.init(EndpointsServlet.java:57)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:643)
at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:499)
at org.eclipse.jetty.servlet.ServletHolder.ensureInstance(ServletHolder.java:791)
at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:776)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:579)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:297)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at org.eclipse.jetty.server.Server.handle(Server.java:534)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
at com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:202)
at com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:81)
at com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:108)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:686)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:648)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:618)
at com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run(JavaRuntime.java:812)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:274)
at java.lang.Thread.run(Thread.java:745)
at java.lang.Thread.run(Thread.java:745)


Calling the same API again will get a NullPointerException 

2018-05-05 13:54:53.609 EDT
com.google.apphosting.runtime.jetty9.JettyLogger warn: /_ah/api/registration/v1/matchRecords (JettyLogger.java:29)
java.lang.NullPointerException
at com.google.api.server.spi.EndpointsServlet.service(EndpointsServlet.java:71)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1772)
at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.apphosting.runtime.jetty9.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:297)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at org.eclipse.jetty.server.Server.handle(Server.java:534)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
at com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:202)
at com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:81)
at com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:108)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:686)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:648)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:618)
at com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run(JavaRuntime.java:812)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:274)
at java.lang.Thread.run(Thread.java:745)



My build file (build.gradle) at the project level:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
// V2: Include this dependency when using Endpoints Framework v2
classpath 'com.google.guava:guava:19.0'
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.google.gms:google-services:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
maven {
url 'https://maven-central.storage.googleapis.com'
}
mavenCentral()
jcenter()
}
}


Build file at the backend project (build.gradle)


buildscript {
    repositories {
        maven {
            url 'https://maven-central.storage.googleapis.com'
        }
        mavenLocal()
        mavenCentral()
        jcenter()
    }
    dependencies {
       // classpath 'com.google.appengine:gradle-appengine-plugin:1.9.17'
        // App Engine Gradle plugin
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.3'

        // Endpoints Frameworks Gradle plugin
        classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
    }
}

repositories {
    maven {
        url 'https://maven-central.storage.googleapis.com'
    }
    mavenCentral();
}


sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'com.google.cloud.tools.appengine'
apply plugin: 'com.google.cloud.tools.endpoints-framework-server'

dependencies {
    compile group: 'com.google.endpoints', name: 'endpoints-framework', version: '2.0.9'
    compile group: 'javax.inject', name: 'javax.inject', version: '1'
    compile group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version: '1.9.59'
    compile 'javax.servlet:servlet-api:2.5'
    compile 'com.googlecode.objectify:objectify:5.1.12'
    compile files('src/main/webapp/WEB-INF/lib/gcm-server-1.1.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/commons-fileupload-1.3.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/commons-io-2.4.jar')
    compile files('src/main/webapp/WEB-INF/lib/appengine-gcs-client-0.4.4.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-api-services-storage-v1beta2-rev68-1.19.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/guava-18.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/joda-time-2.7.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-http-client-appengine-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/commons-logging-1.1.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-api-client-1.19.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-api-client-android-1.19.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-api-client-appengine-1.19.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-api-client-gson-1.19.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-api-client-jackson2-1.19.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-api-client-java6-1.19.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-api-client-servlet-1.19.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-http-client-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-http-client-android-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-http-client-gson-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-http-client-jackson2-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-http-client-jdo-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-oauth-client-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-oauth-client-appengine-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-oauth-client-java6-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-oauth-client-jetty-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/google-oauth-client-servlet-1.19.0.jar')
    compile files('src/main/webapp/WEB-INF/lib/gson-2.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/httpclient-4.0.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/jackson-core-2.1.3.jar')
    compile files('src/main/webapp/WEB-INF/lib/httpcore-4.0.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/jackson-core-asl-1.9.11.jar')
    compile files('src/main/webapp/WEB-INF/lib/jdo2-api-2.3-eb.jar')
    compile files('src/main/webapp/WEB-INF/lib/jetty-6.1.26.jar')
    compile files('src/main/webapp/WEB-INF/lib/jetty-util-6.1.26.jar')
    compile files('src/main/webapp/WEB-INF/lib/jsr305-1.3.9.jar')
    compile files('src/main/webapp/WEB-INF/lib/protobuf-java-2.4.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/transaction-api-1.1.jar')
    compile files('src/main/webapp/WEB-INF/lib/xpp3-1.1.4c.jar')
}

appengine {  // App Engine tasks configuration
    deploy {   // deploy configuration
        project = findProperty("appengine.deploy.project")
        version = findProperty("appengine.deploy.version")
        def promoteProp = findProperty("appengine.deploy.promote")
        if (promoteProp != null) {
            promote = new Boolean(promoteProp)
        }
    }
}

endpointsServer {
    // Endpoints Framework Plugin server-side configuration
    hostname = "<my-real-project-id-is-removed-from-here>.appspot.com"
}



Any advices at all is welcome and much appreciated. 
Regards

D. T.

unread,
May 7, 2018, 1:18:20 PM5/7/18
to cupv...@gmail.com, Google Cloud Endpoints
Please list the contents of WEB-INF/lib of the built application.

Daniel Tang | Software Engineer | ta...@google.com | Google LLC



--
You received this message because you are subscribed to the Google Groups "Google Cloud Endpoints" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-cloud-endpoints/b3b85f9d-d48e-4f3d-b0db-fc54089e9a2f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Message has been deleted

cupv...@gmail.com

unread,
May 7, 2018, 9:39:58 PM5/7/18
to Google Cloud Endpoints
Hello  Daniel,

Thank you for taking a look. Here is the content of WEB-INF of the instance that is currently deployed on GAE. 

Regards,





 

D. T.

unread,
May 8, 2018, 1:22:57 PM5/8/18
to cupv...@gmail.com, Google Cloud Endpoints
It looks like you have multiple versions of JARs being deployed, including two versions of jackson-core. If you depend on it in your own app, you should upgrade it to use the same version as Endpoints. That should fix at least one of the exceptions. Also consider upgrading endpoints-framework to 2.0.14.


Daniel Tang | Software Engineer | ta...@google.com | Google LLC


--
You received this message because you are subscribed to the Google Groups "Google Cloud Endpoints" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

cupv...@gmail.com

unread,
May 8, 2018, 11:23:22 PM5/8/18
to Google Cloud Endpoints

Thank you again Daniel, I cleaned up and updates  the dependencies, all of the problems are now gone. My Endpoints now working!! 
You are awesome. 

Here is the content of my WEB-INF/lib now for people who might have run into the similar issues.


Reply all
Reply to author
Forward
0 new messages