0

I am trying to create openapi.json file through maven command by following GCP open api guide.

enter image description here

This is my TestApi class. (kotlin)

@Api(name = "echo1", version = "v1")
class TestApi {

    @ApiMethod(name = "echo1")
    fun echo(message: Message, @Named("n") @Nullable n: Int): Message {
        @Suppress("USELESS_ELVIS")
        return doEcho(message, n ?: 1)
    }

    private fun doEcho(request: Message, @Nullable n: Int): Message {
        val response = Message()
        val sb = StringBuilder()
        for (i in 0 until n) {
            if (i > 0) {
                sb.append(' ')
            }
            sb.append(request.message)
        }
        response.message = sb.toString()
        return response
    }
}

However, when I run the mvn endpoints-framework:openApiDocs command, the TestApi class cannot be found and a build error occurs.

Caused by: java.lang.ClassNotFoundException: com.example.skeleton.TestApi
at java.net.URLClassLoader.findClass (URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass (ClassLoader.java:424)
at java.lang.ClassLoader.loadClass (ClassLoader.java:357)
at com.google.api.server.spi.tools.GetOpenApiDocAction.loadClasses (GetOpenApiDocAction.java:139)
at com.google.api.server.spi.tools.GetOpenApiDocAction.genOpenApiDoc (GetOpenApiDocAction.java:111)
at com.google.api.server.spi.tools.GetOpenApiDocAction.execute (GetOpenApiDocAction.java:82)
at com.google.api.server.spi.tools.EndpointsTool.execute (EndpointsTool.java:84)
at com.google.cloud.tools.maven.endpoints.framework.OpenApiDocsMojo.execute (OpenApiDocsMojo.java:95)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:972)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">
<!-- Wrap the backend with Endpoints Frameworks v2. -->
<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.example.skeleton.TestApi</param-value>
    </init-param>
</servlet>
<!-- Route API method requests to the backend. -->
<servlet-mapping>
    <servlet-name>EndpointsServlet</servlet-name>
    <url-pattern>/_ah/api/*</url-pattern>
</servlet-mapping>

<!-- [START api_management] -->
<!-- Add a filter that fetches the service config from service management. -->
<filter>
    <filter-name>endpoints-api-configuration</filter-name>
    <filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class>
</filter>

<!-- Add a filter that performs Endpoints logging and monitoring. -->
<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>${endpoints.project.id}</param-value>
    </init-param>
    <init-param>
        <param-name>endpoints.serviceName</param-name>
        <param-value>${endpoints.project.id}.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>
<!-- [END api_management] -->

I am wondering how can I develop cloud endpoint in kotlin language in maven environment.

pistolcaffe
  • 849
  • 1
  • 8
  • 15
  • Have you been able to arrive to step https://cloud.google.com/endpoints/docs/frameworks/java/get-started-frameworks-java#generating_the_openapi_configuration_file by just using the sample files provided in the tutorial? – Javier A Sep 14 '21 at 07:59
  • Yes. I succeeded in deploying the example code in java, but in kotlin language, a compilation error occurs when executing the mvn endpoints-framework:openApiDocs command. – pistolcaffe Sep 15 '21 at 02:57
  • Does this help https://stackoverflow.com/questions/62270593/classnotfoundexception-when-running-mvn-endpoints-frameworkopenapidocs? – Javier A Sep 21 '21 at 13:45

0 Answers0