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