JAXB и XML канонизация - PullRequest
       9

JAXB и XML канонизация

1 голос
/ 08 декабря 2011

Я хочу канонизировать мой XML, не распакованный JAXB, в соответствии с Канонической спецификацией XML

Если я напишу это:

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

это будет работать?

Если нет, сможет ли JAXB справиться с этой задачей?

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

Ниже приведен мой первоначальный ответ на основе: http://www.w3.org/TR/2001/REC-xml-c14n-20010315#Terminology

1 - документ закодирован в UTF-8

По умолчанию маршалы JAXB в UTF-8 кодировка.

2 - разрывы строк, нормализованные до #xA на входе, перед синтаксическим анализом

JAXB не сохраняет разрывы строк, так что это на самом деле не применяется.

3 - значения атрибутов нормализуются, как если бы процессором проверки был

Вы можете указать XmlSchema в Unmarshaller, чтобы реализация JAXB использовала процессор проверки:

4- Заменены ссылки на символы и проанализированные сущности

Большинство реализаций JAXB делегируют эту работу базовомуИспользуется синтаксический анализатор.

5- Разделы CDATA заменяются их символьным содержимым

Стандартные API-интерфейсы JAXB не позволяют выполнять маршалинг в раздел CDATA, так что все в порядкеВот.

6 - Декларация XML и декларация типа документа (DTD) удалены

JAXB не записывает декларацию DTD.Вы можете удалить объявление XML, выполнив следующие действия:

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

7 - пустые элементы преобразуются в пары начальных и конечных тегов

JAXB не записывает пустыеэлементы как пары начальных и конечных тегов.Должен быть в состоянии найти обходной путь для этого.

8 - пробелы вне элемента документа и внутри начальных и конечных тегов нормализованы

9 - все пробелы в символьном содержимомсохраняется (исключая символы, удаленные во время нормализации перевода строки)

Реализации JAXB сохраняют все пробелы в содержании символов (между тегами start / element).

10 - Разделители значений атрибутовустановлены в кавычки (двойные кавычки)

Ссылка и реализация MOXy JAXB используют двойные кавычки для разделителей значений атрибута.

11 - специальные символы в значениях атрибута и символсодержимое заменяется символьными ссылками

JAXB заменит & на &amp;, < на &lt; и " на &quot;

12 - Лишние объявления пространства имен удаляются из каждого элемента

Реализации JAXB делают все возможное, чтобы не писать лишние namepaдекларации ce, но не может гарантировать, что дополнительные пространства имен не объявлены.Есть несколько обходных путей, которые вы можете сделать для решения этой проблемы.

13 - атрибуты по умолчанию добавляются к каждому элементу

TBD

14- Лексикографический порядок наложен на объявления и атрибуты пространства имен каждого элемента.

Реализации JAXB не гарантируют упорядочение объявлений и атрибутов пространства имен каждого элемента.

0 голосов
/ 08 декабря 2011

Нет, согласно моей parctice, я бы не стал полагаться на JAXB_FORMATTED_OUTPUT свойство. Вы можете проверить это на примерах из спецификации, которую вы упомянули.

...