Во время моей первой стажировки по разработке программного обеспечения мне было поручено создать USSD-приложение. Поскольку приложения USSD неструктурированы, дизайн приложения определяется телекоммуникационной компанией, для которой создается приложение. API от телекоммуникационной компании указал, что данные будут передаваться в формате XML (Расширяемый язык разметки). Поэтому моей первой задачей было выяснить, как преобразовать XML в объекты Java, чтобы иметь возможность манипулировать им и добавлять логику в свой код.
Существуют различные java API для привязки XML; Простой API для XML (SAX), Объектная модель документа (DOM), JiBX и архитектура Java для привязки XML (JAXB).
Это управляемый событиями анализатор XML-файлов. Он считывает XML последовательно сверху вниз и отправляет уведомления приложению, элементу и атрибуту одновременно, пока корневой элемент не будет закрыт с помощью обратных вызовов. SAX обычно используется, когда XML-документ должен обрабатываться линейно и последовательно. Поскольку он обрабатывает XML-файлы только таким образом, к компонентам XML нельзя получить случайный доступ, и вам необходимо написать свой собственный код для обработки или отслеживания проанализированных данных. Подробнее о саксофоне читайте здесь
Это позволяет приложению легко получать доступ и изменять стиль, структуру и содержимое XML-файла. В основном он используется, когда информация в XML должна использоваться несколько раз. Анализ XML-файла с помощью DOM возвращает древовидную структуру с различными элементами XML, поэтому она отлично подходит для управления структурой документа. К счастью, в DOM доступно несколько функций, которые можно использовать для изменения содержимого и структуры документа. Подробнее о DOM читайте здесь
Согласно различным источникам, JiBX быстрее по сравнению с JAXB и подобными. JiBX также используется для привязки XML, но в отличие от JAXB, который фокусируется на генерации кода, JiBX фокусируется на отображении данных. Он использует документы определения привязки, чтобы определить, как XML следует преобразовывать в объекты Java и наоборот. Подробнее о JiBX читайте здесь
JAXB – очень популярный API в веб-сервисах. Многие люди утверждают, что это стандартный API среди двух API, рассмотренных выше. JAXB поставляется с Java 1.6, для версий Java ниже этой потребуется файл jar JAXB, который можно найти здесь . Я вполне согласен, потому что в отличие от SAX и DOM, которые являются API более низкого уровня, которые просто анализируют XML-документы, JAXB преобразует XML-элементы и атрибуты в объект Java и наоборот. Это подводит меня к моей главной мысли. В JAXB есть два полезных метода; Один используется для преобразования объектов Java в XML, а другой – для преобразования XML обратно в объекты Java.
По сути, преобразование объектов Java в XML называется сортировкой. Для маршаллинга XML должен быть POJO (Обычный старый объект Java). Этот объект Java предоставляет схему для формируемого XML-файла. Имя класса POJO становится корневым элементом XML. JAXB указывает элементы XML с помощью аннотаций.
@XmlRootElement(имя=”пространство имен”) @XmlRootElement(имя=”пространство имен”) – Используется для определения корневого элемента XML. Он используется в классе высшего уровня. Атрибут name является необязательным. Корневым элементом по умолчанию, который используется, является имя класса POJO.
@xmlатрибут – Это используется для определения атрибутов корневого элемента.
@XmlЭлемент – Это используется для определения свойств класса POJO, которые впоследствии станут подэлементами корневого элемента в дереве XML после сортировки.
Код для POJO
package com.jaxb; //import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="USSDMenuRequest") public class USSDMenuRequest{ private String sessionId; private String messageid; private String shortCode; private String prompt; private String timeStamp; @XmlElement(name="sessionId") public void setSessionId(String sessionId){ this.sessionId = sessionId; } public String getSessionId(){ return sessionId; } public String getMessageid(){ return messageid; } @XmlElement(name="messageid") public void setMessageid(String messageid){ this.messageid = messageid; } @XmlElement(name="shortCode") public void setShortCode(String shortCode){ this.shortCode = shortCode; } public String getShortCode(){ return shortCode; } @XmlElement(name="prompt") public void setPrompt(String prompt){ this.prompt = prompt; } public String getKeyWord(){ return keyWord; } public String getTimeStamp(){ return timeStamp; } }
Свойства класса POJO имеют методы получения и установки. Метод получения используется для доступа к значению, переданному подэлементу XML, в то время как методы установки используются для изменения существующих значений подэлементов XML. В приведенном выше POJO USSDDynMenuRequest будет корневым элементом XML-дерева с идентификатором сообщения, идентификатором сеанса и т. Д. В качестве подэлементов.
Код для сортировки
-------------------------- MARSHALLING XML ---------------------------------- public static void marshalXML() { try { System.out.println("Marshalling Java Object to XML-------"); //creating the JAXB context JAXBContext jContext = JAXBContext.newInstance(USSDMenuRequest.class); //create the marshaller object Marshaller marshallerObj = jContext.createMarshaller(); //the XML should be properly indented and formatted marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); USSDDynMenuRequest Sendrequest= new USSDMenuRequest(); Sendrequest.setShortCode("124"); Sendrequest.setPrompt("Start"); Sendrequest.setMessageid("0244708099"); Sendrequest.setSessionId("789888886adh"); //calling the marshall method marshallerObj.marshal(Sendrequest, new FileOutputStream("response.xml")); } catch(Exception e){ e.printStackTrace(); } }
В приведенном выше коде response.xml файл будет создан с использованием схемы, описанной в USSDDynMenuRequest.class . Значения подэлементов XML будут такими же, как и значения, предоставляемые методами-установщиками соответствующих свойств класса.
Демаршаллинг – это преобразование XML в объекты Java. Существуют различные способы, которыми это можно сделать. Самый простой способ, который практически не требует кода или вообще не требует его, – это использование онлайн-ресурса здесь . Все, что вам нужно сделать, это вставить свой XML-контент и ТА-ДА…. у тебя есть свой POJO. Одним из других многочисленных способов является использование объекта Unmarshaller класса JAXBContext.
//-------------------------- UNMARSHALLING XML ------------------------------- public static void unmarshalXML(File xmlFile) { try { System.out.println("Unmarshalling XML to Java Object-------"); //creating the JAXB context JAXBContext jContext = JAXBContext.newInstance(USSDMenuRequest.class); //create the unmarshal object Unmarshaller unmarshallerObj = jContext.createUnmarshaller(); //call the unmarshal method USSDMenuRequest request= (USSDMenuRequest) unmarshallerObj.unmarshal(xmlFile); request.setStarCode("124"); request.setKeyWord("Start"); System.out.println(request.getShortCode() + " " + request.getPrompt() ); } catch(Exception e){ e.printStackTrace(); } }
Пожалуйста, найдите полный код здесь
Надеюсь, вам понравилась эта статья. Это очень круто. Попробуй это сделать. Подписывайтесь на меня в Твиттере по адресу @благословенный хл
Оригинал: “https://dev.to/lormenyo/unmarshalling-the-marshalled-xml-binding-in-java-2do0”