Туториал: Как создать веб сервис Axis2 через IntelliJ IDEA? Часть 1: Сервис

Для создания Axis2 сервиса есть плагин для IntelliJ IDEA, но он не совместим с последними версиями среды разработки. В этом посте мы создадим сервис без помощи плагина. К счастью, есть ant, который сгенерирует нам основные файлы проекта.

Что мы собираемся делать? Мы не будем запускать сервис напрямую из IntelliJ IDEA. Вместо этого установим Tomcat отдельно, в него добавим Axis2 и запустим сервис вручную.

Шаг 1. Настройка Tomcat-а и установка Axis2
Tomcat версии 8 можете скачать здесь. Скачайте и разархивируйте.
Axis2. Скачайте последний WAR архив. WAR — готовое приложение и может легко установлен на Tomcat.

Запустите Tomcat посредством запуска bin/startup.bat (для Windows) или bin/startup.sh (для Linux/Mac). По умолчанию Tomcat настроен на порт 8080. Перейдите по адресу «http://localhost:8080», должна открыться страница приветствия.

1

Нам нужен доступ к «Apps management page». Для этого необходимо отредактировать conf/tomcat-users.xml. Добавьте «<user username=»admin» password=»admin» roles=»manager-gui»/>» между тэгами <tomcat-users> и </tomcat-users>.

1-2

В блоке «WAR file to deploy» загрузите файл axis2.war.

1-3

После этого axis2 появится в списке приложений.

1-4

Tomcat и Axis2 подготовлены. Теперь приступим к созданию веб сервиса.

Шаг 2. Создание проекта
Создаем проект («File»->»New»->»Project…»). Не будем пользоваться никакими библиотеками, которые по умолчанию предлагает IntelliJ IDEA.

2

Структура проекта будет очень простой.

2-2

Необходимо импортировать библиотеку Axis2. Для этого загрузите «Binary Distribution» по ссылке. Причина по которой не можем пользоваться библиотекой из WAR в том, что в нем присутствуют не все необходимые классы. Идем «File» -> «Project Structure…»->tab «Libraries». Нажимаем иконку (зеленый плюс) и выбираем папку lib из только что скачанного архива.

Шаг 3. Пишем код

В папке src создайте папку models. В этой папке создайте класс Worker, который будет использоваться для описания параметров модели. Пример кода:

public class Worker {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
private String name;
private String surname;
private String position;
private int salary;
}

Подсказка. Можно написать только следующие строки:
 private String name;
private String surname;
private String position;
private int salary;

и нажать «Alt»+»Insert»->»Getter and Setter»->Используя «Shift» выберите все поля->»OK».

Создаем класс «CustomService» в папке src. Пишем методы, которые будут в сервисе. К примеру:

public Worker getWorkerWithChangedSalary(Worker worker){
worker.setSalary(worker.getSalary()*2);
return worker;
}

Шаг 4. Создание конфигурационного файла

Создаем папку «resources» в корне проекта, затем создаем «META-INF» в «resouces». Вставьте файл services.xml в «META-INF» со следующим содержанием:
<service name="CustomService" scope="application" targetNamespace="http://doszhan.com/">
<description>
My Custom Service
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
<schema schemaNamespace="http://doszhan.com/xsd"/>
<parameter name="ServiceClass">CustomService</parameter>
</service>

Создаем файл build.xml:
<project name="ForAnt" basedir="." default="generate.service">
<property environment="env"/>
<property name="build.dir" value="build"/>
<path id="axis2.classpath">
<fileset dir="PATH_TO_AXIS2_LIB">
<include name="*.jar"/>
</fileset>
</path>
<target name="compile.service">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.dir}/classes"/>
<mkdir dir="${build.dir}/resources"/>
<javac debug="on"
fork="true"
destdir="${build.dir}/classes"
srcdir="${basedir}/src"
classpathref="axis2.classpath">
</javac>
</target>
<target name="generate.wsdl" depends="compile.service">
<taskdef name="java2wsdl"
classname="org.apache.ws.java2wsdl.Java2WSDLTask"
classpathref="axis2.classpath"/>
<java2wsdl className="CustomService"
outputLocation="${build.dir}"
targetNamespace="http://doszhan.com/"
schemaTargetNamespace="http://doszhan.com/xsd">
<classpath>
<pathelement path="${axis2.classpath}"/>
<pathelement location="${build.dir}/classes"/>
</classpath>
</java2wsdl>
</target>
<target name="generate.service" depends="compile.service">
<copy toDir="${build.dir}/classes" failonerror="false">
<fileset dir="${basedir}/resources">
<include name="**/*.xml"/>
</fileset>
</copy>
<jar destfile="${build.dir}/CustomService.aar">
<fileset excludes="**/Test.class" dir="${build.dir}/classes"/>
</jar>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>

build.xml нужен для ant. Как видно, в build.xml описываются операции compile.service, generate.wsdl и generate.service. Обратите внимание на строку с PATH_TO_AXIS2_LIB. Здесь вам необходимо вставить адрес Axis2 библиотеки.

В итоге структура проекта должно выглядеть по аналогии со скриншотом внизу:
4

Шаг 5. Запуск
Для сборки проекта используйте удобный плагин
Ant для IntelliJ IDEA. Нажмите на «Ant Build» справо в окне. Если такой кнопки нет, можно воспользоваться горячей клавишей «Ctrl»+»Shift»+»A» и найти «Ant Build».
Нажимаем на зеленый плюс и выбираем build.xml:

5

Двойной нажатие на generate.service запустит операцию и файл сервиса создастся в папке build. Копируем CustomService.aar в TOMCATE_HOMEwebappsaxis2WEB-INFservices.

Набираем в браузере адрес http://localhost:8080/axis2/services/listServices . Если в этом списке есть ваш сервис, то сервис успешно создан.

5-1

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Картинка профиля Doszhan Kalibek

Doszhan Kalibek