Рубрики
Без рубрики

Отмена маршалирования ПРИВЯЗКИ Marshalled: XML В JAVA

Во время моей первой стажировки по разработке программного обеспечения мне было поручено создать USSD-приложение. Начиная с USSD… Помеченный java, jaxb, xml.

Во время моей первой стажировки по разработке программного обеспечения мне было поручено создать 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”