Search code examples
google-app-enginegoogle-cloud-endpoints

NoSuchMethodError for com.google.api.Service.hasQuota after appengineDeploy


After deploying my Google Endpoints API I get the error below even if I hit just the server url / or /_ah/warmup

Uncaught exception from servlet
java.lang.NoSuchMethodError: com.google.api.Service.hasQuota()Z
    at com.google.api.control.model.MethodRegistry.extractQuota(MethodRegistry.java:290)
    at com.google.api.control.model.MethodRegistry.<init>(MethodRegistry.java:72)
    at com.google.api.control.ConfigFilter.init(ConfigFilter.java:89)

The crazy thing is that this happens intermittently. Sometimes the deploy just works, but most times it fails.

This used to work fine as is until March 1st, so I rolled back the gcloud components version as well, but still get the same error.

Tried upgrading to the latest version if the appengine and endpoints libaries, but still get the error below.

EDIT-1

Here is the build.gradle for reference

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        // App Engine Gradle plugin
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.4.1'

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

// Dev
def projectIdValue = 'dev-sample-api'

repositories {
    mavenCentral()
    jcenter()
}

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

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

sourceSets {
    main {
        java {
            srcDirs 'src/main/java'
        }
    }
}

dependencies {
    // App Engine API
    implementation group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version: '1.9.86'

    // Endpoints Frameworks v2.0
    implementation ('com.google.endpoints:endpoints-framework:2.2.2') {
        exclude group: 'org.slf4j', module: 'slf4j-nop'
    }
    implementation group: 'com.google.endpoints', name: 'endpoints-management-control-appengine', version: '1.0.14'
    implementation group: 'com.google.endpoints', name: 'endpoints-framework-auth', version: '1.0.14'
    implementation group: 'com.google.protobuf', name: 'protobuf-java-util', version: '3.15.6'
    implementation group: 'io.grpc', name: 'grpc-stub', version: '1.36.0'
    implementation group: 'io.grpc', name: 'grpc-protobuf', version: '1.36.0'


    // App Engine and Endpoint dependencies
    compileOnly 'javax.servlet:javax.servlet-api:3.1.0'
    implementation 'jstl:jstl:1.2'
    implementation group: 'javax.inject', name: 'javax.inject', version: '1'

    // Logging
    implementation 'org.slf4j:slf4j-api:1.7.30'
    implementation 'org.slf4j:slf4j-jdk14:1.7.30'

    // Objectify for data storage and access
    implementation 'com.googlecode.objectify:objectify:5.1.9'

    // Common Utils and Libraries
    implementation 'com.google.guava:guava:20.0'
    implementation 'commons-validator:commons-validator:1.6'
    implementation 'joda-time:joda-time:2.10.8'
    implementation group: 'com.darwinsys', name: 'hirondelle-date4j', version: '1.5.1'
}

endpointsServer {
    // Endpoints Framework Plugin server-side configuration
    hostname = "${projectIdValue}.appspot.com"
}


// this replaces the ${endpoints.project.id} in appengine-web.xml and web.xml
task replaceProjectId(type: Copy) {
    from 'src/main/webapp/WEB-INF/'
    include '*.xml'
    into "build/exploded-${archivesBaseName}/WEB-INF"
    expand(endpoints:[project:[id:projectIdValue]])
    filteringCharset = 'UTF-8'
}
assemble.dependsOn replaceProjectId

appengine {
    deploy {   // deploy configuration
        version = "GCLOUD_CONFIG"
        projectId = "GCLOUD_CONFIG"

        def promoteProp = findProperty("appengine.deploy.promote")
        if (promoteProp != null) {
            promote = new Boolean(promoteProp)
        }
    }
    run {
        host = "0.0.0.0"
        port = 8080
    }
}


Solution

  • Closing this based on suggestion by @RafaelLemos.

    "Maybe this was a problem with an older version of some component"

    Not reproducible. Probable fix

    gcloud components update