service-management deployment error : Invalid OpenAPI file. Please fix the schema errors

1,787 views
Skip to first unread message

Patrick Farren

unread,
Apr 19, 2017, 6:59:40 AM4/19/17
to Google Cloud Endpoints
Following instructions https://cloud.google.com/endpoints/docs/frameworks/java/adding-api-management using Maven, to add API management into project. I had a working demo application using V1 of the google cloud endpoints. I'm in the process of migrating this demo app to V2 cloud framework and have encountered an issue deploying openapi.json file.


generated openapi.json file for basic LoginAPI using the following command

 endpoints-framework-tools-2.0.0-beta.11/bin/endpoints-framework-tools \
     get-openapi-doc \
     --hostname=<PROJECT_ID>.appspot.com \
     --war=target/<PROJECT>-1.0-SNAPSHOT \
     <DOMAIN>.login.LoginApi

Getting an error when executing the next step to deploy the openapi.json file

gcloud service-management deploy openapi.json

ERROR: (gcloud.service-management.deploy) INVALID_ARGUMENT: kind: ERROR
message: "Invalid OpenAPI file. Please fix the schema errors:\n\"/paths/~1loginApi~1v1~1login/post/parameters/0\": domain: validation; keyword: oneOf; message: instance does not match exactly one schema; matches: 0"

openapi.json file generated in earlier step:

{
 "swagger": "2.0",
 "info": {
  "version": "1.0.0",
  "title": "<PROJECT_ID>.appspot.com"
 },
 "host": "<PROJECT_ID>.appspot.com",
 "basePath": "/_ah/api",
 "schemes": [
  "https"
 ],
 "consumes": [
  "application/json"
 ],
 "produces": [
  "application/json"
 ],
 "paths": {
  "/loginApi/v1/login": {
   "post": {
    "operationId": "LoginApiLogin",
    "parameters": [
     {
      "in": "body",
      "required": false,
      "schema": {
       "$ref": "#/definitions/LoginRequest"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "A successful response",
      "schema": {
       "$ref": "#/definitions/LoginResponse"
      }
     }
    },
    "security": [
     {
      "google_id_token": [ ]
     },
     {
      "google_id_token_https": [ ]
     }
    ],
    "x-security": [
     {
      "google_id_token": {
       "audiences": [
       ]
      }
     },
     {
      "google_id_token_https": {
       "audiences": [
       ]
      }
     }
    ]
   }
  }
 },
 "securityDefinitions": {
  "google_id_token_https": {
   "type": "oauth2",
   "authorizationUrl": "",
   "flow": "implicit",
   "x-issuer": "https://accounts.google.com",
  },
  "google_id_token": {
   "type": "oauth2",
   "authorizationUrl": "",
   "flow": "implicit",
   "x-issuer": "accounts.google.com",
  }
 },
 "definitions": {
  "LoginResponse": {
   "properties": {
    "errorCode": {
     "type": "integer",
     "format": "int32"
    },
    "responseMsg": {
     "type": "string"
    }
   }
  },
  "LoginRequest": {
   "properties": {
    "codeTag": {
     "type": "string"
    },
    "userEmail": {
     "type": "string"
    },
    "userName": {
     "type": "string"
    }
   }
  }
 }
}


I have done searches in google and google -cloud-enpoints group but unable to get any clue how to fix this.

Any help would be appreciated.

D. T.

unread,
Apr 19, 2017, 1:11:31 PM4/19/17
to Patrick Farren, Google Cloud Endpoints
Can you try with the latest tools version, which is 2.0.6?

--
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/c77cd6b2-9caf-499a-8a83-578f1dd8db1f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Patrick Farren

unread,
Apr 19, 2017, 2:15:06 PM4/19/17
to Google Cloud Endpoints, patrick....@gmail.com
Thanks Daniel for the instruction. I downloaded 2.0.6 and it successfully deployed the openapi.json file.

Now when I try to access the 1 endpoint (LoginApi) using the api explorer I get a list of other apis that I had deployed previously (not sure why this is)

On accessing the 'valid' api LoginApi and submit a request I get a 500 error. The following exception is on the server logs

com.google.api.config.ServiceConfigException: Failed to fetch service config (status code 403)
	at com.google.api.config.ServiceConfigSupplier.fetch(ServiceConfigSupplier.java:138)
	at com.google.api.config.ServiceConfigSupplier.get(ServiceConfigSupplier.java:104)
	at com.google.api.config.ServiceConfigSupplier.get(ServiceConfigSupplier.java:48)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:199)
	at com.google.api.config.ServiceConfigFetcher.fetch(ServiceConfigFetcher.java:41)
	at com.google.api.control.ServiceManagementConfigFilter$1.load(ServiceManagementConfigFilter.java:33)
	at com.google.api.control.ConfigFilter.init(ConfigFilter.java:87)
	at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
	at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
	at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
	at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:203)
	at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:176)
	at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:133)
	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:635)
	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:595)
	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:565)
	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:453)
	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:460)
	at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311)
	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:457)
	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:238)
	at java.lang.Thread.run(Thread.java:745)


Any ideas what I might have missed?

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 19, 2017, 2:23:32 PM4/19/17
to Patrick Farren, Google Cloud Endpoints
Please make sure the "host" field in openapi.json matches ENDPOINTS_SERVICE_NAME in appengine-web.xml as well as endpoints.serviceName in web.xml.

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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/0001b598-9da2-4f8d-a48a-45e26b993265%40googlegroups.com.

Patrick Farren

unread,
Apr 19, 2017, 2:48:59 PM4/19/17
to Google Cloud Endpoints, patrick....@gmail.com
I have changed them all to the same value [PROJECT-ID].appspot.com

rebuilt project : mvn package

regenerated openapi.json

viewed host inside openapi.json to ensure matches web.xml and appengine-web.xml

and executed : gcloud service-management deploy openapi.json

which completed successfully.

Unfortunately I'm getting the same errors in server log files


19:46:55.880Failed startup of context com.google.apphosting.utils.jetty.RuntimeAppEngineWebAppContext@52d10e31{/,/base/data/home/apps/e~[PROJECT_ID]/1.400661930324843750} com.google.api.config.ServiceConfigException: Failed to fetch service config (status code 404) at com.google.api.config.ServiceConfigSupplier.fetch(ServiceConfigSupplier.java:138) at com.google.api.config.ServiceConfigSupplier.get(ServiceConfigSupplier.java:104) at com.google.api.config.ServiceConfigSupplier.get(ServiceConfigSupplier.java:48) at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:199) at com.google.api.config.ServiceConfigFetcher.fetch(ServiceConfigFetcher.java:41) at com.google.api.control.ServiceManagementConfigFilter$1.load(ServiceManagementConfigFilter.java:33) at com.google.api.control.ConfigFilter.init(ConfigFilter.java:87) at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662) at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:203) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:176) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:133) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:635) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:595) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:565) at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:453) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:460) at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:457) at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:238) at java.lang.Thread.run(Thread.java:745)
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 19, 2017, 2:53:19 PM4/19/17
to Patrick Farren, Google Cloud Endpoints
Hi Patrick, you shouldn't use literal [PROJECT_ID] if that's what you're doing. You should fill it in with an actual project id.

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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.

--
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/78fccfe1-b9fc-4fe9-be14-f84ac6580c4a%40googlegroups.com.

Patrick Farren

unread,
Apr 19, 2017, 2:58:11 PM4/19/17
to Google Cloud Endpoints, patrick....@gmail.com
I substituted the real project id with [PROJECT_ID] before submitting post to this group.

so this isn't a problem.
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 19, 2017, 3:11:03 PM4/19/17
to Patrick Farren, Google Cloud Endpoints
Is this on dev server or production? If dev server, are you on Windows? Also if on dev server, try gcloud auth application-default login.

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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.

--
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.

--
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/9910cb5e-0e34-4e01-8465-69d9587c944c%40googlegroups.com.

Patrick Farren

unread,
Apr 19, 2017, 3:26:02 PM4/19/17
to Google Cloud Endpoints, patrick....@gmail.com
This is on production
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

Patrick Farren

unread,
Apr 19, 2017, 3:32:49 PM4/19/17
to Google Cloud Endpoints, patrick....@gmail.com
A very similar exception on local dev server

[INFO] Apr 19, 2017 7:28:48 PM com.google.apphosting.utils.jetty.JettyLogger warn
[INFO] WARNING: failed endpoints-api-configuration: com.google.api.config.ServiceConfigException: Failed to fetch service config (status code 401)
[INFO] Apr 19, 2017 7:28:48 PM com.google.apphosting.utils.jetty.JettyLogger warn
[INFO] WARNING: Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext@ce5a68e{/,[I HAVE REPLACED THIS]-1.0-SNAPSHOT}
[INFO] com.google.api.config.ServiceConfigException: Failed to fetch service config (status code 401)
[INFO] at com.google.api.config.ServiceConfigSupplier.fetch(ServiceConfigSupplier.java:138)
[INFO] at com.google.api.config.ServiceConfigSupplier.get(ServiceConfigSupplier.java:104)
[INFO] at com.google.api.config.ServiceConfigSupplier.get(ServiceConfigSupplier.java:48)
[INFO] at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:199)
[INFO] at com.google.api.config.ServiceConfigFetcher.fetch(ServiceConfigFetcher.java:41)
[INFO] at com.google.api.control.ServiceManagementConfigFilter$1.load(ServiceManagementConfigFilter.java:33)
[INFO] at com.google.api.control.ConfigFilter.init(ConfigFilter.java:87)
[INFO] at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
[INFO] at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
[INFO] at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
[INFO] at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
[INFO] at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
[INFO] at org.mortbay.jetty.Server.doStart(Server.java:224)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:268)
[INFO] at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:284)
[INFO] at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:26)
[INFO] at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:87)
[INFO] at com.google.appengine.tools.development.Modules.startup(Modules.java:105)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:262)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:45)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:217)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:215)
[INFO] at java.security.AccessController.doPrivileged(Native Method)
[INFO] at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:215)
[INFO] at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:349)
[INFO] at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:47)
[INFO] at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:222)
[INFO] at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:213)

Patrick Farren

unread,
Apr 19, 2017, 3:37:02 PM4/19/17
to Google Cloud Endpoints, patrick....@gmail.com
Forgot to mention local dev server is Mint Linux

Patrick Farren

unread,
Apr 19, 2017, 4:07:07 PM4/19/17
to Google Cloud Endpoints, patrick....@gmail.com
gcloud auth application-default login 

was successful, but error remains on dev and production. 

D. T.

unread,
Apr 19, 2017, 6:05:14 PM4/19/17
to Patrick Farren, Google Cloud Endpoints
What version of endpoints-management-control-appengine are you using?

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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.

--
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.

--
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.

--
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/619e6b6a-be27-4aaa-b320-5e598b6b9450%40googlegroups.com.

Patrick Farren

unread,
Apr 20, 2017, 1:30:05 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
Created a small demo app to allow me to share all files etc with you in order to get an Api working.

Below are a list of commands/versions/file contents that might help identify the issue. Let me know if you need any further information to help investigations.

gcloud
======
gcloud --version
Google Cloud SDK 152.0.0
beta 2017.03.24
bq 2.0.24
bq-nix 2.0.24
core 2017.04.14
core-nix 2017.04.07
gcloud 
gcloud-deps 2017.04.07
gcloud-deps-linux-x86_64 2017.04.07
gsutil 4.25
gsutil-nix 4.25

maven
=====
mvn --version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T20:39:06+01:00)
Maven home: /home/tools/apache-maven-3.5.0
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-21-generic", arch: "amd64", family: "unix"

Create openapi.json
===================
endpoints-framework-tools-2.0.6/bin/endpoints-framework-tools \
     get-openapi-doc \
     --hostname=pizza-demo-164814.appspot.com \
     --war=target/pizza-demo-1.0-SNAPSHOT \
     com.imacit.eatzoo.server.login.LoginApi


deploy openapi.json
===================
gcloud service-management deploy openapi.json

openapi.json
============
{
 "swagger": "2.0",
 "info": {
  "version": "1.0.0",
 "basePath": "/_ah/api",
 "schemes": [
  "https"
 ],
 "consumes": [
  "application/json"
 ],
 "produces": [
  "application/json"
 ],
 "paths": {
  "/loginApi/v1/login": {
   "post": {
    "operationId": "LoginApiLogin",
    "parameters": [
     {
      "in": "body",
      "name": "body",
   "x-google-issuer": "https://accounts.google.com",
   "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs"
  },
  "google_id_token": {
   "type": "oauth2",
   "authorizationUrl": "",
   "flow": "implicit",
   "x-google-issuer": "accounts.google.com",
   "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs"
  }
 },
 "definitions": {
  "LoginResponse": {
   "properties": {
    "errorCode": {
     "type": "integer",
     "format": "int32"
    },
    "responseMsg": {
     "type": "string"
    }
   }
  },
  "LoginRequest": {
   "properties": {
    "codeTag": {
     "type": "string"
    },
    "facebookId": {
     "type": "string"
    },
    "userEmail": {
     "type": "string"
    },
    "userName": {
     "type": "string"
    }
   }
  }
 }
}


web.xml
=======
    <servlet>
        <servlet-name>EndpointsServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>
                com.endpoints.test.server.login.LoginApi
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>EndpointsServlet</servlet-name>
        <url-pattern>/_ah/api/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <filter>
        <filter-name>endpoints-api-configuration</filter-name>
        <filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class>
    </filter>
    <filter>
        <filter-name>endpoints-api-controller</filter-name>
        <filter-class>com.google.api.control.extensions.appengine.GoogleAppEngineControlFilter</filter-class>
        <init-param>
            <param-name>endpoints.projectId</param-name>
            <param-value>pizza-demo-164814</param-value>
        </init-param>
        <init-param>
            <param-name>endpoints.serviceName</param-name>
            <param-value>pizza-demo-164814.appspot.com</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>endpoints-api-configuration</filter-name>
        <servlet-name>EndpointsServlet</servlet-name>
    </filter-mapping>
    <filter-mapping>
        <filter-name>endpoints-api-controller</filter-name>
        <servlet-name>EndpointsServlet</servlet-name>
    </filter-mapping>
</web-app>


appengine-web.xml
=================
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>pizza-demo-164814</application>
    <version>1</version>
    <threadsafe>true</threadsafe>

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>
    <env-variables>
        <env-var name="ENDPOINTS_SERVICE_NAME" value="pizza-demo-164814.appspot.com" />
        <env-var name="ENDPOINTS_SERVICE_VERSION" value="1.0.0" />
    </env-variables>
</appengine-web-app>



LoginApi.java
=============
package com.endpoints.test.server.login;

import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.config.ApiNamespace;

/** An endpoint class we are exposing */
@Api(
    name = "loginApi",
    version = "v1",
    scopes = {Constants.EMAIL_SCOPE},
    clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID, Constants.IOS_CLIENT_ID, Constants.API_EXPLORER_CLIENT_ID},
    audiences = {Constants.ANDROID_AUDIENCE},
    description = "Authenticate user. ",
    namespace = @ApiNamespace(
      ownerDomain = "server.test.endpoints.com",
      ownerName = "server.test.endpoints.com",
      packagePath=""
    )
)
public class LoginApi {

    /** API to authenticate the user with a business tag
     * */
    @ApiMethod(name = "LoginApi")
    public LoginResponse login( LoginRequest loginRequest) {
LoginResponse response = new LoginResponse();

// Work done here

return response;
    }

}


D. T.

unread,
Apr 20, 2017, 1:36:34 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
The issue may be your ENDPOINTS_SERVICE_VERSION in appengine-web.xml. You need to remove it or use the version given in the gcloud service-management deploy. The format of the version is something like 2017-04-20r0.

--
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.

Patrick Farren

unread,
Apr 20, 2017, 1:56:24 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
I removed ENDPOINTS_SERVICE_VERSION from appengine-web.xml and checked current environment variables

$ set | grep END
ENDPOINTS_SERVICE_NAME=pizza-demo-164814.appspot.com

But I get environment variable exception starting the local development server. I cannot locate the version number as I didn't execute the gcloud service-management deploy command. Am I missing a step in the local build/deploy?

bascially I build the project
mvn clean install
and then run the devserver
mvn appengine:devserver

[INFO] com.google.appengine.tools.development.EnvironmentVariableChecker$IncorrectEnvironmentVariableException: One or more environment variables have been configured in appengine-web.xml that have missing or different values in your local environment. We recommend you use system properties instead, but if you are interacting with legacy code that requires specific environment variables to have specific values, please set these environment variables in your environment before running.
[INFO] [Mismatch environmentVariableName=ENDPOINTS_SERVICE_VERSION environmentVariableValue=null appEngineWebXmlValue=1.0.0 appEngineWebXmlFile=/home/patrick/java/pizzademo/target/pizza-demo-1.0-SNAPSHOT/WEB-INF/appengine-web.xml]
[INFO] at com.google.appengine.tools.development.EnvironmentVariableChecker.check(EnvironmentVariableChecker.java:75)
[INFO] at com.google.appengine.tools.development.ApplicationConfigurationManager.checkEnvironmentVariables(ApplicationConfigurationManager.java:240)
[INFO] at com.google.appengine.tools.development.ApplicationConfigurationManager.access$000(ApplicationConfigurationManager.java:32)
[INFO] at com.google.appengine.tools.development.ApplicationConfigurationManager$WarModuleConfigurationHandle.checkEnvironmentVariables(ApplicationConfigurationManager.java:394)


I have also tried to deploy to production.
First I ran the gcloud service-management deploy command noted the version number(2017-04-20r1) then updated appengine-web.xml with <env-var name="ENDPOINTS_SERVICE_VERSION" value="2017-04-20r1" />

Then following command to deploy app
mvn appengine:update


But it fails at 99% - displays this message a number of times
99% Will check again in 60 seconds.

When I view the production server logs I can see the original exception
20:57:19.278Failed startup of context com.google.apphosting.utils.jetty.RuntimeAppEngineWebAppContext@50ba74ed{/,/base/data/home/apps/e~pizza-demo-164814/1.400674756031874281} com.google.api.config.ServiceConfigException: Failed to fetch service config (status code 404) at com.google.api.config.ServiceConfigSupplier.fetch(ServiceConfigSupplier.java:138) at com.google.api.config.ServiceConfigSupplier.get(ServiceConfigSupplier.java:104) at com.google.api.config.ServiceConfigSupplier.get(ServiceConfigSupplier.java:48) at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:199) at com.google.api.config.ServiceConfigFetcher.fetch(ServiceConfigFetcher.java:41) at com.google.api.control.ServiceManagementConfigFilter$1.load(ServiceManagementConfigFilter.java:33) at com.google.api.control.ConfigFilter.init(ConfigFilter.java:87) at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662) at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)


Thanks Patrick
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 20, 2017, 2:03:48 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
On Thu, Apr 20, 2017 at 10:56 AM Patrick Farren <patrick....@gmail.com> wrote:
I removed ENDPOINTS_SERVICE_VERSION from appengine-web.xml and checked current environment variables

$ set | grep END
ENDPOINTS_SERVICE_NAME=pizza-demo-164814.appspot.com

But I get environment variable exception starting the local development server. I cannot locate the version number as I didn't execute the gcloud service-management deploy command. Am I missing a step in the local build/deploy?

bascially I build the project
mvn clean install
and then run the devserver
mvn appengine:devserver

[INFO] com.google.appengine.tools.development.EnvironmentVariableChecker$IncorrectEnvironmentVariableException: One or more environment variables have been configured in appengine-web.xml that have missing or different values in your local environment. We recommend you use system properties instead, but if you are interacting with legacy code that requires specific environment variables to have specific values, please set these environment variables in your environment before running.
[INFO] [Mismatch environmentVariableName=ENDPOINTS_SERVICE_VERSION environmentVariableValue=null appEngineWebXmlValue=1.0.0 appEngineWebXmlFile=/home/patrick/java/pizzademo/target/pizza-demo-1.0-SNAPSHOT/WEB-INF/appengine-web.xml]
[INFO] at com.google.appengine.tools.development.EnvironmentVariableChecker.check(EnvironmentVariableChecker.java:75)
[INFO] at com.google.appengine.tools.development.ApplicationConfigurationManager.checkEnvironmentVariables(ApplicationConfigurationManager.java:240)
[INFO] at com.google.appengine.tools.development.ApplicationConfigurationManager.access$000(ApplicationConfigurationManager.java:32)
[INFO] at com.google.appengine.tools.development.ApplicationConfigurationManager$WarModuleConfigurationHandle.checkEnvironmentVariables(ApplicationConfigurationManager.java:394)


This seems to indicate that it isn't actually removed from appengine-web.xml. Check /home/patrick/java/pizzademo/target/pizza-demo-1.0-SNAPSHOT/WEB-INF/appengine-web.xml. You can get the service version list through "gcloud service-management configs list --service=<service here>"
 

I have also tried to deploy to production.
First I ran the gcloud service-management deploy command noted the version number(2017-04-20r1) then updated appengine-web.xml with <env-var name="ENDPOINTS_SERVICE_VERSION" value="2017-04-20r1" />

Then following command to deploy app
mvn appengine:update


Did you "mvn clean package" before updating? Can you verify the contents of /home/patrick/java/pizzademo/target/pizza-demo-1.0-SNAPSHOT/WEB-INF/appengine-web.xml?
 
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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/c37054ca-e36a-4172-8d88-98cd4378d078%40googlegroups.com.

Patrick Farren

unread,
Apr 20, 2017, 3:18:37 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
You were correct Daniel the target/pizza-demo-1.0-SNAPSHOT/WEB-INF/appengine-web.xml had a 1.0.0 version number in it!!!

So I removed the entire target directory (rm -r target)

mvn install package

No ENDPOINTS_SERVICE_VERSION variables in any appengine-web.xml.

after the build completed successfully I did a grep for the following : grep -ri "SystemServiceServlet" * 
These lines are not contained in my src/main/webapp/WEB-INF/web.xml file.

target/generated-sources/appengine-endpoints/WEB-INF/web.xml:  <servlet-name>SystemServiceServlet</servlet-name>
target/generated-sources/appengine-endpoints/WEB-INF/web.xml:  <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
target/generated-sources/appengine-endpoints/WEB-INF/web.xml:  <servlet-name>SystemServiceServlet</servlet-name>
target/pizza-demo-164814-1.0-SNAPSHOT/WEB-INF/web.xml:  <servlet-name>SystemServiceServlet</servlet-name>
target/pizza-demo-164814-1.0-SNAPSHOT/WEB-INF/web.xml:  <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
target/pizza-demo-164814-1.0-SNAPSHOT/WEB-INF/web.xml:  <servlet-name>SystemServiceServlet</servlet-name>

Because when I started the local devserver I got a ClassNotFoundException  for com.google.api.server.spi.SystemServiceServlet

mvn appengine:devserver

..
..

[INFO] Apr 20, 2017 7:06:24 PM com.google.api.control.Client start
[INFO] INFO: starting com.google.api.control.Client@4b039c6d
[INFO] Apr 20, 2017 7:06:24 PM com.google.apphosting.utils.jetty.JettyLogger warn
[INFO] WARNING: EXCEPTION 
[INFO] java.lang.ClassNotFoundException: com.google.api.server.spi.SystemServiceServlet
[INFO] at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[INFO] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[INFO] at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:195)
[INFO] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[INFO] at org.mortbay.util.Loader.loadClass(Loader.java:91)
[INFO] at org.mortbay.util.Loader.loadClass(Loader.java:71)
[INFO] at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
[INFO] at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
[INFO] 
[INFO] Apr 20, 2017 7:06:24 PM com.google.appengine.tools.development.ApiProxyLocalImpl log
[INFO] SEVERE: javax.servlet.ServletContext log: unavailable
[INFO] javax.servlet.UnavailableException: com.google.api.server.spi.SystemServiceServlet
[INFO] at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:79)
[INFO] at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242)
[INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
[INFO] at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)

I have done a searches using google but can't get an answer for this one.

D. T.

unread,
Apr 20, 2017, 3:25:47 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
This could be an artifact of using the old App Engine Maven plugin. Try using this one:

            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>1.0.0</version>
            </plugin>

--
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.

D. T.

unread,
Apr 20, 2017, 3:26:06 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
Note that you need to use appengine:run instead of appengine:devserver in this case.

Patrick Farren

unread,
Apr 20, 2017, 3:30:01 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
mvn appengine:run

[INFO] Scanning for projects...
[WARNING] The project com.endpoints.test.server:pizza-demo-164814:war:1.0-SNAPSHOT uses prerequisites which is only intended for maven-plugin projects but not for non maven-plugin projects. For such purposes you should use the maven-enforcer-plugin. See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.391 s
[INFO] Finished at: 2017-04-20T20:28:17+01:00
[INFO] Final Memory: 9M/145M
[INFO] ------------------------------------------------------------------------
[ERROR] Could not find goal 'run' in plugin com.google.appengine:appengine-maven-plugin:1.9.51 among available goals backends_configure, backends_delete, backends_rollback, backends_start, backends_stop, backends_update, create-property, debug, devserver, devserver_start, devserver_stop, endpoints_get_client_lib, endpoints_get_discovery_doc, endpoints_get_swagger_doc, enhance, migrate_traffic, rollback, set_default_version, start_module_version, stop_module_version, update, update_cron, update_dispatch, update_dos, update_indexes, update_queues, vacuum_indexes 
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 20, 2017, 3:43:24 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
Did you update your pom.xml? Can you paste the plugin fragment?

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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/cd4bc9a9-46d8-41b1-8fbc-d182346a5c94%40googlegroups.com.

Patrick Farren

unread,
Apr 20, 2017, 4:02:15 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
In a vain attempt to get something working I tried a deployment to Production, but it gets an exception after getting stuck at 99% Will check again in 60 seconds.

F  POST 500 3.52 KB 378 ms Unknown /_ah/spi/BackendService.getApiConfigs POST 500 3.52 KB 378 ms Unknown 58f90e6e00ff0156e9ced125ba0001657e70697a7a612d64656d6f2d313634383134000131000100
  10.1.0.41 - - [20/Apr/2017:20:39:26 +0100] "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 500 3602 - "-" "1-dot-pizza-demo-164814.appspot.com" ms=378 cpu_ms=430 cpm_usd=4.0255399999999997e-7 loading_request=0 instance=00c61b117cc2edbd3466cd65b4df706af0d5d551b6d14878e3cd82cbe1867ad15bd422f70e app_engine_release=1.9.48 trace_id=92944b4458992a3bd235b2cf14f8d153

Uncaught exception from servlet javax.servlet.UnavailableException: java.lang.ClassCastException: com.google.api.server.spi.config.AnnotationBoolean cannot be cast to com.google.api.server.spi.config.AnnotationBoolean at org.mortbay.jetty.servlet.ServletHolder.makeUnavailable(ServletHolder.java:415) at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:458) at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 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:145) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:635) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:595) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:565) at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:453) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:460) at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:457) at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:238) at java.lang.Thread.run(Thread.java:745)

Patrick Farren

unread,
Apr 20, 2017, 4:02:41 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>

<groupId>com.endpoints.test.server</groupId>
<artifactId>pizza-demo-164814</artifactId>

<properties>
<app.id>pizza-demo-164814</app.id>
<app.version>1</app.version>
<appengine.version>1.9.51</appengine.version>
<gcloud.plugin.version>151.0.0</gcloud.plugin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
<archiveClasses>true</archiveClasses>
</properties>

<prerequisites>
<maven>3.3.9</maven>
</prerequisites>
<dependencies>
<!-- Compile/runtime dependencies -->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>${appengine.version}</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.google.endpoints</groupId>
<artifactId>endpoints-framework</artifactId>
<version>2.0.6</version>
</dependency>

<!-- Test Dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>2.0.2-beta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-testing</artifactId>
<version>${appengine.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>${appengine.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.endpoints</groupId>
<artifactId>endpoints-management-control-appengine</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>com.google.endpoints</groupId>
<artifactId>endpoints-framework-auth</artifactId>
<version>1.0.3</version>
</dependency>
</dependencies>

<build>
<!-- for hot reload of the web application-->
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>display-dependency-updates</goal>
<goal>display-plugin-updates</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<webXml>${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml</webXml>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>${project.build.directory}/generated-sources/appengine-endpoints</directory>
<!-- the list has a default value of ** -->
<includes>
<include>WEB-INF/*.discovery</include>
<include>WEB-INF/*.api</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>

<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>${appengine.version}</version>
<configuration>
<enableJarClasses>false</enableJarClasses>
<version>${app.version}</version>
<address>0.0.0.0</address>
<port>8080</port>
<jvmFlags>
<jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n</jvmFlag>
</jvmFlags>
</configuration>
<executions>
<execution>
<goals>
<goal>endpoints_get_discovery_doc</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>gcloud-maven-plugin</artifactId>
<version>${gcloud.plugin.version}</version>
<configuration>
<set_default>true</set_default>
</configuration>
</plugin>
</plugins>
</build>

</project>
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 20, 2017, 4:06:55 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
Change these lines:
                <groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>${appengine.version}</version>
to
                <groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.0.0</version>
and then try mvn appengine:run.

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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.

--
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/39ec82b1-0b35-44e0-a672-08da4bf48296%40googlegroups.com.

Patrick Farren

unread,
Apr 20, 2017, 4:26:04 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
I did as you ask. I also tried version <version>1.3.0-rc1</version> but i get the following error even though I can see the goal in the pom.xml file

[ERROR] Could not find goal 'endpoints_get_discovery_doc' in plugin com.google.cloud.tools:appengine-maven-plugin:1.3.0-rc1 among available goals deploy, deployCron, deployDispatch, deployDos, deployIndex, deployQueue, genRepoInfoFile, help, run, stage, start, stop -> [Help 1]

ERROR] Could not find goal 'endpoints_get_discovery_doc' in plugin com.google.cloud.tools:appengine-maven-plugin:1.0.0 among available goals deploy, help, run, stage, start, stop -> [Help 1]


<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
    <version>1.3.0-rc1</version>
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 20, 2017, 4:27:21 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
Try removing the other config lines in the <plugin>, leaving only the three lines from my last email.

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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.

--
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.

--
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/8b616e27-9772-4c3a-942f-55ad30ea686e%40googlegroups.com.

Patrick Farren

unread,
Apr 20, 2017, 4:38:15 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
removing the other lines in plugin meant build got further but got the following error:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:3.0.0:war (default-war) on project pizza-demo-164814: Execution default-war of goal org.apache.maven.plugins:maven-war-plugin:3.0.0:war failed: basedir /home/patrick/java/endpointsTest/target/generated-sources/appengine-endpoints does not exist -> [Help 1]

I put the following lines back into it again but it still failed with Could not find goal 'endpoints_get_discovery_doc' in plugin com.google.cloud.tools:appengine-maven-plugin:1.0.0
<executions>
    <execution>
<goals>
<goal>endpoints_get_discovery_doc</goal>
</goals>
</execution>
</executions>

I removed them again. Therefore only 3 lines in that plugin

D. T.

unread,
Apr 20, 2017, 4:41:38 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
Also remove these lines:

                    <webXml>${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml</webXml>
                    <webResources>
                        <resource>
                            <!-- this is relative to the pom.xml directory -->
                            <directory>${project.build.directory}/generated-sources/appengine-endpoints</directory>
                            <!-- the list has a default value of ** -->
                            <includes>
                                <include>WEB-INF/*.discovery</include>
                                <include>WEB-INF/*.api</include>
                            </includes>
                        </resource>
                    </webResources>

and replace them with:

                    <webResources>
                        <resource>
                            <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                            <filtering>true</filtering>
                            <targetPath>WEB-INF</targetPath>
                        </resource>
                    </webResources>

--
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.

Patrick Farren

unread,
Apr 20, 2017, 5:00:11 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
Great.....this has got the local devserver running and the API explorer. Thanks for this so far.

When access the admin page which used to be http://localhost:8080/_ah/admin the following exception is thrown

[INFO] GCLOUD: WARNING: No file found for: /_ah/warmup
[INFO] GCLOUD: INFO     2017-04-20 20:53:53,375 module.py:813] default: "GET /_ah/warmup HTTP/1.1" 404 83
[INFO] GCLOUD: Apr 20, 2017 8:54:20 PM com.google.appengine.tools.development.devappserver2.RemoteApiDelegate log
[INFO] GCLOUD: SEVERE: [1492721660669000] javax.servlet.ServletContext log: unavailable
[INFO] GCLOUD: java.lang.ClassCastException: com.google.appengine.tools.development.devappserver2.DevAppServer2Delegate cannot be cast to com.google.appengine.tools.development.ApiProxyLocal
[INFO] GCLOUD: at com.google.apphosting.utils.servlet.DatastoreViewerServlet.init(DatastoreViewerServlet.java:124)
[INFO] GCLOUD: at javax.servlet.GenericServlet.init(GenericServlet.java:212)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
[INFO] GCLOUD: at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.appengine.tools.development.devappserver2.RequestIdFilter.doFilter(RequestIdFilter.java:36)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
[INFO] GCLOUD: at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
[INFO] GCLOUD: at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
[INFO] GCLOUD: at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:95)
[INFO] GCLOUD: at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[INFO] GCLOUD: at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:508)
[INFO] GCLOUD: at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[INFO] GCLOUD: at org.mortbay.jetty.Server.handle(Server.java:326)
[INFO] GCLOUD: at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
[INFO] GCLOUD: at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
[INFO] GCLOUD: at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
[INFO] GCLOUD: at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
[INFO] GCLOUD: at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
[INFO] GCLOUD: at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
[INFO] GCLOUD: at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
[INFO] GCLOUD: 
[INFO] GCLOUD: Apr 20, 2017 8:54:20 PM com.google.apphosting.utils.jetty.JettyLogger warn
[INFO] GCLOUD: WARNING: /_ah/admin
[INFO] GCLOUD: java.lang.ClassCastException: com.google.appengine.tools.development.devappserver2.DevAppServer2Delegate cannot be cast to com.google.appengine.tools.development.ApiProxyLocal
[INFO] GCLOUD: at com.google.apphosting.utils.servlet.DatastoreViewerServlet.init(DatastoreViewerServlet.java:124)
[INFO] GCLOUD: at javax.servlet.GenericServlet.init(GenericServlet.java:212)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
[INFO] GCLOUD: at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.appengine.tools.development.devappserver2.RequestIdFilter.doFilter(RequestIdFilter.java:36)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
[INFO] GCLOUD: at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
[INFO] GCLOUD: at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
[INFO] GCLOUD: at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
[INFO] GCLOUD: at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
[INFO] GCLOUD: at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:95)
[INFO] GCLOUD: at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[INFO] GCLOUD: at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:508)
[INFO] GCLOUD: at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[INFO] GCLOUD: at org.mortbay.jetty.Server.handle(Server.java:326)
[INFO] GCLOUD: at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
[INFO] GCLOUD: at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
[INFO] GCLOUD: at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
[INFO] GCLOUD: at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
[INFO] GCLOUD: at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
[INFO] GCLOUD: at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
[INFO] GCLOUD: at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
[INFO] GCLOUD: 
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 20, 2017, 5:03:48 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
Can you access the admin console under localhost:8000? I believe /_ah/admin is deprecated in the new dev server.

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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/6b764221-4ea9-4dcc-9b10-2d3abd28f91d%40googlegroups.com.

Patrick Farren

unread,
Apr 20, 2017, 5:17:41 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
port 8000 you get a 404

there are 2 displayed console messages starting the dev server

GCLOUD: INFO     2017-04-20 21:13:17,125 admin_server.py:116] Starting admin server at: http://localhost:8000

get 404 here

then a few messages later 
GCLOUD: INFO: The admin console is running at http://localhost:38912/_ah/admin

you get an exception here
[INFO] GCLOUD: Apr 20, 2017 9:14:12 PM com.google.apphosting.utils.jetty.JettyLogger warn
To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

D. T.

unread,
Apr 20, 2017, 5:21:10 PM4/20/17
to Patrick Farren, Google Cloud Endpoints

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endp...@googlegroups.com.

--
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.

--
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/3580eea7-48a4-4e71-a20e-68bd603f6aba%40googlegroups.com.

Patrick Farren

unread,
Apr 20, 2017, 5:23:09 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
Great news Daniel, deploying to production worked successfully and API's are available via the API explorer

mvn appengine:deploy

[INFO] GCLOUD: #============================================================#
[INFO] GCLOUD: #= Uploading 68 files to Google Cloud Storage               =#
[INFO] GCLOUD: #============================================================#
[INFO] GCLOUD: File upload done.
[INFO] GCLOUD: Updating service [default]...
[INFO] GCLOUD: .............................done.
[INFO] GCLOUD: Deployed service [default] to [https://pizza-demo-164814.appspot.com]
[INFO] GCLOUD: 
[INFO] GCLOUD: You can stream logs from the command line by running:
[INFO] GCLOUD:   $ gcloud app logs tail -s default
[INFO] GCLOUD: 
[INFO] GCLOUD: To view your application in the web browser run:
[INFO] GCLOUD:   $ gcloud app browse
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:39 min
[INFO] Finished at: 2017-04-20T22:05:18+01:00
[INFO] Final Memory: 22M/318M
[INFO] ------------------------------------------------------------------------

Patrick Farren

unread,
Apr 20, 2017, 5:25:28 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
Success here as well Daniel

To unsubscribe from this group and stop receiving emails from it, send an email to google-cloud-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

--
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-endpoints+unsub...@googlegroups.com.

Patrick Farren

unread,
Apr 20, 2017, 5:27:11 PM4/20/17
to Google Cloud Endpoints, patrick....@gmail.com
Daniel a very big thank you for all your help and timely replies. 

I would have been lost without your guidance.

Thanks again
Patrick

D. T.

unread,
Apr 20, 2017, 5:32:12 PM4/20/17
to Patrick Farren, Google Cloud Endpoints
I'm glad you were able to get things working! Looks like we have some holes in our documentation and we'll look for ways to improve them.

Daniel

--
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.
Reply all
Reply to author
Forward
0 new messages