LINUX.ORG.RU

про wsdl и жабу

 , ,


0

2

расскажите мне про параметр nillable=«true», особенно для волшебных типов типа type=«tns:ArrayOfObjects»?

проблема какая. у меня есть элемент

<xs:element minOccurs=«0» name=«Objects» nillable=«true» type=«tns:ArrayOfObjects» />

и если в нем nillable есть, то разворачивается он нифига не в <Objects> ... </Objects>, а в <ArrayOfObjects> ... </ArrayOfObjects>

но если nillable убрать, то я получаю свой <Objects> ... </Objects> как и было задумано.

жаба.

или есть способ имея nillable в описании получить нормальные, ожидаемые теги <Objects> ... </Objects>?

зы. да, wsdl не мой, я только сгенерил клиента.

★★★★

Последнее исправление: Rastafarra (всего исправлений: 2)

А как сериализатор отличит null от пустого списка?

Legioner ★★★★★
()

или есть способ имея nillable в описании получить нормальные, ожидаемые теги <Objects> ... </Objects>?

зы. да, wsdl не мой, я только сгенерил клиента.

Я бы попробовал использовать bindings, который уберёт этот атрибут. Или скачать WSDL, руками его убрать и на нём сгенерить, это самый простой вариант (но при правках WSDL придётся эту процедуру повторять).

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Rastafarra

Ну я тебе описал, что сериализатору надо отличать случаи null от случая пустой коллекции, вот он так и выкручивается. Если есть пустой тег ArrayOfObjects, то это пустая коллекция, если вообще нет тега, то это null. Как оно должно быть по стандарту — не скажу, не факт, что это вообще допустимо. В любом случае это бесполезные знания, т.к. свой сериализатор ты писать не будешь.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Hater

я ж говорю

c nillable=«true»:

<xml> ... <ArrayOfObjects> <obj/> <obj/> </ArrayOfObjects> </xml>

результат удивил, с той стороны не распарсился.

---

без nillable вообще, после ручного редактирования wsdl

<xml> ... <Objects> <obj/> <obj/> </Objects> </xml>


результат нормальный, но руками лазить во всякое непотребство имхо странно.

и мое гуглфу сливает.
Rastafarra ★★★★
() автор топика
Ответ на: комментарий от Legioner

сериализатору надо отличать случаи null от случая пустой коллекции

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

написано: name=«Objects», получаю ArrayOfObjects

wtf?

Rastafarra ★★★★
() автор топика
Ответ на: комментарий от Rastafarra

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

Если это xjc (скорее всего это он), то он частно ведёт себя странно и неадекватно. Не удивлюсь если есть открый баг по твоей проблеме.

Hater ★★
()
Ответ на: комментарий от Hater

не совсем понятно куда именно смотреть, но на первый взгляд аннотации там куда я заглядывал не меняются.

Rastafarra ★★★★
() автор топика
Ответ на: комментарий от Hater

wsimport

оно? выбросить? axis вяжется на свои какие-то либы, прям афигеть как хочется без этого.

Rastafarra ★★★★
() автор топика
Ответ на: комментарий от Rastafarra

не совсем понятно куда именно смотреть

Как опредено проперти, соотвествующее Objects в сгенерённом классе? И какие имя и аннотации на классе ArrayOfObjects?

И самое интересное - как создаются инстансы соотвествующих классов? Например по этой ссылке нечто похожее на твою проблему: http://stackoverflow.com/questions/12222009/why-is-jaxb-generating-the-wrong-...

Hater ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.