Monthly Archives: Февраль 2015

Генерация Java-классов Web-сервиса по WSDL

Допустим, у вас есть WSDL и вы хотите написать либо сам веб-сервис, либо клиента для сервиса. Для этого по WSDL нужно сгенерировать Java-классы с помощью утилиты wsimport, входящую в состав JDK.
Стоит отметить, что сгенерированный код может использовать и на сервере, и на клиенте.
Создайте новую папку и положите в нее вашу WSDL и всё, что к ней относится (это может быть другие WSDL или XSD). Увидеть все, что импортирует ваша основная WSDL можно в теге import. Например:

<xsd:import namespace="http://www.kesh.kz/blog/v1" 
schemaLocation="http://123.45.678.90:8080/kesh/example.xsd"/>

В данном примере следует заменить интернет адрес XSD на локальный:

<xsd:import namespace="http://www.kesh.kz/blog/v1" 
schemaLocation="example.xsd"/>

Разумеется, файл example.xsd должен лежать c WSDL в одной директории.
Теперь напишем скрипт для генерирования классов. Рассмотрим сперва Windows-версию скрипта, а потом Linux-версию.

Скрипт для Windows
Создайте файл w-gen.bat в любом текстовом редакторе и скопируйте в него следующий код:

cls
set GEN_DIR=kz
rmdir %GEN_DIR% /s/q
"%JAVA_HOME%/bin/wsimport" -keep -Xnocompile -p kz.kesh.blog.v1 myBlog.wsdl
pause

cls — очистка консоли
GEN_DIR — директория пакета верхнего уровня
rmdir — полное удаление директории
wsimport — утилита для генерации Java-классов из WSDL
keep — сохраняет сгенерированные файлы
Xnocompile — не компилирует сгенерированные Java-файлы
kz.kesh.blog.v1 — имя пакета, в котором будет сгенерированые классы
myBlog.wsdl — наша WSDL
pause — пауза, чтобы консольное окно сразу не закрылось

Данный скрипт генерирует *.java файлы, но вы можете немного переработать скрипт и генерировать скопилированные файлы *.class. Так же вы можете доработать упаковку файлов и WSDL в jar. Например:

"%JAVA_HOME%/bin/jar" cf keskBlog.jar kz

jar — стандартная утилита из JDK для создания jar-файлов
cf — создает новый архив с указанным именем
keskBlog.jar — имя вашего jar-файла
kz — директория, которая упаковывается в jar, она соответствует названию верхнего пакета

Скрипт для Linux
Создайте файл w-gen.sh:

#!/bin/bash
GEN_DIR="kz"
rm -r $GEN_DIR
wsimport -keep -Xnocompile -p kz.kesh.blog.v1 myBlog.wsdl

Не забудьте дать скрипту права на выполенение:

chmod +x w-gen.sh

#!/bin/bash — обязательная строчка для bash-скриптов
GEN_DIR — директория пакета верхнего уровня
rm — рекурсивное удаление директории
wsimport — утилита для генерации Java-классов из WSDL
keep — сохраняет сгенерированные файлы
Xnocompile — не компилирует сгенерированные Java-файлы
kz.kesh.blog.v1 — имя пакета, в котором будет сгенерированы классы
myBlog.wsdl — наша WSDL