Как написать класс pojo для этого XML с помощью JAXB?

#jaxb

#джаксб

Вопрос:

Пожалуйста, кто-нибудь мне поможет. Как написать класс Pojo для этого xml с помощью аннотаций JAXB. Ниже приведен пример кода:

 `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <ERRORFILE xmlns="http://www.corelogic.com/fps/Returned_error">
    <ERROR_LIST listCount="2">
       <ERROR>
            <ERROR_CODE>11</ERROR_CODE>
            <ERROR_MSG>sad</ERROR_MSG>
            <ACTUAL_HEADER_COUNT>2</ACTUAL_HEADER_COUNT>
            <EXPECTED_HEADER_COUNT>3</EXPECTED_HEADER_COUNT>
            <REC_NUMBERS totalCount="3">
                <REC_NUMBER>4</REC_NUMBER>
                <REC_NUMBER>5</REC_NUMBER>
                <REC_NUMBER>6</REC_NUMBER>
            </REC_NUMBERS>
        </ERROR>
        <ERROR>
            <ERROR_CODE>22</ERROR_CODE>
            <ERROR_MSG>bad</ERROR_MSG>
            <ACTUAL_HEADER_COUNT>4</ACTUAL_HEADER_COUNT>
            <EXPECTED_HEADER_COUNT>3</EXPECTED_HEADER_COUNT>
            <REC_NUMBERS totalCount="2">
                <REC_NUMBER>4</REC_NUMBER>
                <REC_NUMBER>5</REC_NUMBER>
            </REC_NUMBERS>
        </ERROR>
    </ERROR_LIST>
</ERRORFILE>`
 

Ответ №1:

Следующее поможет:

Количество классов

В JAXB классы Java соответствуют сложным типам в XML-схеме. Обычно вам понадобится класс для каждого типа сложного элемента. На основе вашего документа вам понадобятся классы для: ErrorFile , ErrorList , Error , RecNumbers , и т.д.

Отображение метаданных

По умолчанию JAXB не требует никаких метаданных сопоставления. Имена узлов являются производными от соответствующих имен Java. Поскольку все ваши элементы имеют верхний регистр, вам нужно будет указать имена, используя @XmlRootElement @XmlElement аннотации и .

 @XmlRootElement(name="ERRORFILE")
public class ErrorFile {
}
 

Атрибуты XML

По умолчанию JAXB представляет все как элемент XML. Чтобы сопоставить что-либо с атрибутом XML, вам нужно использовать @XmlAttribute аннотацию.

ПРОСТРАНСТВА ИМЕН

Поскольку ваш XML-документ имеет право на пространство имен, вам нужно будет использовать @XmlSchema аннотацию уровня пакета для сопоставления этого:

Группировка элементов

Если ваши ERROR_LIST REC_NUMBERS элементы and были простыми элементами группировки, которые упаковывали данные коллекции, вы могли бы сделать следующее:

 @XmlElementWrapper(name="ERROR_LIST")
@XmlElement(name="ERROR")
public List<Error> getErrorList() {
    return errorList;
}
 

Но поскольку у вас есть дополнительный бит данных, отображенный как атрибут XML на этом уровне, вам нужно будет представить его как класс:

 @XmlElement(name="ERROR_LIST")
public ErrorList getErrorList() {
    return errorList;
}
 

Для получения дополнительной информации: