【问题标题】:Endpoint Api Call Error after Endpoints Frameworks 2.0 MigrationEndpoints Frameworks 2.0 迁移后的 Endpoint Api 调用错误
【发布时间】:2017-08-19 19:55:10
【问题描述】:

Endpoints Frameworks 2.0 迁移后,Endpoint Api 调用未通过。

以下是堆栈跟踪:

Problem accessing /_ah/api/discovery/v1/apis/EndpointApp/v1/rest. Reason:
    com.google.api.server.spi.Strings.stripSlash(Ljava/lang/String;)Ljava/lang/String;

Caused by:

java.lang.NoSuchMethodError: com.google.api.server.spi.Strings.stripSlash(Ljava/lang/String;)Ljava/lang/String;
    at com.google.api.server.spi.EndpointsServlet.service(EndpointsServlet.java:68)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:58)
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)

浏览器会给出这样的错误消息API discovery response missing required fields.

我已按照getting started guide 中提供的详细信息更新了web.xml 文件。

希望有人能指出错误!

pom.xml文件:

<dependencies>
    <!-- Compile/runtime dependencies -->
    <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-framework</artifactId>
        <version>2.0.7</version>
    </dependency>

    <!-- Test Dependencies -->
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-testing</artifactId>
        <version>${appengine.sdk.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>


<profiles>
    <profile>
        <id>GetSwaggerDoc</id>
        <activation>
            <property>
                <name>GetSwaggerDoc</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.4.0</version>
                    <configuration>
                        <includePluginDependencies>true</includePluginDependencies>
                        <mainClass>com.google.api.server.spi.tools.EndpointsTool</mainClass>
                        <arguments>
                            <argument>get-swagger-doc</argument>
                            <argument>--hostname=echo-api.endpoints.${appengine.app.id}.cloud.goog</argument>
                            <argument>--war=target/${project.artifactId}-${project.version}</argument>
                            <argument>com.test.api.Endpoint</argument>
                        </arguments>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.google.endpoints</groupId>
                            <artifactId>endpoints-framework-tools</artifactId>
                            <version>2.0.7</version>
                        </dependency>
                        <dependency>
                            <groupId>com.google.appengine</groupId>
                            <artifactId>appengine-api-1.0-sdk</artifactId>
                            <version>${appengine.sdk.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

<build>
    <!-- for hot reload of the web application -->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
    <plugins>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>endpoints-framework-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <hostname>${appengine.app.id}.appspot.com</hostname>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <webXml>${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml</webXml>
                <webResources>
                    <resource>
                        <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                        <filtering>true</filtering>
                        <targetPath>WEB-INF</targetPath>
                    </resource>
                    <resource>
                        <!-- resources in src/main/resources, deployed to WEB-INF/res, not filtered -->
                        <directory>${basedir}/src/main/resources</directory>
                        <filtering>false</filtering>
                        <targetPath>WEB-INF/res</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>1.3.1</version>
            <configuration>
                <enableJarClasses>false</enableJarClasses>
                <cloudSdkPath>/Applications/google-cloud-sdk</cloudSdkPath>
                <port>8080</port>
            </configuration>
        </plugin>
    </plugins>
</build>

【问题讨论】:

    标签: java maven google-app-engine


    【解决方案1】:

    我遇到了同样的问题。结果是因为我是从 Eclipse 风格的项目迁移过来的,所以我有 WEB-INF/lib 文件夹中的旧 jars。 这些不是必需的,因为 gradle build 具有正确的依赖关系。 我删除了 WEB-INF/lib 文件夹并重新部署和 viola!

    【讨论】:

      【解决方案2】:

      我也有同样的问题。在我的情况下,不可能简单地摆脱整个 WEB-INF/lib 目录(很少有外部合作伙伴不公开他们的库)。

      这是我们必须做的:

      1. 从项目构建路径中删除 appengine-endpoints.jar
      2. 重新部署到 App Engine

      错误消失了,所有端点在测试后似乎都可以正常工作。享受吧!

      【讨论】:

      • 感谢您的更新。清除一组 appengine jar 库解决了错误。
      猜你喜欢
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2015-08-29
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      相关资源
      最近更新 更多