Создание конечных точек Google Cloud для клиента Java
Не так много написано об использовании конечных точек Google Cloud из Java-клиента. Есть намеки на то, что это можно сделать в различных документах, но очень мало об этом написано. Я смог заставить его работать, но есть несколько вопросов.
Первый вопрос: есть ли документация или пример о том, как использовать Google Cloud Endpoint из клиента Java?
Я использую GPE для создания клиентской библиотеки конечных точек. Результатом является создание каталога endpoint-libs с кучей вещей. В документации сказано: "Сгенерированную библиотеку для конкретной службы можно найти в каталоге верхнего уровня zip-файла: google-api-services-mayapp-v1-rev20140417180959-1.16.0-rc.jar". В моей версии GPE (3.5.1) такой файл JAR не создан.
В этом видео примера tic-tac-toe (перейдите к отметке 23 мин) показаны некоторые исходные файлы, скопированные из каталога endpoint-libs в клиентское приложение Android.
https://www.youtube.com/watch?v=NU_wNR_UUn4
Второй вопрос: является ли документация неправильной относительно создания вышеупомянутого файла JAR? Есть ли документация о сгенерированных исходных файлах и как их использовать? Возможно, есть некоторая документация по созданию приложения для Android, но я не знаю Android. В любом случае, я перебрал часть кода клиента Android.
Видео продолжает показывать "служебный" объект, используемый для ссылки на конечные точки. Я адаптировал код для работы с клиентом Java.
MyApp.Builder builder = new MyApp.Builder( new NetHttpTransport(), new GsonFactory(), null );
service = builder.build();
Method1 method1 = service.getEndpointMethod1();
method1.execute();
Пример Android использует AndroidHttp.newCompatibleTransport() для создания HttpTransport в качестве первого аргумента MyApp.Builder();
Третий вопрос: подходит ли метод, который я использовал для создания HttpTransport для клиента Java?
Четвертый вопрос: какая часть документации по клиенту Android применима к использованию конечной точки из клиента Java - поскольку они оба являются клиентами Java? Что не подойдет?
1 ответ
(OP: см. "Без Maven" ниже, так как вы говорите, что не используете Maven)
С мавеном
Проект My Cloud Endpoints pom.xml включает конфигурацию плагина:
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>${appengine.version}</version>
<configuration>
<enableJarClasses>false</enableJarClasses>
<version>${app.version}</version>
</configuration>
<executions>
<execution>
<goals>
<!-- Generates the discovery document and client library
during the compile phase. -->
<goal>endpoints_get_discovery_doc</goal>
<goal>endpoints_get_client_lib</goal>
</goals>
</execution>
</executions>
</plugin>
Обратите внимание <goal>endpoints_get_client_lib</goal>
запись, которая не была включена в оригинальный скелет, и является важной частью здесь.
Для меня это производит и устанавливает банку с именем {myApiName}-v1-1.21.0-SNAPSHOT.jar
, См. "Результаты" ниже для того, что я вижу в.jar.
Без мавена
Под капотом Maven, похоже, использует один из механизмов, на которые указал alex@, endpoints.sh
( документы). Когда я запускаю "mvn install" в моем модуле "Конечные точки", я вижу сообщение
Executing endpoints Command=[get-client-lib,
-cp, {lots of .jar files}, -o, {path to output WEB-INF dir},
-w, {path to generated file working dir?}, -l, java,
-bs, maven, com.example.MyApi]
Я предполагаю, что это список аргументов, которые он передает endpoints.sh
хотя я не проверял.
Результаты
Получившийся файл.jar выглядит следующим образом: клиентский класс MyApiName верхнего уровня, некоторые вспомогательные классы и классы моделей, сгенерированные из документа обнаружения:
META-INF/MANIFEST.MF
META-INF/maven/com.example/myApiName/pom.properties
META-INF/maven/com.example/myApiName/pom.xml
com/example/myApiName/MyApi$AddBatch.class
com/example/myApiName/MyApi$Builder.class
com/example/myApiName/MyApi.class
com/example/myApiName/MyApiRequest.class
com/example/myApiName/MyApiRequestInitializer.class
com/example/myApiName/MyApiScopes.class
com/example/myApiName/model/Thing.class
com/example/myApiName/model/OtherThing.class