Durante la migración de nuestro Cloud Endpoint de v1 a V2, notamos que el nombre de la clase de definición de servicio generada en el cliente no usa canonicalName definido en la definición de la anotación @Api

Por ejemplo,

@Api(name = "customer",
canonicalName = "CustomerAPI",
version = "v1",
...
public class CustomerEndpoint {
...

Genera customer-v1-java.zip y la clase de definición de servicio se genera con el nombre Customer en lugar de CustomerAPI.

Build.gradle de nuestra aplicación se ve de la siguiente manera

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'com.google.cloud.tools.endpoints-framework-client'
apply plugin: 'io.fabric'

...

dependencies {

    ...

    endpointsServer project(path: ':servers:api', configuration: 'endpoints')
}

Mientras que build.gradle en servers / api es el siguiente

buildscript {
repositories {
    mavenCentral()
    jcenter()
}
dependencies {
    // 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'
    }
}

...

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

...

dependencies {
    providedCompile group: 'javax.servlet', name: 'servlet-api', version:'2.5'
    compile 'jstl:jstl:1.2'
    compile group: 'javax.inject', name: 'javax.inject', version: '1'
    compile group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version: '1.9.49'
    compile group: 'com.google.endpoints', name: 'endpoints-framework', version: '2.0.8'

...

}

appengine {
    deploy {   // deploy configuration
        version = findProperty("appengine.deploy.version")
        def promoteProp = findProperty("appengine.deploy.promote")
        if (promoteProp != null) {
            promote = new Boolean(promoteProp)
        }
    }
    run {
        host = "0.0.0.0"
        port = 8080
        jvmFlags = ['-Ddatastore.backing_store=../../../local_db.bin']
    }
}

def projectId = 'some-api-project'

endpointsServer {
    hostname = "${projectId}.appspot.com"
}

endpointsClientLibs {
    hostname = "${projectId}.appspot.com"
}

¿Alguna idea de por qué no se respeta canonicalName?

0
abhideep 23 feb. 2018 a las 16:12

2 respuestas

La mejor respuesta

En pocas palabras, es un error / una omisión accidental. Lo arreglaré en la próxima versión.

0
saiyr 27 feb. 2018 a las 00:42

SOLUCIÓN ALTERNA

Como señaló Saiyr, este es un error que se solucionará en la próxima versión.

Para cualquiera que busque una solución alternativa, esto es lo que hice mientras tanto para solucionar el problema. Resulta que el problema está en la generación del documento de descubrimiento. Si tiene el documento de descubrimiento correcto, todo lo demás funciona bien.

Genere la biblioteca cliente usando la dependencia estándar de gradle en build.gradle de la aplicación

endpointsServer project(path: ':servers:api', configuration: 'endpoints')

Esto generará los documentos de descubrimiento en la carpeta

app/build/endpointsDiscoveryDocsFromDependencies

Copie los documentos de descubrimiento en esta carpeta en una nueva carpeta, diga

app/docs/api/discovery

Ahora edite el archivo build.gradle de la aplicación y comente la dependencia del punto final y agregue un destino para generar las bibliotecas cliente a partir de un conjunto dado de documentos de descubrimiento.

dependencies {

    ...

    // Commented out to suppress generation of client library
    // endpointsServer project(path: ':servers:api', configuration: 'endpoints')

}

// Use this target to generate client library instead
endpointsClient {
    discoveryDocs = [
            'docs/api/discovery/customer-v1-rest.discovery',
    ]
}

Espero que eso ayude.

0
abhideep 28 feb. 2018 a las 02:30