Сущность карты, вложенная в атрибуты xml - PullRequest
0 голосов
/ 19 июня 2019

Я хочу отобразить следующую структуру XML на мои POJO, используя библиотеку jackson-databind-xml.

Какие аннотации необходимы для правильного разбора строки

<fontSize fontWidthPx="8" fontSizePt="10" fontStyle="BOLD" />

на два объекта?

Отображение работает нормально, если я определяю свою структуру Input XML следующим образомthis:

    <fontSizes>
      <fontSize fontWidthPx="8">
        <fontType fontSizePt="10" fontStyle="BOLD"/>
      </fontSize>
      <fontSize fontWidthPx="7">
        <fontType fontSizePt="10" fontStyle="REGULAR"/>
      </fontSize>
    </fontSizes>

Структура ввода XML:

<?xml version="1.0" encoding="UTF-8" ?>
<alphabet productFamily="FAMILYXY">
  <alphabetCharacter>
    <unicodeChar>A</unicodeChar>
    <sortPosition>1</sortPosition>
    <keyboardPosition>23</keyboardPosition>
    <fontSizes>
      <fontSize fontWidthPx="13" fontSizePt="10" fontStyle="BOLD" />
      <fontSize fontWidthPx="11" fontSizePt="10" fontStyle="REGULAR" />
    </fontSizes>
  </alphabetCharacter>
  <alphabetCharacter>
    <unicodeChar>B</unicodeChar>
    <sortPosition>2</sortPosition>
    <keyboardPosition>26</keyboardPosition>
    <fontSizes>
      <fontSize fontWidthPx="8" fontSizePt="10" fontStyle="BOLD" />
      <fontSize fontWidthPx="7" fontSizePt="10" fontStyle="REGULAR" />
    </fontSizes>
  </alphabetCharacter>
</alphabet>

POJO:

@JacksonXmlRootElement(localName = "alphabet")
public class AlphabetXmlWrapper {

  @JacksonXmlElementWrapper(useWrapping = false)
  @JacksonXmlProperty
  private List<AlphabetCharacterEntity> alphabetCharacter;

  @JacksonXmlProperty(isAttribute = true)
  private ProductFamily productFamily;

}

public class AlphabetCharacterEntity {
  private Integer keyboardPosition;
  private Integer sortPosition;
  private Character unicodeChar;
  private Set<FontSizeEntity> fontSizes = new HashSet<>();
}

public class FontSizeEntity {
  private Integer fontWidthPx;
  private FontTypeEntity fontType;
}

public class FontTypeEntity {
  @JacksonXmlProperty(isAttribute = true)
  private Integer fontSizePt;
  //FontStyle is of type ENUM String
  private FontStyle fontStyle;
}


...