Тёрка в тагах


Друзья

Его(2) Общие(0) Хотят дружить(0)


  • Atrinax

  • Blackoff

  • login

  • login

  • login

  • login

Враги

Его(0) Общие(0) Обиженные(1)

Большая Тёрка / Мысли / Личная лента olegchir /


olegchir
Заметка о сегодняшнем дне, чтобы почувствовать всю бессмысленность существования.

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

Пришлось мучить JAXB.

Классы из XSD генерятся вот такой штукой: maven-jaxb2-plugin. Она умеет в jaxb bindings, но как всех обмануть и подменить в bindings.xjc неймспейсы - я не придумал (может, есть способ?)

Но оказалось, что в интернетах есть плагин для плагина, который таки добавляет в заголовок сгенерированных классов нужную инфу: https://github.com/Siggen/jaxb2-namespace-prefix

Hey dougs! I herd you like generator plugins, so we put generator plugin into your generatior plugin, so you can plug generators while your generate plugins

Короче, он какой-то косой, и его действие не распространяется на тэги group, импортированные из другой xsd (ну или я не придумал, как это сделать).
Я хотел прописать bindings node, вдруг это хакнет систему. Но оказалось, что падла почему-то совершенно не понимает запросы типа //*[local-name()=РассветКоммунизма], и падает с ошибкой "ничего не нашлось". А если попробовать //* чисто для теста, оно падает с ошибкой "слишком дофига элементов, не справляюсь, их там больше 25!". Двадцать пять элементов хватить для всех (с). Короче, что за дерево оно там парсит ничерта не понятно, но учитывая что поиск по local-name падает, это явно не моя XSD.

И еще автор забил публиковать стабильные релизы лет 5 как, свежая версия есть только в Sonatype Snapshots.

Вообще там всего плагина - одна портяна на пару экранов. Наверное это как-то можно починить, но лень сейчас с этим пердолиться.

В результате, после МНОГОЧИСЛЕННЫХ попыток обрулить эту проблему разнообразными способами и костылями, пришлось предать общечеловеческие ценности и залить автосгенерированный package-info.java прямо в гит, добавив к нему в шапку еще один @javax.xml.bind.annotation.XmlNs вручную. Причем т.к. если положить _только_ package-info, оно начинает плакать "ой, я тут пытаюсь работать, а класс уже проаннотирован" и падает с ошибкой, пришлось еще навернуть эксклудов.
Кто дочитал до конца, всем синей изоленты.