- аккаунт Google AppEngine
- Затмение Галилео (3.5.x)
-
Google App Engine SDK для Java
- Реализация JAX-RS Reference, убедитесь, что вы взяли релиз Jersey 1.1.5. Вы можете скачать его здесь .
- Распакуйте файл в каталог, который мы будем называть $ JERSEY_HOME
- Реализация JAXB 2.2 для упрощения маршалинга / демаршаллинга XML, а также для облегчения поддержки JSON. Загрузите его отсюда
- Установите его с помощью команды ja -jar JAXB2_20091104.jar. Каталог установки JAXB будет называться $ JAXB_HOME
Создание нового приложения
Чтобы создать новый проект App Engine в Eclipse:
- Нажмите на кнопку «Новый проект веб-приложения» на панели инструментов. Это также можно сделать с помощью меню Файл> Проект веб-приложения.
- Откроется мастер «Создание проекта веб-приложения»:
- Название проекта: EmployeeService
- Пакет: com.grallandco.employee.service
- Снимите флажок «Использовать Google Web Toolkit»
- Убедитесь, что используемая вами версия SDK — «App Engine 1.3.0»; если не настроить проект для его использования.
- Экран должен выглядеть следующим образом:
- Нажмите Готово
- Проект должен выглядеть следующим образом:
Запуск приложения
App Egine SDK, установленный с плагином Eclipse, содержит веб-сервер (на базе Jetty), который можно использовать для тестирования и отладки. Чтобы проверить правильность создания приложения, выберите меню «Выполнить»> «Запуск от имени»> «Веб-приложение». Я лично большую часть времени запускаю свой сервер, используя команду отладки Run> DebugAs> Web Application. В режиме отладки вы можете изменить исходный код и выполнить тестирование без перезагрузки сервера.
Веб-сервер запускается автоматически, вы должны увидеть следующее сообщение в консоли Eclipse
Сервер работает по адресу http: // localhost: 8080 /
Вы можете получить доступ к приложению и образцу сервлета, который был создан с помощью URL: http: // localhost: 8080 / employeeservice
Чтобы остановить сервер, нажмите кнопку завершения в консоли Eclipse.
Настройка поддержки REST в приложении
Чтобы иметь возможность создавать и запускать службы REST в вашем приложении, вам необходимо:
- Добавьте JAX-RS, JAXB Jars в свой проект и приложение
- Настройте веб-приложение (web.xml) для обработки запросов REST.
Добавьте JAX-RS, JAXB в ваш проект
- Щелкните правой кнопкой мыши по проекту и выберите пункт меню Build Path> Configure Build Path…
- Нажмите на кнопку Добавить внешние JAR-файлы.
- Выберите все файлы JAR, расположенные в папках $ JERSEY_HOME / lib и $ JAXB_HOME / lib. Вы можете для большей наглядности и повторного использования создать пользовательскую библиотеку со всеми этими JAR-файлами.
- Вам также необходимо скопировать JAR-файлы в каталог web-inf / lib вашего приложения, этот шаг является обязательным, чтобы убедиться, что JAR-файлы включены в приложение при развертывании в App Engine.
Примечание: мне не нравится этот шаг. Я бы предпочел сделать это путем настройки пути сборки, чтобы автоматически добавлять JAR-файлы в каталог WEB-INF / lib при выполнении / развертывании приложения. К сожалению, я не нашел способа сделать это, поэтому, если вы знаете это, не стесняйтесь оставлять комментарии, и я буду обновлять статью.
Настройте веб-приложение
На этом этапе вы зарегистрируете новый URI для обработки запросов REST. Для этого вам нужно зарегистрировать новый сервлет, использующий API-интерфейс Jersey, и настроить его для определенного URI (например, / ressources и / или / rest) и настроить пакеты Java, содержащие классы реализации REST. Поэтому вам нужно изменить web.xml вашего приложения следующими записями:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
< servlet > < servlet-name >Jersey Web Application</ servlet-name > < servlet-class >com.sun.jersey.spi.container.servlet.ServletContainer</ servlet-class > < init-param > < param-name >com.sun.jersey.config.property.packages</ param-name > < param-value >com.grallandco.employee.service.rest.impl</ param-value > </ init-param > < load-on-startup >1</ load-on-startup > </ servlet > < servlet-mapping > < servlet-name >Jersey Web Application</ servlet-name > < url-pattern >/resources/*</ url-pattern > </ servlet-mapping > < servlet-mapping > < servlet-name >Jersey Web Application</ servlet-name > < url-pattern >/rest/*</ url-pattern > </ servlet-mapping > |
Создание простого сервиса REST для тестирования среды
Теперь проект готов содержать сервис REST. Пришло время создать один. Создайте, например, класс com.grallandco.employee.service.rest.impl.HelloWorldResource, обязательно используйте имя пакета, которое вы настроили в web.xml для сервлета Джерси, на основе Конфигурация, которую мы сделали на предыдущем шаге, это пакет com.grallandco.employee.service.rest.impl
Вот пример класса с аннотациями JAX-RS:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
package com.grallandco.employee.service.rest.impl; import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.Produces; @Path ( "/hr/" ) public class EmployeeResource { @GET @Produces ( "text/plain" ) @Path ( "/employee" ) public String getEmployee() { return "Hello World!" ; } } |
Вы должны быть в состоянии проверить его, остановить сервер и запустить его снова, введите следующий URL в вашем браузере:
HTTP: // локальный: 8080 / ресурсы / час / чел
или же
HTTP: // локальный: 8080 / отдых / час / чел
Развертывание приложения в Google App Engine
Перед развертыванием приложения необходимо зарегистрировать новое приложение в Google App Engine с помощью консоли администрирования, см. Документацию здесь . В моем примере я использовал «tugdual» в качестве идентификатора приложения.
Теперь вы можете легко развернуть приложение в Google App Engine, нажав кнопку «Развернуть проект App Engine», доступную на панели инструментов Eclipse.
Чтобы иметь возможность развернуть ваше приложение в Google App Engine, вам необходимо убедиться, что ваше приложение может быть зарегистрировано, идентификатор приложения хранится в файле WEB-INF / lib / appengine-web.xml.
1
2
3
4
5
6
7
8
9
|
<? xml version = "1.0" encoding = "utf-8" ?> < application >[your-application-id]</ application > < version >1</ version > <!-- Configure java.util.logging --> < system-properties > < property name = "java.util.logging.config.file" value = "WEB-INF/logging.properties" /> </ system-properties > </ appengine-web-app > |
Кнопка развертывания App Engine запрашивает несколько сведений: имя пользователя (ваша учетная запись Google) и пароль.
После завершения развертывания вы можете получить доступ к своему приложению, используя следующий URL:
Http: // [вашего-приложения] .appspot.com / ресурсы / час / чел
или же
Http: // [вашего-приложения] .appspot.com / отдых / час / чел
Добавление поддержки XML и JSON в сервис
Давайте теперь добавим новый метод для управления объектом «Сотрудник» с помощью сервиса, и формат данных должен быть основан на JSON и XML. Вот где JAXB полезен, так как он позволяет легко преобразовывать маршалловые / демаршалловые Java-объекты в XML — очевидно — и JSON (круто не так!)
Создание класса сотрудника
Начнем с создания нового класса для манипулирования данными Employee, это очень простой Java-класс, который может выглядеть следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package com.grallandco.employee.service.model; import java.util.Date; public class Employee { private String firstName; private String lastName; private Date hireDate; private String email; public Employee(String firstName, String lastName, Date hireDate, String email) { this .firstName = firstName; this .lastName = lastName; this .hireDate = hireDate; this .email = email; } public Employee() {} public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this .firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this .lastName = lastName; } public Date getHireDate() { return hireDate; } public void setHireDate(Date hireDate) { this .hireDate = hireDate; } public String getEmail() { return email; } public void setEmail(String email) { this .email = email; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append( "First: " ).append(getFirstName()); sb.append( " - Last: " ).append(getLastName()); sb.append( " - Date: " ).append(getHireDate()); sb.append( " - Email: " ).append(getEmail()); return sb.toString(); } } |
При реализации вашего «реального» приложения с некоторым уровнем персистентности этот POJO является тем же объектом, что и JDO / JPA.
Создайте класс Converter для вашей сущности
Я обычно инкапсулирую все преобразования в некотором классе преобразователя, например, я напрямую не связываю свой бизнес-класс с механизмом сериализации. (Так что я делаю это для классов и списков классов). Поэтому вместо добавления аннотаций JAXB к самому классу Employee давайте создадим класс EmployeeConverter, который будет отвечать за преобразование и использоваться вашим REST-сервисом.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package com.grallandco.employee.service.converter; import java.util.Date; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import com.grallandco.employee.service.model.Employee; @XmlRootElement (name = "employee" ) public class EmployeeConverter { private Employee entity = null ; public EmployeeConverter() { entity = new Employee(); } public EmployeeConverter(Employee entity) { this .entity = entity; } @XmlElement public String getFirstName() { return entity.getFirstName(); } @XmlElement public String getLastName() { return entity.getLastName(); } @XmlElement public Date getHireDate() { return entity.getHireDate(); } @XmlElement public String getEmail() { return entity.getEmail(); } public Employee getEmployee() { return entity; } public void setFirstName(String firstName) { entity.setFirstName(firstName); } public void setHireDate(Date hireDate) { entity.setHireDate(hireDate); } public void setLastName(String email) { entity.setEmail(email); } public void setEmail(String lastName) { entity.setLastName(lastName); } } |
Теперь вы можете обновить свой сервис, чтобы использовать этот класс утилиты / конвертера для возврата объекта XML или JSON в зависимости от типа содержимого запроса.
Добавьте поддержку JSON и XML в службу REST
Вам нужно изменить класс EmployeeRessource, изменить подпись и добавить новые аннотации метода getEmployee ().
Добавляемая вами аннотация:
- @Produces ({«application / xml», «application / json»}): указывает, какой тип контента будет создаваться службой. На основании типа запроса.
- @Path («/ employee / {employeeEmail} /»): измените Path, чтобы указать параметр Path, здесь, например, URL-адрес может принимать электронную почту в URI — не лучший пример, но вы получите точку…
- public EmployeeConverter getEmployee (@PathParam («employeeEmail») String email): измените тип, возвращаемый методом, и получите в качестве String параметр, который соответствует параметру Path, определенному в аннотации @Path
Вот полный код класса:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package com.grallandco.employee.service.rest.impl; import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import com.grallandco.employee.service.converter.EmployeeConverter; import com.grallandco.employee.service.model.Employee; @Path ( "/hr/" ) public class EmployeeRessource { @GET @Produces ({ "application/xml" , "application/json" }) @Path ( "/employee/{employeeEmail}/" ) public EmployeeConverter getEmployee( @PathParam ( "employeeEmail" ) String email) { //dummy code Employee emp = new Employee(); emp.setEmail(email); emp.setFirstName( "John" ); emp.setLastName( "Doe" ); EmployeeConverter converter = new EmployeeConverter(emp); return converter; } } |
Протестируйте сервис
Теперь вы можете запустить сервер локально и протестировать сервис
HTTP: // локальный: 8080/resources/hr/employee/[email protected]
Это вернет XML-документ.
Если вы хотите проверить вызов JSON, у вас есть несколько вариантов:
- Используя следующую команду
1
2
|
tgrall$ curl -H "Accept: application/json" http: //localhost :8080 /resources/hr/employee/tug @grallandco.com |
- Используя HTTP-клиент, который позволяет вам полностью настроить / настроить HTTP-запрос, я использую Плакат Firefox Plugin
- Использование некоторого кода Javascript в приложении
Вы можете повторить тест вашего развернутого приложения в Google App Engine.
Вывод
Из этой статьи вы узнали, как создать и развернуть новую службу REST в Google App Engine. Этот сервис был создан с помощью Реализованной реализации JAX-RS проекта Джерси. В следующей статье вы узнаете, как добавить постоянство и создать службу CRUD Rest в Google App Engine.
Ссылка: Создайте и разверните службу JAX-RS REST на Google App Engine от нашего партнера по JCG Тугдуала Гралла в блоге Tug’s Blog .