2016-06-06 5 views
0

Мне нужно создать XML-файл для ввода SOAP-службы в Java. Входной файл xml может содержать не менее 1000 тегов. Каков наилучший способ создания XML? У меня есть файлы XSD, но немного сложно использовать JAXB. Является ли XMLStreamWriter хорошим вариантом для этого?Лучшая практика для большого XML-файла builder

+1

Если у вас есть файл XSD, вы можете использовать фрагменты и поток JAXB и итератор объектов. Я отправлю код, если это будет интересно. –

+0

Это зависит от того, сколько информации может измениться. Если изменяется только одна строка тысяч, статический файл может быть лучшим решением. В средних модификациях я предлагаю freemarker, только при массивных модификациях сложным каркасом должно быть решение. –

+0

Насколько велика размер файла xml? Сколько памяти кучи можно выделить для jvm? –

ответ

0

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

Одним из преимуществ интерфейса XMLStreamWriter является то, что на выбор имеется множество вариантов реализации. Например, у Saxon есть реализация, которая дает вам полный контроль над всеми параметрами сериализации XSLT/XQuery плюс расширения Saxon (например, вы можете даже контролировать порядок вывода атрибутов!)

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

Сериализация с использованием JAXB - это, конечно, более высокий уровень, но недостатком является то, что он дает вам меньше контроля.