Code Monkey home page Code Monkey logo

endpoints-framework-gradle-plugin's Introduction

project status image Maven Central

Endpoints Framework Gradle Plugin

This Gradle plugin provides tasks and configurations to build and connect Endpoints Framework projects.

Android Studio users see transition guide.

Requirements

Gradle is required to build and run the plugin. The table below shows the compatibility with Gradle version.

Gradle version endpoints-framework-gradle-plugin version
7.x - 2.2.0 or higher (not yet released)
4.x - 6.x 2.1.0 or lower

How to use

The plugin JAR needs to be defined in the classpath of your build script. Alternatively, you can download it from GitHub and deploy it to your local repository. The following code snippet shows an example on how to retrieve it from maven central :

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
  }
}

Server

In your Gradle App Engine Java app, add the following plugin to your build.gradle:

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

The plugin exposes the following server side goals

  • endpointsClientLibs - generate client libraries
  • endpointsDiscoveryDocs - generate discovery documents
  • endpointsOpenApiDocs - generate Open Api documents

The plugin exposes server side configuration through the endpointsServer extension

  • serviceClasses - List of service classes (optional), this can be inferred from web.xml
  • clientLibDir - Output directory for generated client libraries
  • hostname - To set the root url for discovery docs and client libs (ex: hostname = myapp.appspot.com will result in a default root url of https://myapp.appspot.com/_ah/api)

Usage

Make sure your web.xml is configured to expose your endpoints correctly.

No configuration paramters are required to run with default values

$> gradle endpointsClientLibs

Client libraries will be written to build/endpointsClientLibs

$> gradle endpointsDiscoveryDocs

Discovery documents will be written to build/endpointsDiscoveryDocs

Client

In your client Java app, add the following plugin to your build.gradle:

// apply this plugin after you have applied other plugins
// because it uses the state of other plugins
apply plugin: 'com.google.cloud.tools.endpoints-framework-client'

The plugin exposes no tasks. Applying the plugin will generate sources according to your configuration

The plugin exposes client side configuration through the endpointsClient extension

  • discoveryDocs - List of discovery docs to generate source from

The plugin exposes intermodule endpoints configuration through a custom dependency

  • endpointsServer - Configure generation of source from another module in the project

Usage (from discovery docs)

In your build.gradle define the location of the discovery document in the endpointsClient configuration closure.

endpointsClient {
  discoveryDocs = ['src/endpoints/myApi-v1-rest.discovery']
}

building your project should inject the correct generated source into your compile path.

Usage (from server module in project)

In your build.gradle define the correct project dependency, the server project must be an endpoints-framework-server module for this to work.

dependencies {
  endpointsServer project(path: ":server", configuration: "endpoints")
}

building your project should inject the correct generated source into your compile path.

You can use a combination of discovery doc files and server dependencies when building a client module, make sure you include all the necessary dependencies for building your endpoints client

dependencies {
  compile 'com.google.api-client:google-api-client:<version>' // for standard java projects
  compile 'com.google.api-client:google-api-client-android:<version>' exclude module: 'httpclient' // for android projects
}

Contributing

If you wish to build this plugin from source, please see the contributor instructions.

endpoints-framework-gradle-plugin's People

Contributors

chanseokoh avatar coollog avatar elharo avatar loosebazooka avatar mpeddada1 avatar suztomo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

endpoints-framework-gradle-plugin's Issues

Plugin not compatible with "gcloud service-management deploy..."

Steps to reproduce:

  1. Add apiKeyRequired = AnnotationBoolean.TRUE to the endpoints API
  2. Use the plugin to generate the openapi.json file
  3. Deploy the API by running gcloud service-management deploy .\build\endpointsOpenApiDocs\openapi.json

Warnings like this are shown:
WARNING: openapi.json: Operation 'put' in path 'XXXXXXXXX': Operation does not require an API key; callers may invoke the method without specifying an associated API-consuming project. To enable API key all the SecurityRequirement Objects (https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#security-requirement-object) inside security definition must reference at least one SecurityDefinition of type : 'apiKey'.

The openapi.json file generated by the plugin contains this:

"security": [
     {
      "firebase": [ ]
     },
     {
      "api_key": [ ]
     }
    ],

If I edit the openapi.json file to this the warnings disappear:

"security": [
     {
      "firebase": [ ],
      "api_key": [ ]
     }
    ],

Adding the client plugin to android application throws error

Hi,

I've added the client plugin to my android application and running gradle now throws an error.

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

Error:SourceSet with name 'main' not found.

Adding the client plugin to my java war application works fine.

Couldn't follow symbolic link.

I have a problem in my project after creating symbolic links. For purposes non related to anything with the endpoint-framework-gradle-plugin, I have created a symbolic link inside the src/main/webapp folder of my project. After I do that I get the following error:

> Task :GameEditor:endpointsDiscoveryDocs FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':GameEditor:endpointsDiscoveryDocs'.
> Could not list contents of '/Users/phnl310216383/Peter/outdoorpuzzlegame/GameEditor/src/main/webapp/bower_components'. Couldn't follow symbolic link. 

I don't understand why the plugin can't open that directory and I don't understand why it's searching for something inside the webapp folder. I guess it shouldn't fail on anything inside the webapp folder.

NoClassDefFoundError on local DevServer when using Java8 runtime

Hi,

I have extracted a small project to demonstrate the behaviour here: https://github.com/mpoehler/endpointsAppEngineJava8Test

Just clone it and run it with gradle appengineRun and it will fail with the following Exception:

2017-08-28 16:45:23.068:WARN:oejs.ServletHandler:qtp386163331-18: Error for /_ah/api/discovery/v1/apis/klpvApi/v2/rest
java.lang.NoClassDefFoundError: com/google/appengine/repackaged/org/codehaus/jackson/node/ObjectNode
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.newInstance(Class.java:412)
at org.eclipse.jetty.server.handler.ContextHandler$Context.createInstance(ContextHandler.java:2481)
at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:1327)
at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:1285)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:615)
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 com.google.appengine.tools.development.jetty9.DevAppEngineWebAppContext.doScope(DevAppEngineWebAppContext.java:94)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at com.google.appengine.tools.development.jetty9.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:597)
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 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108)
at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
at java.lang.Thread.run(Thread.java:745)

The deployed version works, as you can see here: https://endpointstest-169017.appspot.com/

When you remove the <runtime>java8</runtime> entry in application-web.xml, the application works as expected locally too, but that uses an other dev-server (jetty 6 instead of 9).

It seems to me, that there is an dependency missing in the new java8 dev-server, but I have no clue what that can be.

Thanks in advance!

Marco

local appengine, on android client use http instead of https

Hi,

Is it possible to use http instead of https.

I mean the file created for the android, *endpoint
to have a:

public static final String DEFAULT_ROOT_URL = "**http**://192.168.0.101:8888/_ah/api/";

instead of:

public static final String DEFAULT_ROOT_URL = "**https**://192.168.0.101:8888/_ah/api/";

i am having the following problem when running appengine locally and calling an endpoint from android:

javax.net.ssl.SSLHandshakeException: Handshake failed
    com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:441)
    com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:212)
    com.android.okhttp.Connection.connect(Connection.java:1322)
    com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1410)
    com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:131)
    com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:485)
    com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:466)
    com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:372)
    com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:476)
    com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118)
    com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
    com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25)
    com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:104)
    com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)

 intangivel.morholt.android.settings.SettingsActivity$ProjectTask.doInBackground(SettingsActivity.java:127)

thanks!

Client generation from discovery doc is not added to sources on Android Studio 2.3

Hi,
I have a module that creates an endpoints java client api from a discovery doc which I'm using in an IntelliJ IDEA 2016.3.5 project and an Android Studio 2.3 project. In both projects, the client java files are correctly generated but only for the IntelliJ project, the generated java files in the build folder are added to the sources of the module so that they can be imported and used.
Any ideas?

App Engine Gradle plugin warns about application tag usage

Endpoints discovery docs generation (server side) requires the <application> tag to be used in the appengine-web.xml file. However, the new App Engine Gradle plugin warns that in a future version deploying with <application> or <version> present will fail.

Reading application configuration data...
*********************************
Configuration Warning : <application> XML element and --application should not be specified when staging

The following parameters will be scrubbed from app.yaml
application : <redacted>

Future versions of staging will fail if application or version is specified.
*********************************

Searching for this log output did not turn up anything in the Gradle plugin source code, so this warning is probably coming from a Cloud SDK component.

Or am I missing a configuration option to set the project ID differently?

Plugin in kotlin environment

Hi,

I'm experimenting with Android Studio 3.X and Kotlin. I've also converted some Java code which used an API generated by this plugin from a discovery document. However, after conversion the imports are not resolved anymore in the Kotlin code. Any ideas?

Clean up deprecated use of "classes"

Gradle now uses separate output directories for each JVM language, but this
build assumes a single directory for all classes from a source set. This behaviour
has been deprecated and is scheduled to be removed in Gradle 5.0.

Unexpected method parameter order for generated client library

I've migrated to this plugin from the legacy plugin, however some calls to my API are now broken in my Android project due to some method parameters being reordered.

Take this endpoint example:

    @ApiMethod(name = "x.location.nearby.list", httpMethod = "GET", path = "entityx/nearby")
    public Collection<EntityX> listNearbyX(@Named("latitude") final double latitude, @Named("longitude") final double longitude, @Named("radius") int radius, @Named("dev") @DefaultValue("") String dev, User user)

Calling the endpoint before had the order:
Double latitude, Double longitude, Integer radius.
Now the order is:
Double latitude, Integer radius, Double longitude.

Is there an ordering logic behind this? It's not the written order, or alphabetical.

In my @ApiMethod removing path = "entityx/nearby" restores the expected parameter ordering in my Android project. However I want to continue to utilise path.

Failed to generate client library: Read time-outs

We get read time outs when trying to generate our client libraries using gradle endpointsClientLib.

Caused by: java.net.SocketTimeoutException: Read timed out
        at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:36)
        at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:149)
        at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:84)
        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1012)
        at com.google.api.server.spi.tools.CloudClientLibGenerator.postRequest(CloudClientLibGenerator.java:65)

When cutting down on the number of endpoints, the generation sometimes succeeds. Our discovery doc size is 352K.

We believe that the generation is hitting the Appengine request duration limit of 60 sec. Locally (using https://github.com/google/apis-client-generator/), the generation takes 13 sec, but that method does not generate the same code structure as the endpointsClientLib task, so can't be used as a drop-in replacement/workaround. Maybe deploying to a larger instance size is a solution?

Feature request: Deploy openApi json to appengine with gradle

Hi,
I guess it's a good feature to deploy OpenApi spec to GAE with Gradle, in the way similar to "appengineDeploy*" tasks work for "general" gradle appengine plugin.
I.e. I'd like to have a gradle replacement to "gcloud service-management deploy {path to openApi.json}"

Feature: Scan for service classes inside servlets annotated with @WebServlet (ServletAPI v3+)

Hi,

Servlet API v3 allows annotations-only config with "WebServlet" and "WebInitParam" annotations on servlet class.

Currently endpoints-framework-plugin does not support scan of classpath to extract metadata from "WebServlet" annotations and use it inside endpointsOpenApiDocs task.

I've added some code that introduces described functionality. Here it is
Please take a look and tell if it's ok to file a pull request or there are major changes needed.

With Framework V2, trying to get an instance of EntityManagerFactory to be used with endpoint gives java.lang.NoClassDefFoundError

Hi,
Uploading my backend to app engine servers after updating my project with Framework V2 gives me a java.lang.NoClassDefFoundError when i try to access to some instance of EntityManagerFactory.
I have a class EMF that i call :
`
public final class EMF {

private static final EntityManagerFactory emfInstance = Persistence
		.createEntityManagerFactory("transactions-optional");

private EMF() {
}

public static EntityManagerFactory get() {
	return emfInstance;
}

}
`
com.google.api.server.spi.SystemService invokeServiceMethod: exception occurred while calling backend method
java.lang.NoClassDefFoundError: Could not initialize class com.example.app.EMF

I thought SystemServiceServlet class was replaced by EndpointsServlet as in my web.xml so i dont understand why it is called

Google Cloud SDK 174.0.0
alpha 2017.09.15
app-engine-java 1.9.57
app-engine-python 1.9.61
bq 2.0.27
core 2017.10.02
gsutil 4.27

On V1 everything was fine.
Could it be close to other github issue :
#53

I created a post on SO on that :
https://stackoverflow.com/questions/46622757/with-framework-v2-trying-to-get-an-instance-of-entitymanagerfactory-to-be-used

Thanls

Failed to apply plugin

I am on Idea 2018.3.5 and gradle 5.2.1. Below is my repo.

https://github.com/nareshk-gs/homedemo

When I run command gradle clean I see below error.

FAILURE: Build failed with an exception.

* Where:
Build file '/Data/learningCurve/homedemo/build.gradle' line: 19

* What went wrong:
A problem occurred evaluating root project 'homedemo'.
> Failed to apply plugin [id 'appengine']
   > Could not get unknown property 'classesDir' for functional test classes of type org.gradle.api.internal.tasks.DefaultSourceSetOutput.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s

500 Internal server error building clientLibs from cloudtools endpoints framework maven

I'm building endpoints for an appengine standard server with google cloud tools. I'm able to generate openapidocs, Discoverydocs, but when I try and generate clientLibs with --- endpoints-framework-maven-plugin:2.0.1:clientLibs (default-cli) @ mobile ---
[INFO] Endpoints Tool params : [get-client-lib, -o, C:\Users\steve.......:

I get:

ints Tool Error: 500 Internal Server Error
[ERROR] {"error": {"code": 500, "message": "Internal Server Error", "errors": [{"debug_info": "Neither servicePath nor rpcPath is defined.", "message": "unknown exception"}]}}
[ERROR] -> [Help 1]

this problem looks familiar to #98. That was solved at the Google end.

Any help appreciated.

Kotlin support for server-side

If a server-side gradle project, which means the project with com.google.cloud.tools.endpoints-framework-server gradle plugin, only has Kotlin source files, appengineRun will complain that

* What went wrong:
A problem was found with the configuration of task ':endpointsDiscoveryDocs'.
> Directory '/path/to/project/build/classes/java/main' specified for property 'classesDir' does not exist.

Creating a dummy Java class is a workaround.

Gradle 7 compatibility: AbstractArchiveTask.archiveName property has been deprecated (and removed in 7)

discoveryDocArchive.setArchiveName(project.getName() + "-" + "discoveryDocs.zip");

Click for more
The AbstractArchiveTask.archiveName property has been deprecated. This is scheduled to be removed in Gradle 7.0. Please use the archiveFileName property instead. See https://docs.gradle.org/6.7.1/dsl/org.gradle.api.tasks.bundling.AbstractArchiveTask.html#org.gradle.api.tasks.bundling.AbstractArchiveTask:archiveName for more details.
	at org.gradle.api.tasks.bundling.AbstractArchiveTask.setArchiveName(AbstractArchiveTask.java:126)
	at org.gradle.api.tasks.bundling.Zip_Decorated.setArchiveName(Unknown Source)
	at com.google.cloud.tools.gradle.endpoints.framework.server.EndpointsServerPlugin$2.execute(EndpointsServerPlugin.java:117)
	at com.google.cloud.tools.gradle.endpoints.framework.server.EndpointsServerPlugin$2.execute(EndpointsServerPlugin.java:110)
> Configure project :AppEngine
The AbstractArchiveTask.archiveName property has been deprecated. This is scheduled to be removed in Gradle 7.0. Please use the archiveFileName property instead. See https://docs.gradle.org/6.7.1/dsl/org.gradle.api.tasks.bundling.AbstractArchiveTask.html#org.gradle.api.tasks.bundling.AbstractArchiveTask:archiveName for more details.
	at org.gradle.api.tasks.bundling.AbstractArchiveTask.setArchiveName(AbstractArchiveTask.java:126)
	at org.gradle.api.tasks.bundling.Zip_Decorated.setArchiveName(Unknown Source)
	at com.google.cloud.tools.gradle.endpoints.framework.server.EndpointsServerPlugin$2.execute(EndpointsServerPlugin.java:117)
	at com.google.cloud.tools.gradle.endpoints.framework.server.EndpointsServerPlugin$2.execute(EndpointsServerPlugin.java:110)
	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication$1.execute(DefaultUserCodeApplicationContext.java:100)
	at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
	at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:150)
	at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:95)
	at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:83)
	at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:43)
	at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:245)
	at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:157)
	at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:61)
	at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:346)
	at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:249)
	at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:141)
	at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:183)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:180)
	at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1454)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:189)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:105)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:248)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$withProjectLock$3(DefaultProjectStateRegistry.java:308)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:178)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:308)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:289)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:247)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:91)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
	at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:63)
	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:710)
	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:145)
	at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:36)
	at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:64)
	at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:46)
	at org.gradle.configuration.BuildTreePreparingProjectsPreparer.prepareProjects(BuildTreePreparingProjectsPreparer.java:57)
	at org.gradle.configuration.BuildOperationFiringProjectsPreparer$ConfigureBuild.run(BuildOperationFiringProjectsPreparer.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
	at org.gradle.configuration.BuildOperationFiringProjectsPreparer.prepareProjects(BuildOperationFiringProjectsPreparer.java:40)
	at org.gradle.initialization.DefaultGradleLauncher.prepareProjects(DefaultGradleLauncher.java:228)
	at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:165)
	at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
	at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:126)
	at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:72)
	at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:67)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:178)
	at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:67)
	at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:56)
	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:60)
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
	at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
	at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
	at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:67)
	at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.lambda$execute$0(InProcessBuildActionExecuter.java:54)
	at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:87)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:53)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
	at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.lambda$execute$0(BuildTreeScopeLifecycleBuildActionExecuter.java:33)
	at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:49)
	at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:32)
	at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:27)
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:104)
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:55)
	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:64)
	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:37)
	at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.lambda$execute$0(SessionScopeLifecycleBuildActionExecuter.java:54)
	at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:67)
	at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:50)
	at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:36)
	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:59)
	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
	at org.gradle.util.Swapper.swap(Swapper.java:38)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
	at java.lang.Thread.run(Thread.java:748)

Execution failed for task ':backend:endpointsClientLibs' when increasing com.android.tools.build:gradle version

I get this error when I try to upgrade my project level gradle from 'com.android.tools.build:gradle:7.0.4' to 'com.android.tools.build:gradle:7.2.2' (Or anything higher than 7.0.4 in general):

Unable to find method ''java.lang.reflect.Type com.fasterxml.jackson.databind.introspect.AnnotatedField.getGenericType()''
'java.lang.reflect.Type com.fasterxml.jackson.databind.introspect.AnnotatedField.getGenericType()'

Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)

Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.

Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.

In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

The error in the logs says:

Execution failed for task ':backend:endpointsClientLibs'.
> 'java.lang.reflect.Type com.fasterxml.jackson.databind.introspect.AnnotatedField.getGenericType()'

Looks like it is related to the cloud endpoints module I have.

Is there a fix for this so I can have a higher gradle version for my project?

JavaClient changes

Hi,
my android app with dependency on endpoints v2 now compiles but there seem to be some changes to the v1 client.

Objects don't use type Long but String (extraction from the discovery doc):

"MyObject": {
   "id": "MyObject",
   "type": "object",
   "properties": {
    "id": {
     "type": "string",
     "format": "int64"
    }
   }
  },
public static class MyObject {
        public Long id;
}

Client generation from discovery docs fails with AS3.0

Hi,

I've got a project which built just fine with AS2.3. Now I've updated to AS3.0 and I'm getting an error when generating the endpoints client library from a discovery file.

Error:(3634, 20) The method setBatchPath(String) of type MyApi.Builder must override or implement a supertype method
Error:(3635, 30) The method setBatchPath(String) is undefined for the type AbstractGoogleJsonClient.Builder

Execution failed for task ':{project-name}:endpointsDiscoveryDocs'

Followed the instruction from README.md. And I am getting the following error:

:{project-name}:endpointsDiscoveryDocs FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':{project-name}:endpointsDiscoveryDocs'.
> com.google.common.reflect.TypeToken.isSubtypeOf(Ljava/lang/reflect/Type;)Z

The following is the partial build.gradle code.

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

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

repositories {
    maven {
        url 'https://maven-central.storage.googleapis.com'     // Google's mirror of Maven Central
    }
    maven {
        url "https://repo1.maven.org/maven2/"
    }
    jcenter()
    mavenCentral()
}

apply plugin: 'java'    // standard Java tasks
apply plugin: 'war'     // standard Web Archive plugin

// [START apply_appengine]
apply plugin: 'com.google.cloud.tools.appengine' // App Engine tasks
// [END apply_appengine]

// [START apply_endpoints-framework-server]
apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
// [END apply_endpoints-framework-server]

sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

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'

    // Endpoints Frameworks v2.0
    // [START endpoints-tools]
    compile group: 'com.google.endpoints', name: 'endpoints-framework', version: '2.0.7'
    // [END endpoints-tools]
    // End of Endpoints Frameworks v2.0

    // we still need this dependency
    // https://groups.google.com/forum/#!topic/google-cloud-endpoints/O0YALBKx1tY
    compile group: 'com.google.appengine', name: 'appengine-java-sdk', version: '1.9.+'

    compile group: 'com.google.endpoints', name: 'endpoints-management-control-appengine-all', version: '1.0.3'
    compile group: 'com.google.api-client', name: 'google-api-client', version: '1.22.+'

    compile 'com.google.cloud:google-cloud-datastore:0.11.1-beta'

    compile 'com.google.guava:guava:20.0'
    compile 'com.googlecode.objectify:objectify:5.1.+'
    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'

    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.8.2'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.8.2'

    compile project(':shared')

}

Using the server plugin with flexible environment

Hi,
I've just tried to use the server plugin with an GAE java flexible environment. I'm getting the following error:

Error:Execution failed for task ':flexbackend:endpointsDiscoveryDocs'.

Line 1, column 4: Unable to find property 'env' on class: com.google.apphosting.utils.config.AppYaml

app.yaml

runtime: java
env: flex
service: dbanalyzer
manual_scaling:
  instances: 1

Feature: add API validation for tasks

Please feel free to forward this issue to an appropriate repository\project\team.
Here's one more confusing scenario.
I've renamed one named parameter in java API class and added hyphen "-" in the middle of the name. So it looked like:
public void apiMethod(@Named("foo-bar") String fooBar)

I got no issues when openApi.json was generated or when app was deployed to appengine, but was not able to see my API in API explorer web UI.
To find out what's wrong I had to dig into logs, and there I've found this:
... java.lang.IllegalArgumentException: 'foo-bar' not a valid path parameter name at at com.google.api.server.spi.dispatcher.PathTrie$Builder.getAndCheckParameterName(PathTrie.java:221) at com.google.api.server.spi.dispatcher.PathTrie$Builder.add(PathTrie.java:190) at com.google.api.server.spi.dispatcher.PathTrie$Builder.add(PathTrie.java:202) at com.google.api.server.spi.dispatcher.PathTrie$Builder.add(PathTrie.java:202) at com.google.api.server.spi.dispatcher.PathTrie$Builder.add(PathTrie.java:202) at com.google.api.server.spi.dispatcher.PathTrie$Builder.add(PathTrie.java:176) at com.google.api.server.spi.dispatcher.PathDispatcher$Builder.add(PathDispatcher.java:69) at com.google.api.server.spi.EndpointsServlet.createDispatcher(EndpointsServlet.java:109) at com.google.api.server.spi.EndpointsServlet.init(EndpointsServlet.java:58)...
I guess, the problem is clear.
IMO, validation should be performed when openApi.json is generated. Or, alternatively, some validation fixed in the deep of Endpoints platform.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.