Написание и внесение вклада в спецификацию — это одно. Работа с ним и изучение реальных примеров являются предварительным условием, если вы хотите дать ценную обратную связь. Последние продвинутые сборки 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 .