Статьи

Тестирование Java API для обработки JSON с GlassFish 4.0

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