Я использую стандартный JAXB API для работы с XML. Мне нужно маршалировать, а затем демаршалировать объект (поэтому результат должен быть тем же объектом). Я сначала маршал в строку, а затем сделать наоборот - демаршал из строки в объект.
Проблема в том, что Marshaller.marshal (obj, os) дает мне только дочерний (заключенный в XML). Когда я пытаюсь выполнить демаршализацию обратно, я получаю сообщения об ожидаемых отсутствующих родительских тегах .
например.
(1) Строка Marshalled для объекта "FieldSet":
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FIELD1>field1</FIELD1>
<FIELD2>field2</FIELD2>
(2) Попытка разархивировать эту строку XML в объект «FieldSet»:
javax.xml.bind.UnmarshalException: имя тега "FIELD1" не допускается. Возможные имена тегов:
- со связанным исключением:
[com.sun.msv.verifier.ValidityViolation: имя тега «FIELD1» не допускается. Возможные имена тегов: «Родитель»]
В схеме «Родитель» - это элемент верхнего уровня, который должен предшествовать «FieldSet».
Почему эти стандартные операции JAXB не симметричны, и что мне нужно сделать, чтобы синхронизировать их и избежать проблемы, связанной с отсутствием только у ребенка или отсутствием родителя? Благодаря.