Появилась на днях потребность веб сервис сделать для приложения электронной коммерции. Задачи его тривиальны показать пользователю товар по запросу и провести платеж кредитной карточкой.
Но рассказ не об этом будет. А о том как получить классы из WSDL реализующие Serializable интерфейс.
Естественным началом работы над таким проектом стало написание WSDL. Так получилось что при написании сервиса пришлось использовать уже готовые объекты, импортируя их XSD в новый WSDL. С одной стороны это значительно упростило работу, с другой стороны итоговое количество классов перевалило за тысячу.
Как бы то ни было WSDL готов и настало время генерировать объекты и интерфейсы.
Для этого мы воспользовались приложением wsimport из набора JDK(у нас была версию 6.2). Вот такой простой скрипт:
%JAVA_HOME%\bin\wsimport.exe service.wsdl -s src -d classes
Как видно из этой строчки исходные 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 файла.
Затем таким образом изменяем стартовый скрипт:
%JAVA_HOME%\bin\wsimport.exe service.wsdl -s src -d classes -b bind.xml
Вот и все. В нашем распоряжении объекты, интерфейсы и файлы для серверной и клиентской части. Можно спокойно приступать к имплементации.
Microgames.ru v.2 - Новости, примеры, статьи о программировании.
Сделано в 2006 году. Перевыпущен в 2008 году.
Сайт содержит оригинальные материалы и переводы.
Сообщения об ошибках просьба присылать по адресу: contact@microgames.ru
Новое сообщение