【发布时间】:2015-11-26 11:45:11
【问题描述】:
我需要生成一个结构简单的大型xml文件
<file>
<details>
<d1></d1>
...
<dn></dn>
<task></task>
<task></task>
...
<task></task>
</details>
</file>
我将 JAXB 用于 Xml - POJO 映射。所以我有一个包含任务列表的 FilePojo。这些任务存储在数据库中,因为它们的数量很大,所以我不能一次在内存中检索它们。
我该如何做元帅动作?
到目前为止,我使用XMLStreamWriter 与此操作相关的代码
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLStreamWriter xmlsw = new IndentingXMLStreamWriter(factory.createXMLStreamWriter(writerXml));
JAXBContext jc = JAXBContext.newInstance(File.class);
Marshaller m = jc.createMarshaller();
JAXBElement<File> jx = new JAXBElement<>(new QName("http://namespace", "File"), File.class, file);
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
m.marshal(jx, xmlsw);
文件对象包含除任务列表之外的所有详细信息。
【问题讨论】:
-
棘手。您能否分享您的 POJO for File 以及任务列表如何适应它?我最好的猜测是不映射您的 List
而是提供一些 List 您可以保留在内存中(仅您的任务的 ID),然后在 TaskKey 上提供基于 XmlMapper 的自定义编组器以从 DB 中提取数据需要。但这仍然假设内容将被写入底层流上的每个字段 - 而不仅仅是在所有编组完成后返回的缓冲区...... -
@Jan 我没有确切的 POJO,因为这是对真实系统的简化。您能否给我更多有关自定义编组器的详细信息?这将如何运作?