【问题标题】:Convert Xml configuration to object graph - object lis always empty or null将 Xml 配置转换为对象图 - 对象列表始终为空或 null
【发布时间】:2019-02-13 12:05:50
【问题描述】:

我需要将 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 方法时,标签列表的值没有被打印出来。 似乎注释有问题或我的代码有任何其他问题

我的输出

fh-->>com.silverleap.cbsl.settlement.config.FileHeader@684c28bb

打印标签 ->{}

【问题讨论】:

    标签: java xml object unmarshalling


    【解决方案1】:

    成功了

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多