- Статьи и примеры
- | Веб сервисы
- | Пару слов о том, как сгенерировать при помощи wsimport классы, реализующие serializable интерфейс.
Пару слов о том, как сгенерировать при помощи wsimport классы, реализующие Serializable интерфейс.
Зачем все это
Появилась на днях потребность веб сервис сделать для приложения электронной коммерции. Задачи его тривиальны — показать пользователю товар по запросу и провести платеж кредитной карточкой. Но рассказ не об этом будет. А о том как получить классы из WSDL реализующие Serializable интерфейс.
В чем проблема
Естественным началом работы над таким проектом стало написание WSDL. Так получилось что при написании сервиса пришлось использовать уже готовые объекты, импортируя их XSD в новый WSDL. С одной стороны это значительно упростило работу, с другой стороны итоговое количество классов перевалило за тысячу.
Как бы то ни было WSDL готов и настало время генерировать объекты и интерфейсы.
Для этого мы воспользовались приложением wsimport из набора JDK(у нас была версию 6.2). Вот такой простой скрипт:
Как видно из этой строчки исходные Java файлы будут положены в папку src, готовые классы в папку classes. Единственное — не забыть создать эти папки. Иначе получим ошибку.
После успешной генерации всех объектов и интерфейсов мы вдруг обнаружили отсутствие в них реализации Serializable интерфейса.
Решение
Наличие реализации Serializable интерфейса является обязательным в нашем случае, поэтому мы немедленно стали искать решение.
Как оказалось, простое добавление JAXB аннотации в нашем случае не сработало. Поэтому пришлось создать вот такой связной XML файл bind.xml:
<?xml version="1.0" encoding="UTF-8"?> <jaxws:bindings wsdlLocation="hg.wsdl" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema [@targetNamespace='http://ws.mysite.com']"> <jxb:globalBindings> <jxb:serializable/> </jxb:globalBindings> </jaxws:bindings> </jaxws:bindings>
Здесь стоит обратить внимание на два параметра — wsdlLocation и targetNamespace. В значении первого прописываем адрес нашего WSDL файла. Можно указать URL адрес. В значении второго targetNamespace из нашего WSDL файла.
Затем таким образом изменяем стартовый скрипт:
Вот и все. В нашем распоряжении объекты, интерфейсы и файлы для серверной и клиентской части. Можно спокойно приступать к имплементации.
Санкт-Петербург Весна 2008