java - 具有大量实体的规范和 XML 解析 -> 内存不足错误

标签 java xml spring spring-data-jpa

我请求在我的数据库中查找具有规范的大量实体。

获取它们之后,我需要将它们解析为另一个实体,以便将它们导出到 XML 文件中。当我的规范涉及很多实体(~6 000)时,我收到内存不足错误。

有人有解决办法吗?我没有主意了......(增加堆大小不是一个选项)

@RequestMapping(method = RequestMethod.GET, value = "/cmc")
public String getXmlExport(CmcCriteria cmcCriteria, Model model) throws CmcCommonsException {

    Specification<Cmc> cmcSpec = cmcService.getSpec(cmcCriteriaResource);
    List<Cmc> cmcList = cmcRepository.findAll(cmcSpec);

    model.addAttribute("requestCmcXml", getCmcXmlListFromCmcList(cmcList));
    return "cmc/list";
}


@Override
protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

    List<CmcXml> listeCmcXml = (List<CmcXml>) model.get("requestCmcXml");

    CmcXmlExport export = new CmcXmlExport();
    export.setPersonnels(listeCmcXml);
    response.setContentType(CONTENT_TYPE_XML);
    ServletOutputStream out = response.getOutputStream();
    JAXBContext context = JAXBContext.newInstance(CmcXmlExport.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.marshal(export, out);
    out.flush();

}

@XmlRootElement(name = "CMC")
public class CmcXmlExport {

    private List<CmcXml> personnels;
    [...]
}

@XmlType(propOrder = { "id", "nom", "prenom", "genre", [...] })
public class CmcXml implements Serializable {

private static final long serialVersionUID = 1L;

private int id;
private String nom;
private String prenom;
private String genre;
[...]
}

最佳答案

尝试使用适用于 Java 的 Apache Xerces lib:Official website 。它鼓励为 XML 解析和处理编写更有效的代码。

这个库为您提供了处理 XML block 的方法,您必须编写一些额外的代码来解析您的实体。

关于java - 具有大量实体的规范和 XML 解析 -> 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997625/

相关文章:

java - BottomNavigationView 与 RecycleView 的最后一项重叠

xml - 在 SVG 中对齐文本

java - Hibernate select 与双向映射

java - Maven 资源过滤是否支持条件?

java - 如何部署 webapp 并创建其资源

java - Transformer.transform() 将第一个标签写入与 <?xml> 同一行

java - 单元测试 - 无法加载 ApplicationContext

java - 使用 JPA 中的父实体获取子实体

java - 自动虚拟机部署

java - 如何增加 Jersey WS 超时