JAXB 解组多个对象,不是 List<CustomObject>

JAXB unmarshal multiple objects, NOT List<CustomObject>

我正在尝试汇总 XML 包含多个对象但不包含对象列表的文件。我没有存储列表,因为我需要非常频繁地附加单个对象。

这是通过编组 XML 生成的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message>
    <datetime>2015-03-26T10:33:52.540+02:00</datetime>
    <id>1</id>
    <rawChat>
        <members_ids>1</members_ids>
        <members_ids>2</members_ids>
    </rawChat>
    <sender>
        <id>1</id>
        <username>teso</username>
    </sender>
    <text>hello</text>
</message>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message>
    <datetime>2015-03-26T10:38:59.576+02:00</datetime>
    <id>2</id>
    <rawChat>
        <members_ids>1</members_ids>
        <members_ids>2</members_ids>
    </rawChat>
    <sender>
        <id>1</id>
        <username>teso</username>
    </sender>
    <text>msg2</text>
</message>

这是我整理它的方式:

public void marshal(Message message) {
        try {
            JAXBContext jc = JAXBContext.newInstance(Message.class);
            Marshaller m = jc.createMarshaller();
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            m.marshal(message, new FileOutputStream("messages.xml", true));
            m.marshal(message, System.out);
        } catch (JAXBException | IOException e) {
            e.printStackTrace();
        }
    }

我需要解组所有消息。 你能给我一些想法吗?

首先拆分您的 XML 文件。然后您可以将每个部分解组为消息对象实例。

您也可以考虑使用包含消息列表的消息存储。使用列表不应产生负面影响。 您的 XML 将如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<messsages>
  <message>
    ...
  </message>
</messages>

这是一个有效的 XML,可以使用 JAXB 一步解组。 如果您正在处理大量消息,则不应将它们序列化为 XML。如果目的是持久化它们,那么您应该实施另一种更灵活的策略,并且考虑到持久化数据时涉及的问题。

那是无效的 XML - 事实上它看起来像多个 XML 文件连接在一起:XML needs a single root element(事实上,重复 XML Prolog 可能是也无效)。

列表设计 可以非常频繁地附加单个对象,所以这应该没问题。