Как пропустить узлы, которые не проверяются с помощью JAXB - PullRequest
0 голосов
/ 04 октября 2018

Мой xml-файл выглядит так:

<Customers>
    <Customer>
        <name>foo</name>
        <age>18</age>
        <sexe>Male</sexe>
    <Customer>

    <Customer>
         <name>foo1</name>
         <age>25</age>
         <sexe>Female</sexe>
    <Customer>
        .
        .
        .
        .
        .
        .
</Customers>

Это огромный XML-файл (более ста тысяч клиентов), который мне нужно разобрать, а затем поместить в мою базу данных, это ежемесячная задача.

Мне нужно провести некоторую проверку, а затем, если клиент прав, сохранить его в базе данных, если какие-либо данные о клиенте неверны, зарегистрировать ошибку и пропустить этого клиента.

Я думал о том, чтобы записать свои правила проверки в xsd, а затем во время демаршаллинга с помощью ValidationEventHandler игнорировать всего клиента.

Кто-нибудь знает, как я могу это сделать?Или другое решение?

Я часами искал в Интернете и не нашел ответа.

1 Ответ

0 голосов
/ 04 октября 2018

Вариант 1 - Подход XML

Общий подход к обработке XML заключается в разделении проверки и анализа .Этап проверки обычно выполняется с целью XML-схемы.

  1. Проверка XML всегда применяется на уровне документа.Возможно, разделение документа до (например, один DOM на запись) может помочь в вашем случае.См .: Как разбить XML-файл на несколько XML-файлов, используя java
  2. Validate - Вы можете использовать инструменты, такие как trang , для создания базового XSD
  3. Сортировка проблемных записей из исходного документа (ручная задача - обвинить поставщика данных ? )
  4. Десериализовать только хорошие

Вариант 2 - Чистая Java

Также можно использовать библиотеку, такую ​​как Jackson FasterXML , для создания довольно слабого отображения данных XML в классы Java. Найдите здесь пример о том, как читать только определенные свойства для каждой записи в списке.

  1. Слабая десериализация всех данных в стандартный POJO
  2. Проверка каждого POJO на дополнительном шаге последующей обработки Java.

Вариант 3 - что-торазные

Найдите смещения байтов для каждого клиента и прочитайте каждого клиента в хорошо подготовленный POJO.Зарегистрируйте исключения и перейдите к следующему. Найти полный подход, описанный здесь .

  1. Создать список смещений байтов
  2. Строгая десериализация для вашего POJO
...