Распаковав загруженный архив, мы получим следующую структуру каталога.
Рисунок 1.
В Папке «dist» находится файл «axis2.war» - это и есть web-приложение Axis2. Его необходимо развернуть на web-сервере, в нашем случае это Tomcat, для этого можно просто скопировать этот файл в папку "<TOMCAT_HOME>/webapps", Tomcat сам определит и развернет приложение.
В результате в списке web-приложение сервера Tomcat (http://[host]:[port]/manager/html)
появится новое приложение axis2
Рисунок 2.
Обзор web-интерфейса Axis2
На первой странице web-интерфейса сервера Axis2, размещены ссылки на три основные страницы основные
Рисунок 3.
Services – Список сервисов которые развернуты на сервере.
Рисунок 4.
По умолчанию в качестве примера сервиса используется сервис, который возвращает версию сервера - Version.
Validate – Страница с результатами проверки системы на наличие необходимых
библиотек и общей статистической информацией о системе.
Administration – Собственно, интерфейс администратора
Для входа в панель администратора необходимо авторизоваться
Рисунок 5.
По умолчанию имя пользователя – admin, пароль пользователя – axis2
Эти значения можно поменять, отредактировав секции
<parameter name="userName">admin</parameter>
<parameter name="password">axis2</parameter>
В файле "<TOMCAT_HOME>\webapps\axis2\WEB-INF\conf\axis2.xml"
Каркас сервиса
И так, настало время написать каркас нашего сервиса.
При разработке данного примера я использовал в качестве сборщика очень удобную утилиту – Ant, это утилита написанная на java для организации процесса сборки java приложений и не только. Очень удобная вещь, постараюсь рассказать о ней позже в следующей статье.
И так наш проект имеет следующую структуру:
Рисунок 6.
Это не эталон, структуру можно поменять, по своему усмотрению, с соответственными изменениями в скриптах сборки.
Как можно догадаться по названию папок:
build – откомпилированный код
dist – архив сборки
lib – необходимые библиотеки
src – исходные коды
build.xml – скрипт для сборки проекта
И так перейдем к исходным кодам.
Сначала создадим класс SimpleService, в пакете my.services
package my.services;
public class SimpleService {
public String sayHello() {
return "Hello World!!!";
}
}
Как видно из листинга это простой класс с одним методом sayHello, который возвращает строку со значением «Hello World!!!» :)
Теперь для того чтобы указать Axis2 серверу, что это у нас web-сервис, необходимо создать xml дескриптор описывающий наш сервис. Для этого создадим папку META-INF
в папке src и создадим в папке META-INF файл services.xml со следующим содержимым.
<service name="SimpleService">
<description>
This service is to say the Hello World
</description>
<parameter name="ServiceClass" locked="false">my.services.SimpleService</parameter>
</service>
Судя по названиям узлов в файле, можно сразу догадаться:
<service>…</service> – секция описания сервиса
name=”SimpleService” - имя нашего сервиса
<description>…</description> - это описание сервиса, полезно заполнять это поле для будущих пользователей сервиса
<parameter name="ServiceClass" locked="false">my.services.SimpleService</parameter> - собственно имя класса с указанием антиблокировки :)
Файл дескриптора может содержать и другие секции, но об этом позже.
Сборка сервиса
После создания xml дескриптора и написания функционала, нам необходимо собрать проект, для этого, как я уже сказал выше, будем использовать Ant.
Весь процесс сборки с помощью Ant основывается на определении целей (правил) сборки в xml файле – build.xml. ниже я приведу пример такого файла с подробными комментариями внутри.
<project name="SimpleAxis2" basedir="." default="aar.server">
<!-- Определяем необходимые параметры-->
<!—Директории -->
<property name="src.dir" value="${basedir}/src" />
<property name="build.dir" value="${basedir}/build" />
<property name="dist.dir" value="${basedir}/dist" />
<property name="lib.dir" value="${basedir}/lib" />
<property name="axis2.home" value="C:\apache.jakarta\axis2" />
<!-- Web Service Name -->
<property name="service.name" value="SimpleService" />
<!-- Web Service Namespace -->
<property name="service.namespace" value="http://services.my" />
<!-- Web Service Data Namespace -->
<property name="services.data.namespace" value="http://data.example.second.axis2.my" />
<!-- Java Package Name -->
<property name="service.java.packageName" value="my.services" />
<!-- Name of Java Implementation Class-->
<property name="service.java.name" value="SimpleService" />
<!-- Java Class Name with Package Information-->
<property name="service.class" value="${service.java.packageName}.${service.java.name}" />
<!-- WSDL file name -->
<property name="service.wsdl" value="${service.name}.wsdl" />
<!-- CLASSPATH -->
<path id="classpath">
<!-- Moved from Java 2 Wsdl -->
<pathelement location="${build.dir}" />
<fileset dir="${axis2.home}\lib">
<include name="*.jar" />
</fileset>
</path>
<property name="axis2.classpath" value="classpath" />
<!-- Очищаем директории -->
<target name="clean">
<delete dir="${build.dir}" />
</target>
<!-- Компилируем исходные коды -->
<target name="compile" depends="clean">
<mkdir dir="${build.dir}" />
<!--First let's compile the classes-->
<javac debug="on" fork="true" destdir="${build.dir}" srcdir="${basedir}/src" classpathref="classpath">
</javac>
</target>
<!-- Создаем архив сервиса -->
<target name="aar.server" depends="compile">
<mkdir dir="${build.dir}/META-INF" />
<mkdir dir="${build.dir}/lib" />
<!--copy file="${build.lib}/${xbeans.packaged.jar.name}" toDir="${build.classes}/lib" /-->
<copy toDir="${build.dir}/META-INF">
<fileset dir="${src.dir}/META-INF" />
</copy>
<jar destfile="${dist.dir}/${service.name}.aar">
<fileset dir="${build.dir}"/>
</jar>
</target>
</project>
Файл build.xml должен находится в корне проекта (те на одном уровне с папками src и build)
Теперь для сборки проекта в командной строке, необходимо выполнить след команду.
> ant
Ant сборщик автоматически подхватит файл build.xml и основываясь на его целях (правилах) соберет проект.
Развертывание на сервере
Теперь после сборки проекта в папке dist должен появится файл-архив с со всеми необходимыми файлами для сервиса
Для развертывания его на Axis сервере, необходимо скопировать его в папку
"<TOMCAT_HOME>\webapps\axis2\WEB-INF\services\"
Axis сервер, автоматически определит его и развернет в своем контейнере.
Результат можно увидеть на странице
http://localhost:8080/axis2/services/listServices
(для локального сервера)
Рисунок 7.
Как видно на рисунке, в списке развернутых сервисов, появился наш сервис «SimpleService» с одним методом sayHello.
В следующей статье я планирую описать процесс создания клиента для нашего SimpleService.
Жду ваших отзывов и предложений.