Изучаем Java EE 7 - [196]
Метод writeStartObject() используется, чтобы начать новый контекст объекта-потомка, а метод writeStartArray() начинает новый контекст массива-потомка. Оба метода можно использовать только в контексте массива или если контекст еще не начался, и оба метода возможно вызвать, только когда контекста нет. Контекст начинается, когда вызван один из этих методов.
Класс JsonGenerator предоставляет и другие методы, такие как write(), чтобы записать пару «имя/значение» JSON в текущий контекст объекта или значение в текущий контекст массива.
Хотя метод flush() можно использовать для записи любых буферизованных выходных данных, метод close() закрывает генератор и освобождает все связанные с ним ресурсы.
Все вместе
Собрав все понятия этой главы, напишем POJO CreditCard с использованием JAXB и JSON-P, чтобы получить XML- и JSON-представление кредитной карты. Для проверки обоих форматов мы будем писать тесты. Класс CreditCardXMLTest выполняет маршалинг и демаршалинг объекта типа CreditCard, чтобы убедиться, что представление XML правильное. Класс CreditCardJSonTest проверяет, хорошо ли отформатирован также созданный JSON.
Написание класса CreditCard
Класс CreditCard в листинге 12.18 имеет JAXB-аннотацию @XmlRootElement, что позволяет выполнить его маршалинг в XML. Другая аннотация JAXB @XmlAccessorType с параметром XmlAccessType.FIELD указывает JAXB связывать атрибуты, а не геттеры.
>@XmlRootElement
>@XmlAccessorType(XmlAccessType.FIELD)
>public class CreditCard {
>··@XmlAttribute
>··private String number;
>··@XmlElement(name = "expiry_date")
>··private String expiryDate;
>··@XmlElement(name = "control_number")
>··private Integer controlNumber;
>··private String type;
>··//Конструкторы, методы работы со свойствами
>}
У объекта CreditCard есть такие базовые поля, как номер кредитной карты, дата истечения срока (в формате MM/YY), тип кредитной карты (Visa, Master Card, American Express и т. д.), а также контрольное число. Некоторые из этих атрибутов имеют аннотацию @XmlAttribute для преобразования в атрибут XML. Аннотация @XmlElement используется для замены имени элемента XML.
Написание теста CreditCardXMLTest
Класс CreditCardXMLTest, показанный в листинге 12.19, выполняет маршалинг и демаршалинг объекта типа CreditCard с использованием механизма маршалинга JAXB. Метод ShouldMarshallACreditCard создает экземпляр класса CreditCard и проверяет, имеет ли он правильное представление XML. Метод shouldUnmarshallACreditCard делает все наоборот — он выполняет демаршалинг XML-документа в объект типа CreditCard и убеждается, что значения объекта установлены правильно.
>public class CreditCardXMLTest {
>··public static final String creditCardXML =
>·········"\n" +
>·········"
>·········"
>·········"
>·········"
>·········"";
>··@Test
>··public void shouldMarshallACreditCard() throws JAXBException {
>····CreditCard creditCard = new CreditCard("123 45678", "10/14", 566, "Visa");
>····StringWriter writer = new StringWriter();
>····JAXBContext context = JAXBContext.newInstance(CreditCard.class);
>····Marshaller m = context.createMarshaller();
>····m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
>····m.marshal(creditCard, writer);
>····System.out.println(writer);
>····assertEquals(creditCardXML, writer.toString(). trim());
>··}
>··@Test
>··public void shouldUnmarshallACreditCard() throws JAXBException {
>····StringReader reader = new StringReader(creditCardXML);
>····JAXBContext context = JAXBContext.newInstance(CreditCard.class);
>····Unmarshaller u = context.createUnmarshaller();
>····CreditCard creditCard = (CreditCard) u.unmarshal(reader);
>····assertEquals("123 45678", creditCard.getNumber());
>····assertEquals("10/14", creditCard.getExpiryDate());
>····assertEquals((Object) 566, creditCard.getControlNumber());
>····assertEquals("Visa", creditCard.getType());
>··}
>}
Написание теста CreditCardJSonTest
Класс CreditCardJSonTest, показанный в листинге 12.20, использует API JsonGenerator для написания представления объекта CreditCard в JSON. Затем он проверяет, имеет ли JsonObject корректный синтаксис, сравнивая его с константой creditCardJSon.
>public class CreditCardJSonTest {
>··public static final String creditCardJSon =
>··········"{\"creditCard\":" +
>··················"{\"number\":\"123 45678\"," +
>··················"\"expiryDate\":\"10/14\"," +
>··················"\"controlNumber\":566," +
>··················"\"type\":\"Visa\"}" +
>··········"}";
>··@Test
>··public void shouldGenerateACreditCard(){
>····CreditCard creditCard = new CreditCard("123 45678", "10/14", 566, "Visa");
>····StringWriter writer = new StringWriter();
>····JsonGenerator generator = Json.createGenerator(writer);
>····generator.writeStartObject()
>·············.writeStartObject("creditCard")
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.