Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Axis2, указать свой wsdl


Автор: Tsahes 23.10.2007, 14:23
Добрый день.
Axis2 предоставляет автоматически сгенерированный wsdl для своих веб-сервисов, доступный по url сервис?wsdl. Я хотел бы внести некоторые изменения в этот файл: использовать schema для объктов запроса и ответа, добавить fault messages и т.д.
А есть ли возможность указать Axis2, чтобы он использовал мой wsdl и отображал именно его при обращении по url? Или принято пользоваться автоматически сгенерированным?

Автор: Foo 23.10.2007, 15:49
Мне тоже это было нужно, я не нашол как в Axis 2 сделать это, но я нашол друйгой способ решения проблемы. Впринципе то что он генерит не требует изменений/доработок, опиши конкретнее проблему, может можно обойтись без своего wsdl?

Автор: Tsahes 23.10.2007, 16:37
Суть вот в чем.
Я создал POJO-объект запроса с несколькими полями, реализацию сервиса, задеплоил. Axis2 генерирует в wsdl-файле описание объекта запроса в очень простом виде, например:

Код

<xs:complexType name="CustomerInfoReq">
  <xs:sequence>
  <xs:element name="name" nillable="true" type="xs:string" /> 
  <xs:element name="date" nillable="true" type="xs:string" /> 
  </xs:sequence>
  </xs:complexType>


Это не дает никакого представления действительной схеме сообщения CustomerInfoReq, в которой бы я указал обязательность/необязательность полей, например. Я хотел бы руками построить wsdl и как-то заставить Axis2 отобразить именно его.
Кроме того, я хотел бы определить необходимые мне faul messages, с генерацией которых, как мне кажется, у axis трудности.

Автор: Foo 24.10.2007, 09:14
Дело в том, что аксис не очень продуман, и если ты хочеш указать обязательность/необязательность полей, то это врядли у тебя получится, хотя они моглибы предусмотреть например анотации для этого дела. Также через аксис не передаш обьекты java.util.Collections, поэтому мы в своем проекте сделали отдельный пакет, куда сложили обьекты для передачи по аксису, которые по сути дела копировали наши бизнес обьекты но в них небыло ненужных для передачи полей, небыло никакой логики и все колекции менялись на arrays[]. Также мы написали трансформер, который работает через reflection и трансформирует обычные обьекты в обьекты для передачи по axis, а потом на стороне клиента производили обратную трансформацию. Есть в аксисе ещё одна проблема, если ты попытаешся передавать обьекты которые ссылаются друг на друга, например дерево, у каждого нода которого есть ссылка на родителя, в таком случае аксис не сможет сериализовать этот обьект в xml т.к. произойдет зацикливание, и упадет по таймауту. Эту проблему мы тоже обошли, не буду уже тут расписывать как, но следует учитывать что она может возникнуть. Что касается exceptions которые могут упасть на сервере, то аксис их никак не возвращает, а просто пишет месагу типа "axis fault...." и на стороне клиента узнать какой exception упал на сервере невозможно, для решения этой проблемы думаю можно передавать какойто идентификатор exceptiona и бросать его самостоятельно уже на клиенте.

Незнаю, может есть более простые решения описанных выше проблем, буду рад если ктото напишет как можно сделать проще.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)