Как определить метод toString () для клиентских объектов, созданных из Axis2 Webservice - PullRequest
2 голосов
/ 03 марта 2012

Я немного новичок в веб-сервисах.Я использую Netbeans 7.0 и Axis2.У меня есть Java-код на стороне сервера и Java-клиент.Чтобы упростить это, я просто воспользуюсь очень простым примером.

У меня есть класс WorkSite, в котором есть поля workSiteId, workSiteName и refCode, каждое из которых содержит getter и setter.А на стороне сервера у класса также есть переопределенный метод toString (), который просто возвращает workSiteName.Поэтому, если бы мне пришлось создать серверную часть графического интерфейса пользователя с JComboBox и начать добавлять к нему объекты WorkSite, workSiteName был бы тем, что отображается в JComboBox для каждого объекта.

Итак, я в основном создал вебметод, подобный getWorkSiteList, который запрашивает базу данных, создает объекты WorkSite и добавляет их в массив, а затем возвращает массив.Я могу использовать объекты WorkSite без проблем, за исключением того, что когда я смотрю на «Сгенерированные источники» Jax-WS на стороне клиента в Netbeans, все геттеры и сеттеры есть, но метода toString () там нет.Поэтому, когда я беру свои объекты WorkSite из массива и помещаю их в JComboBox, поле со списком показывает что-то очень уродливое, например, "examplepackagename.WorkSite.a6d35" для каждого элемента, вместо того, чтобы быть красивым и отображать workSiteName.

Полагаю, мой настоящий вопрос в том, что у меня есть автоматически сгенерированный файл WorkSite.java на стороне клиента в Netbeans, у которого нет моего метода toString () (это называется скелетом, верно?);есть ли способ сделать так, чтобы он включал метод toString (), который был определен в классе на стороне сервера?И если нет, безопасно ли редактировать автоматически сгенерированный класс (опять же, я думаю, это называется скелет, верно?) И просто добавить мой метод toString ()?Если я отредактирую автоматически сгенерированный класс на стороне клиента, он будет просто перезаписан при перестройке?

Спасибо за помощь!Я надеюсь, что это не было слишком долго наматывается;Я просто еще не знаю всей терминологии, чтобы объяснить ее кратко.

Ответы [ 2 ]

2 голосов
/ 03 марта 2012

Способ достижения этого заключается в изменении шаблонов генератора кода Axis2. Если вы посмотрите на диаграмму архитектуры на этой странице , вы увидите, что генератор кода создает промежуточную структуру данных в XML, а затем использует XSLT и набор языковых шаблонов для генерации кода. Если вы хотите, чтобы код включал дополнительные toString() методы, тогда очевидный подход заключается в изменении шаблонов для включения поддержки этих методов.

Предостережения:

  1. Вам необходимо понять архитектуру и реализацию генератора, а также технологии, которые он использует: в частности, XSLT.

  2. Я не могу гарантировать, что в промежуточных файлах XML достаточно информации для генерации необходимых вам методов. (Я ожидаю, что будет, но я не смотрел.)

0 голосов
/ 03 марта 2012

Как я уже упоминал в комментарии, я обошел это, подклассифицировав пример класса WorkSite с помощью класса SubWorkSite, который ничего не делает, кроме определения переопределенного метода toString (), который возвращает super.getWorkSiteName.getValue ().* Итак, у меня есть список объектов WorkSite, которые были возвращены из вызова веб-службы, и я просто перебираю его, и для каждого объекта WorkSite в списке я создаю объект SubWorkSite и добавляю его в JComboBox.Теперь при запуске приложения workSiteName отображается в JComboBox вместо уродливого значения toString () "examplepackagename.WorkSite.xxxxx", которое вы получаете из автоматически сгенерированного класса.

Я, конечно,открыт для предложений, чтобы сделать это лучше, если у кого-то есть;или если у кого-то есть дополнительная информация о предложении Стивена С. о редактировании шаблонов генератора XSLT.

...