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

我有一个要求,可以在我的数据库中找到具有规范的很多实体。

经过gettin g them I ne解析后,将它们解析为另一个实体,以便将其导出为XML文件。当我的规范涉及到很多实体(〜6000个)时,出现内存不足错误。

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

@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;
[...]
}

参考方案

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

该库为您提供了处理XML块的方法,并且您将不得不编写一些其他代码来解析您的实体。

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

如何使用箭头符号(->)创建受保护的方法? - java

当我们编写以下代码时Stream.of(1,2,3,4,5).filter(i -> (i%2 == 0)).map( i -> i*i ); 表达式i -> (i%2 == 0)或i -> i*i将变为私有方法。在我的用例中,编写了一个junit测试,以确保没有方法是私有的(是的,这是强制性的),并且对于这些lambda表达式而言,…

通过索引访问地图? - java

是否可以通过索引访问帐户>?我需要获取地图的第二个元素。 java参考方案 您使用了错误的数据结构。如果需要按键查找,请使用Map。如果需要按索引或插入顺序进行查找,请使用可让您进行索引的内容,例如数组或列表或链表。如果需要通过两者进行查找,则需要创建一个跟踪键和插入顺序的复合数据结构(该实现将由Map和上述数据结构之一支持)。框架中甚至内置了一个:L…

Spring MVC拦截器映射问题 - java

我有这段XML:<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/statics/**" /> <bean class="com.company.website.servlet.StaticsHandlerIntercept…

展平地图中的列表列表 - java

我有订单流(来源是订单列表)。每个订单都有一个客户和一个OrderLine列表。我要实现的目标是在一张简单的列表中以客户为关键的地图,并将属于该客户的所有订单行作为值。现在,通过执行以下操作,我现在管理的内容返回了Map<Customer>, List<Set<OrderLine>>>:orders .collect…