Как избежать «ServiceConfigException: версии не существуют!» ошибка при внедрении управления API с помощью Cloud Endpoints Frameworks?

Я создал тестовый API в новом проекте App Engine Standard на основе Maven, созданном в Eclipse. После добавления управления API и развертывания на рабочем сервере я получаю ответ 500 при попытке использовать API на портале конечных точек. В журналах ошибок на панели управления отображается следующее исключение:

endpoints.repackaged.com.google.api.config.ServiceConfigException: 
Failed to fetch default config version for service 'networking-1088.appspot.com'.
No versions exist!

Я проверил похожие вопросы, такие как этот один, но я использовал идентификатор проекта в качестве имени службы последовательно во всех файлах, не включал версию службы и использовал весь необходимый шаблонный код из документации.

Ниже приведены соответствующие фрагменты из моих файлов:

пом.xml

<properties>
    <appengine.maven.plugin.version>1.3.2</appengine.maven.plugin.version>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>

    <maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>

    <endpoints.project.id>networking-1088</endpoints.project.id>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-bom</artifactId>
            <version>0.80.0-alpha</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- Compile/runtime dependencies -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-framework</artifactId>
        <version>2.2.1</version>
    </dependency>
    <!-- [START api_management] -->
    <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-management-control-appengine-all</artifactId>
        <version>1.0.11</version>
    </dependency>
    <!-- [END api_management] -->
    <dependency>
        <groupId>com.googlecode.objectify</groupId>
        <artifactId>objectify</artifactId>
        <version>5.1.22</version>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>1.9.71</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>2.6</version>
            <configuration>
                <webResources>
                    <resources>
                        <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                        <filtering>true</filtering>
                        <targetPath>WEB-INF</targetPath>
                    </resources>
                </webResources>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>${appengine.maven.plugin.version}</version>
        </plugin>
        <!-- [START endpoints_plugin] -->
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>endpoints-framework-maven-plugin</artifactId>
            <version>1.0.2</version>
            <configuration>
                <!-- plugin configuration -->
                <hostname>${endpoints.project.id}.appspot.com</hostname>
            </configuration>
        </plugin>
        <!-- [END endpoints_plugin] -->
    </plugins>
</build>

веб.xml

<!-- 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.iitbaapune.app.RegistrantEndpoint</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>

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- [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] -->

appengine-web.xml

  <!-- [START env_variables] -->
<env-variables>
    <env-var name = "ENDPOINTS_SERVICE_NAME" value = "networking-1088.appspot.com" />
</env-variables>
<!-- [END env_variables] -->

Как избавиться от этой ошибки, сохранив при этом управление API?

Вы развернули конфигурацию службы с помощью gcloud endpoints services deploy?

Rose Davidson 12.02.2019 22:06

Спасибо за помощь в устранении неполадок, Роуз! Да, я развернул конфигурации службы. Я вижу следующие 4 развернутые конфигурации: 2019-02-12r3 networking-1088.appspot.com, 2019-02-12r2 networking-1088.appspot.com, 2019-02-12r1 networking-1088.appspot.com, 2019-02 -12r0 сеть-1088.appspot.com

Price 12.02.2019 22:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
263
1

Ответы 1

Для чего это стоит, у меня была такая же проблема. Раскомментировав фильтр endpoints-api-configuration, ошибка исчезла, но я остался без поддержки аутентификации.

В конце концов, перестраивая весь проект из примера, предоставленного здесь, я заметил, что GOOGLE_APPLICATION_CREDENTIALS был причиной моего com.google.api.control.ConfigFilter doFilter: Rejecting this API request due to config loading error..

 <env-variables>
   <env-var name = "ENDPOINTS_SERVICE_NAME" value = "${endpoints.project.id}.appspot.com" />
   <env-var name = "GOOGLE_APPLICATION_CREDENTIALS" value = "WEB-INF/myproject-firebase-adminsdk-xyz.json" />
 </env-variables>

Отсутствие строки GOOGLE_APPLICATION_CREDENTIALS привело к исчезновению ошибки в моем случае...

Другие вопросы по теме