Классы конечных точек не обнаружены. при попытке построить проект Google Cloud Endpoints

Я следую руководству по началу работы для конечных точек Google Cloud на Java с использованием Maven, и я не могу получить доступ к своим конечным точкам с помощью API Explorer.

По большей части я следовал руководству, хотя немного добавил структуру в свой проект. Пакет моего корневого проекта — com.ryanharter.devinfo, а мои конечные точки — в пакете com.ryanharter.devinfo.spi, а классы моей модели — в com.ryanharter.devinfo.beans (это смоделировано после Mobile Backend Starter).

Я написал свой класс Endpoints и аннотировал его так:

@Api(name = "deviceinfo", 
     version = "v1",
     namespace = @ApiNamespace(
        ownerDomain = "ryanharter.com",
        ownerName = "ryanharter.com", 
        packagePath = "devinfo")
     )
public class DeviceInfoV1 {

    @ApiMethod(name = "list", path = "devices", httpMethod = HttpMethod.GET)
    public DeviceListDto list(QueryDto query) {
        ...
    }

    ...

}

Все это выглядит нормально и соответствует другим рабочим проектам, которые у меня есть, но когда я запускаю сервер разработки, я получаю пустой экран.

Я также заметил, что мой журнал maven показывает это:

[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ devinfo ---
[INFO] Compiling 8 source files to /path/to/devinfo/target/classes
[INFO] 
[INFO] --- appengine-maven-plugin:1.8.7:endpoints_get_discovery_doc (default) @ devinfo ---
[INFO] 
[INFO] Google App Engine Java SDK - get endpoints discovery doc...
[INFO] No Endpoints classes detected.

Я вижу, что "классы конечных точек не обнаружены". Я также заметил, что /path/to/devinfo/target/classes пусто.

Насколько я могу судить, помимо структуры пакета и содержимого класса, я следовал руководству, указанному выше в письме.

ИЗМЕНИТЬ:

В ответ Дэну вот содержимое моего файла web.xml:

<?xml version="1.0" encoding="utf-8"?>
<web-app
        version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

</web-app>

Согласно документации, указанной выше, я не касался этого. Это как раз то, что сгенерировал архетип Maven. Я видел в Интернете отчеты о необходимости вручную сопоставлять мои конечные точки в web.xml, но документ ничего не говорит об этом, поэтому я предположил, что цель maven позаботится об этом для меня.


person rharter    schedule 14.11.2013    source источник
comment
Можете ли вы поделиться содержимым вашего файла web.xml?   -  person Dan Holevoet    schedule 14.11.2013
comment
Спасибо @DanHolevoet, я отредактировал вопрос, включив в него содержимое файла web.xml.   -  person rharter    schedule 15.11.2013


Ответы (2)


Попробуйте запустить: mvn appengine:endpoints_get_client_lib

Кроме того, я не знаю, используете ли вы плагин Google для eclipse. мой автоматически обновляет файл web.xml, чтобы он содержал мои классы контроллеров для конечных точек. Конечные точки моего проекта выглядят примерно так:

<servlet>
    <servlet-name>SystemServiceServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>package.endpointsController,package.anotherTestcontroller</param-value>
        </init-param>
</servlet>
    <servlet-mapping>
        <servlet-name>SystemServiceServlet</servlet-name>
        <url-pattern>/_ah/spi/*</url-pattern>
    </servlet-mapping>
person Dries De Rydt    schedule 21.12.2015

Я не верю, что Maven справится с отображением в web.xml, извините за это.

Можете ли вы попробовать что-то вроде:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>SystemServiceServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>com.google.devrel.samples.helloendpoints.Greetings,com.google.devrel.samples.helloendpoints.FooBar</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>SystemServiceServlet</servlet-name>
        <url-pattern>/_ah/spi/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

Используйте свои собственные классы вместо com.google.devrel.samples.helloendpoints.Greetings и com.google.devrel.samples.helloendpoints.FooBar в файле.

Это зарегистрирует ваши классы API в сервлете, который обрабатывает входящие запросы.

person Dan Holevoet    schedule 20.11.2013
comment
Я пробовал это, но не получил никаких изменений в выводе maven, по-прежнему нет клиентских библиотек. - person rharter; 05.01.2014
comment
Я понял это. Я запускал mvn clean appengine:endpoints_generate_client_lib, но цель appengine:endpoints_generate_client_lib зависит от компиляции, но нигде об этом не говорится. Поэтому, когда я запускаю mvn clean package appengine:endpoints_generate_client_lib, все работает нормально (за исключением того, что он помещает библиотеки в мой текущий каталог, а не в целевой каталог). - person rharter; 05.01.2014