Маршалинг JAXB: как включить информацию об исключениях в выходной файл xml? - PullRequest
1 голос
/ 21 апреля 2011

У меня есть очень простое приложение, которое использует маршаллер JAXB для проверки входной информации по схеме xsd. Я регистрирую обработчик события проверки, чтобы получить информацию об исключениях. Чего я хотел бы добиться, так это возможности включить эту информацию в структуру вывода xml, которую я получаю в результате маршалинга. Я включил раздел сбора исключений в свой xsd, и теперь я могу создать экземпляр соответствующего объекта исключения, как только возникнет исключение. Вопрос заключается в том, как мне прикрепить этот объект к остальной части моей сгенерированной JAXB структуры объектов Java, учитывая тот факт, что процесс маршалинга уже начался? Это вообще возможно? Или я должен попытаться изменить результат XML после завершения маршалинга? Любой совет будет высоко оценен. Спасибо!

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Есть несколько способов сделать это:

Вариант № 1 - добавление свойства «исключения» к корневому объекту You

  1. Убедитесь, что свойство исключений маршалируется последним, это можно настроить с помощью propOrder в аннотации @XmlType.
  2. Создайте обработчик проверки, который содержит корневой объект.
  3. Когда обработчик проверки обнаруживает исключение, добавьте это исключение в свойство исключений корневого объекта.

Вариант № 2 - использовать XMLStreamWriter

  1. Создание XMLStreamWriter
  2. выписать корневой элемент
  3. Установите обработчик проверки на маршаллера, убедитесь, что он будет хранить возникшие исключения.
  4. Маршал корневого объекта в XMLStreamWriter.
  5. Маршал отдельных исключений, встречающихся в XMLStreamWriter.
  6. Запишите закрытие для корневого элемента.
0 голосов
/ 21 апреля 2011

Краткий ответ: нет. JAXB предназначен для получения графа объектов и создания XML. это не предназначено для этого.

Более длинный ответ: Вы можете добавить представление исключения в график после первого выполнения JAXB.

Еще более длинный ответ: для JAX-B существует несколько плагинов и технологий настройки, и вполне возможно, что вы можете использовать одну из них. Однако это очень сложно осмыслить на абстрактном уровне вашего вопроса.

...