Написание и внесение вклада в спецификацию — это одно. Работа с ним и изучение реальных примеров являются предварительным условием, если вы хотите дать ценную обратную связь. Последние продвинутые сборки GlassFish содержат переименование в 4.0, и я подумал, что сейчас самое время дать Java API для обработки JSON (JSON-P) тест-драйв.
Получить Java EE 7 с включенным GlassFish 4.0
Первое, что нужно сделать, — это получить копию последней версии GlassFish 4.0 с поддержкой Java EE 7 из продвинутых сборок. Я использую GlassFish Server Open Source Edition 4.0 ( сборка 77 ), которая выглядит достаточно стабильной. Но в целом, если вы пытаетесь это сделать, имейте в виду, что продвигаемые сборки являются в основном разработкой и нестабильной версией
текущая работа для GlassFish 4.0. Не было бы большого смысла жаловаться на них. Разархивируйте загрузку в подходящее место. Для более позднего шага вам нужно обновить JSON-P RI в каталоге модулей. Следите за блогом Аруна о том, как получить и построить RI -файл JSON-P, и скопируйте jsonp ~ git \ impl \ target \ javax.json-1.0-SNAPSHOT.jar в glassfish4 \ glassfish \ modules \ javax.json.jar. Обязательно сделайте копию оригинала, если на этом этапе вы что-то не так сделали. Если вам это неудобно, вы также можете пропустить это и выбрать другую зависимость позже … Дело в том, что API JSON-P сильно изменился за последние несколько месяцев, что GlassFish, включенный в b02, больше не подходит для покажу тебе что-нибудь. Итак, на данный момент, мы должны немного подправить его. После этого вы можете интегрировать новую версию GlassFish в вашу любимую среду IDE, которая может быть NetBeans .
Создать новый Java EE 7 Projekt
Архетип Java EE 7 находится в репозитории моментальных снимков codehaus.org. Чтобы эффективно использовать его через NetBeans, необходимо настроить хранилище на вкладке «Службы» в разделе «Репозитории Maven». URL-адрес хранилища: https://nexus.codehaus.org/content/repositories/snapshots/. Обработка индекса может занять некоторое время. После этого перейдите к мастеру «Новый проект> Maven> Проект из архетипа» и введите «webapp-javaee7» в поле поиска. Выберите 0.1-SNAPSHOT и нажмите «Готово». В качестве альтернативы вы всегда можете использовать следующую командную строку:
1
|
mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee7 -DarchetypeVersion=0.1-SNAPSHOT -DarchetypeRepository=https: //nexus .codehaus.org /content/repositories/snapshots/ -DgroupId=net.eisele.sample -DartifactId=javaee7-jsonp -Dversion=1.0-SNAPSHOT -Dpackage=net.eisele.javaee7jsonp -Darchetype.interactive= false --batch-mode --update-snapshots archetype:generate |
Теперь откройте проект и отредактируйте файл pom.xml. Измените область действия javaee-web-api на предоставленную и добавьте зависимость json-api, как показано ниже:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
< dependencies > < dependency > < groupId >javax.json</ groupId > < artifactId >javax.json-api</ artifactId > < version >1.0-SNAPSHOT</ version > < scope >provided</ scope > </ dependency > < dependency > < groupId >javax</ groupId > < artifactId >javaee-web-api</ artifactId > < version >7.0-b72</ version > < scope >provided</ scope > </ dependency > </ dependencies > |
Обязательно используйте версию 1.0-SNAPSHOT и _не_ официально документированный 1.0-b02 . Мы хотим использовать последний снимок, который мы создали в первом абзаце, со всеми новыми API. Если вы решили не делать «свой собственный путь», вы можете просто использовать 1.0-b04 от maven central. Это тоже работает. Пожалуйста, убедитесь, что у вас именно такой порядок зависимостей. Если нет, вы будете использовать старый b02, который включен в зависимость javaee-web-api. Кто-то сказал, Maven легко? Это все на данный момент. Давайте создадим простую конечную точку JAX-RS.
Добавление ресурса JAX-RS Person
Первое, что нужно сделать, это написать базовый ресурс JAX-RS. Это можно сделать с помощью мастера «RESTful Web Services from Pattern» NetBeans или самостоятельно, просто выделив краткий класс, как показано ниже:
01
02
03
04
05
06
07
08
09
10
|
@Path ( 'person' ) public class PersonResource { public PersonResource() { } @GET @Produces ( 'application/json' ) public String getJson() { return '[]' ; } |
Этот класс должен быть зарегистрирован. Вы можете использовать механизм сервлетов Jerseys для этого или зарегистрировать его самостоятельно с помощью ApplicationConfig для конкретного приложения:
01
02
03
04
05
06
07
08
09
10
|
@javax .ws.rs.ApplicationPath( 'webresources' ) public class ApplicationConfig extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> resources = new java.util.HashSet<>(); resources.add(net.eisele.javaee7jsonp.PersonResource. class ); return resources; } } |
Вау .. это должно быть все на данный момент. Вы должны дать ему тест-драйв. Разверните его в своем домене и попробуйте http: // localhost: 8080 / javaee7-jsonp / webresources / person. Следует просто напечатать пустые скобки []. Теперь пришло время добавить JSON-P в микс.
Создание объектов JSON с помощью JSON-P
Мы собираемся создать JSON-представление человека с помощью API на основе DOM. Замените оператор возврата в PersonResource следующим кодом:
01
02
03
04
05
06
07
08
09
10
|
JsonObjectBuilder builder = Json.createObjectBuilder(); builder.add( 'person' , Json.createObjectBuilder() .add( 'firstName' , 'Markus' ) .add( 'lastName' , 'Eisele' )); JsonObject result = builder.build(); StringWriter sw = new StringWriter(); try (JsonWriter writer = Json.createWriter(sw)) { writer.writeObject(result); } return sw.toString(); |
А теперь давайте воспользуемся моим самым любимым расширением Chrome, чтобы посмотреть, что у нас есть:
Это очевидно работает. Если повернуть это в обратную сторону, это будет означать чтение входящего JSON. Это может выглядеть следующим образом:
1
2
3
4
5
6
7
8
9
|
String json = '{\n' + ' \'person\': {\n' + ' \'firstName\': \'Markus\',\n' + ' \'lastName\': \'Eisele\'\n' + ' }\n' + '}' ; JsonReader jr = Json.createReader( new StringReader(json)); JsonValue value = jr.readObject(); jr.close(); |
Помимо DOM-API у вас также есть Streaming-API, который использует
1
2
3
|
JsonGenerator generator = Json.createGenerator( new FileWriter(..)) JsonParser parser = Json.createParser( new StringReader(...)); |
генерировать и анализировать JSON. Взгляните на последний JavaDoc для полной справки. Пройдите тест-драйв самостоятельно.
Ссылка: тестирование Java API для обработки JSON с помощью GlassFish 4.0 от нашего партнера по JCG Маркуса Эйзела (Markus Eisele) из блога Enterprise Software Development с Java .