Спецификация и синтаксический анализ XML с большим количеством объектов -> ошибка нехватки памяти - PullRequest
0 голосов
/ 06 мая 2019

У меня есть запрос на поиск множества объектов в моей базе данных со Спецификацией.

После получения g them I ne редактируется, чтобы проанализировать их в другую сущность, чтобы экспортировать их в файл 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;
[...]
}

1 Ответ

0 голосов
/ 06 мая 2019

Попробуйте использовать Apache Xerces lib для Java: Официальный сайт . Он поощряет написание более эффективного кода для анализа и обработки XML.

Эта библиотека предоставляет вам методы для обработки блоков XML, и вам придется написать дополнительный код, который будет анализировать ваши сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...