Статьи

Разработка веб-сервисов с Axis2 и Eclipse

Вступление

 

Веб-сервисы приобрели огромную популярность и широкое распространение. Поскольку в разработке и развертывании веб-сервисов много мистики, важно использовать правильные инструменты, которые повышают производительность труда разработчиков и скрывают сложность деталей разработки и развертывания, позволяя разработчикам сосредоточиться на логике реализации. Существует несколько платформ SOAP, которые помогают создавать веб-сервисы. В этом обсуждении основное внимание будет уделено мыльному стеку Apache AXIS2. AXIS2 — это новое поколение мыльного движка из стабильной версии Apache после Apache Soap и Apache AXIS1.

AXIS2 представляет собой полный пересмотр своих предшественников и имеет несколько улучшений с точки зрения производительности и масштабируемости. AXIS2 при использовании в сочетании с инструментами разработки Eclipse обеспечивает отличное время разработки и платформы времени выполнения, которые способствуют быстрой разработке веб-служб. В этой статье рассматриваются эти инструменты и как они используются для быстрой разработки веб-сервисов. Эта статья является пошаговой иллюстрацией к разработке и развертыванию веб-сервисов с использованием AXIS2 и Eclipse IDE и связанных с ними плагинов.

Обзор инструментов

В этом упражнении мы используем следующие инструменты и среды выполнения.

  • Java 1.6
  • AXIS2 версия 1.4
  • Затмение 3.2.x
  • Tomcat 4.1
  • Подключаемый модуль Apache AXIS2 Service Archiver Wizard
  • Подключаемый модуль мастера создания кода Apache AXIS2

Установка AXIS2

Чтобы установить AXIS2, поместите файл axis2.war из дистрибутива AXIS2 в папку «webapps» дистрибутива tomcat. Если вы установили tomcat на диск «C:», поместите axis2.war в «c: \ tomcat \ webapps». Перезагрузите кота. Чтобы убедиться, что установка AXIS2 прошла успешно, попробуйте загрузить страницу «HappyAxis»: http: // localhost: 8080 / axis2 / axis2-web / HappyAxis.jsp

Также разархивируйте дистрибутив AXIS2 на диск «C:».

Eclipse Plugin установка

После загрузки бинарного дистрибутива Service Archiver, Code Generator, разархивируйте оба файла в каталог ‘plugins’ установки eclipse. Если вы установили eclipse на диск «C:», разархивированное содержимое будет помещено в папку «c: \ eclipse \ plugins».

Шаги по разработке веб-сервиса

Теперь, когда установлены платформы времени выполнения и времени разработки, мы можем начать разработку веб-сервисов. Разработка веб-сервисов может осуществляться двумя способами.

  • Развитие сверху вниз
  • Развитие снизу вверх

В этой статье я объясню «развитие сверху вниз». В методе «сверху вниз» мы начинаем с документа WSDL в качестве отправной точки. Я буду использовать следующий WSDL для целей моего упражнения.

<definitions targetNamespace="http://example.org/math/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns="http://example.org/math/types/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:y="http://example.org/math/">

<types>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="unqualified"
targetNamespace="http://example.org/math/types/"
xmlns="http://example.org/math/types/">
<xs:complexType name="MathInput">
<xs:sequence>
<xs:element name="x" type="xs:double" />
<xs:element name="y" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="MathOutput">
<xs:sequence>
<xs:element name="result" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:element name="Add" type="MathInput" />
<xs:element name="AddResponse" type="MathOutput" />
</xs:schema>
</types>

<message name="AddMessage">
<part name="parameters" element="ns:Add" />
</message>

<message name="AddResponseMessage">
<part name="parameters" element="ns:AddResponse" />
</message>

<portType name="MathInterface">
<operation name="Add">
<input message="y:AddMessage" />
<output message="y:AddResponseMessage" />
</operation>
</portType>
<binding name="MathSoapHttpBinding" type="y:MathInterface">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Add">
<soap:operation soapAction="http://example.org/math/Add"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
<service name="MathService">
<port name="MathEndpoint" binding="y:MathSoapHttpBinding">
<soap:address location="http://localhost:8080/axis2/services/MathService" />
</port>
</service>
</definitions>

Поместите MathService.wsdl в папку «WSDL».

 

Следующим шагом является создание кода на стороне сервера. Нажмите Ctrl + N. Мы получаем следующий экран.

Выберите генератор кода Axis2. Появится следующее окно.

Выберите первый вариант. Нажмите «Далее.

Укажите точное местоположение файла WSDL. Нажмите «Далее. 

Выберите параметр «Пользовательский», «Создать код на стороне сервера» и файл по умолчанию Services.xml. Нажмите Next, чтобы получить следующее окно. 

Выберите «Обзор и выберите проект в текущей рабочей области Eclipse». Выберите проект MathService из появившегося окна. Нажмите Ok и выберите «Добавить библиотеки Axis2». Нажмите Готово.

Обновите папки проекта. Вы найдете папку «lib» и папку «resources».
Добавьте файлы jar из папки ‘lib’ в путь сборки и скомпилируйте сгенерированный код.

Теперь измените код скелета [в нашем случае org.example.math.MathServiceSkeleton.java], чтобы включить логику реализации, как показано ниже:

public org.example.math.types.AddResponse Add(org.example.math.types.Add add) {
AddResponse response = new AddResponse();
MathOutput output = new MathOutput();

double x = add.getAdd().getX();
double y = add.getAdd().getY();

output.setResult(x+y);
response.setAddResponse(output);

return response;
}

Снова перестройте проект [Project-> Clean].

Архив Сервис

После того, как исходный код сгенерирован и services.xml [в папке ресурсов], пришло время архивировать сервис. Это делается с помощью мастера Service Archiver. В проекте eclipse нажмите Ctrl + N. После выбора мастера Service Archiver укажите точное местоположение файла класса в следующем окне. Выберите опцию «Включить только файлы .class». 

Нажмите Next. Мы получим следующее окно. Выберите опцию «Выбрать WSDL». И нажмите Далее.

В следующем окне нажмите Далее.

В появившемся окне укажите ссылку на «services.xml», как показано ниже. Нажмите «Далее.

В появившемся окне укажите выходное местоположение для сгенерированного архива. Нажмите Готово.

Это приводит к следующему окну.

В папке сборки вы можете увидеть, что файл MathService.jar создан. Переименуйте его в MathService.aar. Удалите архив в папку <TOMCAT_HOME> \ webapps \ axis2 \ WEB-INF \ services. Чтобы убедиться, что служба развернута правильно, перезапустите сервер Tomcat.

Откройте URL-адрес http: // localhost: 8080 / axis / services / listServices, чтобы увидеть развернутую службу. На этой странице должен отображаться статус услуги «Активен».

Напишите код клиента

Теперь, когда сервис развернут, нам нужно сгенерировать клиент, который обращается к сервису. Это генерируется мастером генерации кода. В проекте нажмите «Ctrl + N». Выберите «Генератор кода Axis2». В появившемся окне выберите первый вариант.

Нажмите «Далее.

В появившемся окне укажите точное местоположение файла ‘wsdl’.

Нажмите «Далее.

В появившемся окне сохраните параметры по умолчанию и нажмите Далее. После нажатия Next, появится следующее окно. Укажите место, где будет размещен код клиента, как показано ниже.

Примечание: на этот раз не выбирайте опцию «Добавить банки кодов AXIS2».

При нажатии Готово появляется следующее окно.

При обновлении папки ‘src’ вы можете увидеть код на стороне клиента в форме MathServiceStub.java и MathServiceCallbackHandler.java.

Напишите код клиента вокруг заглушек, сгенерированных на предыдущем шаге, как показано ниже. Есть два типа клиентов. Синхронный / блокирующий клиент. Асинхронный / неблокирующий клиент. Сначала мы обсудим синхронный клиент.
>> код 2

Выполнить клиент. При успешном выполнении вы увидите следующий вывод в консоли Eclipse.

Если вы помните, при создании клиентских заглушек мы выбрали генерацию синхронных и асинхронных клиентов. Чтобы написать асинхронный клиент, нам нужно написать класс CallBack и зарегистрировать клиента в этом классе. Давайте напишем класс обратного вызова.

package org.example.math;

import org.example.math.MathServiceStub.AddResponse;

public class CallBack extends MathServiceCallbackHandler {
private boolean complete = false;

public void receiveResultAdd(AddResponse result) {
System.out.println("Result in Callback " + result.getAddResponse().getResult());
complete = true;
}

public boolean isComplete() {
return complete
}
}

Давайте напишем клиент, который использует вышеупомянутый класс обратного вызова.

public static void main(String[] args)

MathServiceStub stub

try {
stub = new MathServiceStub("http://localhost:8080/axis2/services/mathService");
MathServiceStub.Add add = MathServiceStub.Add();
MathServiceStub.MathInput input = new MathServiceStub.MathInput();
input.setX(3);
input.setY(5)
add.setAdd(input);
CallBack cb = new CallBack();
stub.startAdd(add, cb);

while(!cb.isComplete()) {
System.out.println("Do Something");
}
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}

 

При выполнении вышеупомянутого клиента вы должны увидеть следующий вывод. Вывод «Do Something» указывает на то, что клиент не ожидал ответа от сервера.

  

Вывод

Веб-сервисы — это ключевая технология на пути к сервис-ориентированным архитектурам. Они также играют важную роль в компьютерной парадигме Web 3.0. Apache AXIS2 является превосходной платформой SOAP и при использовании вместе с Eclipse IDE, AXIS2 Code Generator и плагинами Service Archiver значительно упрощает процесс разработки и развертывания веб-сервисов. Это повышает производительность труда разработчиков, автоматизируя задачи и скрывая некоторые сложности, связанные с разработкой и развертыванием.

Рекомендации

  1. Устанавливается Tomcat [ http://tomcat.apache.org ]
  2. AXIS 2 Framework [ http://ws.apache.org/axis2 ]
  3. Eclipse IDE [ http://www.eclipse.org/downloads ]
  4. Плагин Aclis2 Code Generator для Eclipse
  5. Подключаемый модуль Eclipse AXIS2 Service Archiver [ http://ws.apache.org/axis2/tools/index.html ]

об авторе

имеет более чем 10-летний опыт разработки программного обеспечения с использованием Java, J2EE, технологий интеграции на основе обмена сообщениями. Он также является сертифицированным корпоративным архитектором Sun и разработчиком Java.