Java JAXB - Написание XML-файлов с логикой перезапуска - PullRequest
5 голосов
/ 13 сентября 2011

Я создаю очень большой XML-файл (700 МБ +), который обрабатывает большие объемы данных с помощью пакета. Программа служит интерфейсом между чрезвычайно большой базой данных Sybase и приложением. В настоящее время у меня есть схема xsd, связанная с классами. Мне нужен способ написать XML с учетом логики перезапуска.

т.е. быть в состоянии знать, где я остановился. Или, другими словами, в случае сбоя программы мне нужно иметь возможность увидеть, что в последний раз было записано в XML-файл, чтобы он мог определить, где я остановился. Вот пример.

<root>
  <WorkSet>
    <Work>
      <Customer>
    <Work>
      <Customer>
  <WorkSet>
    <Work>
      .....
<root>

Скажите, что программа завершается ошибкой после записи узла записи 'work' или 'workset'. Есть ли способ узнать, где я остановился? Я пытаюсь избежать чтения XML-файла обратно в память из-за размера среза XML-файла (скажем, он заканчивает 500 МБ XML и дает сбой).

Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Если вы можете разделить ваши данные на независимые элементы WorkSet, вы можете записать их по одному в режиме фрагментирования JAXB (когда JAXB не записывает заголовки).Позже просто объедините файлы и добавьте отсутствующую декларацию XML, открывая закрывающие закрывающие теги.

Возможно, вам придется изменить сгенерированные классы для этого.Я имею в виду добавление @XmlRootElement в Java-класс WorkSet.Если один WorkSet по-прежнему велик для одного шага, вы можете сделать это и с помощью Work, но вам нужно как-то сгенерировать недостающие теги.

2 голосов
/ 13 сентября 2011

Я не думаю, что JAXB является подходящим инструментом для этой работы, но ...

Вы можете написать собственную реализацию Marshaller, которая отслеживает, какие объекты были упорядочены, и использует режим фрагмента для записи.из отдельных предметов.

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