Конвертировать конфигурацию Xml в граф объектов - объект lis всегда пуст или равен нулю - PullRequest
0 голосов
/ 13 февраля 2019

Мне нужно прочитать содержимое XML в граф объектов.

Мой формат xml:

<?xml version="1.0"?>
<format>
    <fileheader>
        <tag name="firstname" length="2" order="1" padding=""></tag>
        <tag name="lastname" length="6" order="2" padding=""></tag>
        <tag name="date" length="5" order="3" padding=""></tag>
        <tag name="amount" length="16" order="4" padding="0">1000</tag>

    </fileheader>
    <filetrailer>
        <tag name="duration" length="8" order="1" padding=" "></tag>
        <tag name="count" length="6" order="2" padding=""></tag>
        <tag name="date" length="5" order="3" padding=""></tag>
        <tag name="totalAmount" length="16" order="4" padding="0">1000</tag>
    </filetrailer>
</format>


@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Format {

  @XmlElement(name = "fileheader")
  private FileHeader fileHeader;

  @XmlElement(name = "filetrailer")
  private FileTrailer fileTrailer;

// getters setters
}


@XmlAccessorType(XmlAccessType.FIELD)
public class FileHeader {

  @XmlElementWrapper
  @XmlElement(name="tag")
  private  Tag[] tags;

// getters setters
}


@XmlAccessorType(XmlAccessType.FIELD)
public class FileTrailer {

  @XmlElementWrapper
  @XmlElement(name="tag")
  private  Tag[] tags;

// getters setters
}


@XmlAccessorType(XmlAccessType.FIELD)
public class Tag {

  @XmlAttribute
  private String name;

  @XmlAttribute
  private int length;

  @XmlAttribute
  private int order;

  @XmlAttribute
  private String padding;

  @XmlValue
  private String defaultVal;

  // getters setters
}


Class Test{

  public void loadSettings() {
    logger.debug("loadsettings.......");
    try {
      ClassLoader classLoader = getClass().getClassLoader();
      InputStream xmlInputStream = classLoader.getResourceAsStream(FORMAT_FILE);
      JAXBContext jaxbContext = null;
      jaxbContext = JAXBContext.newInstance(Format.class);
      Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
      Format format = (Format) unmarshaller.unmarshal(xmlInputStream);

    FileHeader fh = format.getFileHeader();
    logger.debug("fh-->>{}",fh);
    Tag[] tags=fh.getTags();
    logger.debug("printing tags ->{}",tags);

    }catch (Exception e) {
      logger.error("Error ", e);
    }

  }

}

при вызове метода loadSetting значения списка тегов не распечатываются.Похоже, что-то не так с аннотатинами или другими проблемами с моим кодом1011 * печать тегов -> {}

1 Ответ

0 голосов
/ 13 февраля 2019

Успех с

@XmlElement(name = "tag")
  private List<Tag> tags;
...