Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

IPZ / IPZ_lab3_WebServices

.doc
Скачиваний:
9
Добавлен:
07.02.2016
Размер:
100.35 Кб
Скачать

Лабораторная работа 3

"API JAX-WS"

Цель – приобрести навыки работы с API "JAX-WS" (Java API for XML Web Services).

1. Теоретические сведения.

"JAX-WS" является частью платформы "J2EE" – набора "Java"-спецификаций и документаций, созданных с ориентацией на клиент-серверную архитектуру для решения задач масштабов предприятий (масштабируемость и переносимость как преследуемые цели).

Использование API "JAX-WS" при разработке Web-сервисов (сервисов) предоставляет следующее преимущество:

- упрощение непосредственно процесса разработки, а также процедуры развертывания полученного программного продукта на сервере приложений. В качестве последнего может, в частности, быть использован "Apache Tomcat 7.0" [3], "Oracle GlassFish Server 3.1" [4] или "JBoss Application Server 7" [5].

В работе будет использоваться сервер "GlassFish" по следующим причинам:

- является интегрированным с IDE "NetBeans 7.2.1";

- предоставляет средства тестирования сервисов (это снимает потребность в создании интерфейса клиента с целью проверки работоспособности сервисов).

Для запуска "GlassFish"-сервера в среде "NetBeans" необходимо выполнить такую последовательность действий:

- Вкладка "Службы" > "Серверы" > "GlassFish Server 3.1.2" > "Запустить" (процесс запуска займе порядка десятков секунд).

Для перехода к панели администрирования (управления развернутыми сервисами в частности) предназначен порт "4848". С этой целью в Web-браузере необходимо ввести запрос следующего вида:

> http://<<host_name>>:4848/common/index.jsf

// для случая обращения к локальному серверу

// <<host_name>> == localhost (127.0.0.1)

Например, элементы Web-интерфейса "Deploy an Application" и "List Deployed Applications" предоставляют средства развертывания сервисов и управления (мониторинга в частности) уже развернутыми сервисами соответственно.

Для тестирования сервисов и просмотра их wsdl-описаний используются порт "8080":

> http://<<host_name>>:8080/<<project_name>>/ \

<<service_name>>Service?wsdl

> http://<<host_name>>:8080/<<project_name>>/ \

<<service_name>>Service?Tester

// <<project_name>> - название созданного "NetBeans"-проекта

// <<service_name>> - "имя" Java-класса сервиса

Архитектура "JAX-WS" приведена на рис. 1.

Рисунок 1 – Ключевые компоненты и связи между ними

На рис. 1 компонент "SOAP" представляет одноименный протокол (Simple Object Access Protocol) обмена структурированными сообщениями между клиентским интерфейсом и сервисом (на основе XML).

В общем случае интерфейс клиента может быть реализован следующими путями:

- в качестве консольного приложения (выбор этого пути можно рассматривать в качестве альтернативы тестированию);

- с использованием "JSP"- и "Servlet"-технологий.

Процедура создания Web-ориентированного "NetBeans"-проекта следующая:

- "Ctrl+Shift+N" > "Java Web" > "Web-приложение".

В общем случае, преследуемая конечная цель при создании подобного проекта заключается в развертывании Web-приложения на заданном сервере приложений. В связи с этим, приведем "Java"-файлы (классы) в составе проекта:

- интерфейс сервиса (задание прототипов реализуемых методов);

- класс, включающий непосредственно реализации методов ("имя" класса ассоциируется с "именем" сервиса);

- класс, включающий метод "void main(String[] args)", в теле которого осуществляется вызов метода, предназначенного для развертывания сервиса на сервере приложений (метод "publish()" статического класса "Endpoint"):

public static Endpoint publish(java.lang.String address,

java.lang.Object implementor);

// address – URI, ассоциированный с интерфейсом сервиса;

// implementor – экземпляр сервиса.

Шаблоны соответствующих "Java"-классов приведены в листингах 1 – 3.

Листинг 1 – Шаблон интерфейса сервиса

import javax.jws.WebMethod;

import javax.jws.WebService;

@WebService

public interface ServiceInterface {

@WebMethod <<method_type_1>> <<method_name_1>>(<<operands>>);

@WebMethod <<method_type_2>> <<method_name_2>>(<<operands>>);

...

// использование аннотаций "@WebService" и "@WebMethod" есть

// путь специфицирования интерфейса сервиса и прототипов

// реализуемых сервисом методов соответственно.

}

Листинг 2 – Шаблон реализации методов сервиса

import javax.jws.WebService;

@WebService(endpointInterface = "ServiceInterface")

// значение опционального параметра (String) endpointInterface

// должно соответствовать "имени" интерфейса

public class ServiceImpl implements ServiceInterface {

@Override

// директива "@Override" используется с целью проверки, что

// метод переопределен

public <<method_type_1>> <<method_name_1>> (<<operands>>) {

...

}

@Override

public <<method_type_2>> <<method_name_2>> (<<operands>>) {

...

}...

}

Листинг 3 – Шаблон "main()"-класса

import javax.xml.ws.Endpoint;

public class ServicePublisher {

public static void main(String[] args) {

Endpoint.publish("URI",new ServiceImpl());

// аргумент "URI" есть строка следующего формата:

// "http://<<domain_name>>:<<port>>/<<project_name>>/ \

// <<service_interface_name>>"

// "URI" может иметь, например, следующий вид:

// "http://localhost:8080/WebProject/ServiceInterface"

}

}

2. Выполнение работы.

Задание 1. Развертывание и тестирование сервиса.

Вариант 1. В сервисе должны быть реализованы следующие методы:

- "метод 1.1" – возвращает строку символов обратной очередности (например, "abc" -> "cba");

- "метод 1.2" – символы 'a' входной строки заменяются на '_';

- "метод 1.3" – в качестве аргумента передается строка, каждый символ которой есть десятичное число; результат должен представлять собой строковый эквивалент суммы элементов входной строки в бинарном виде (например, "123" -> "110").

Вариант 2. Реализуемые методы следующие:

- "метод 2.1" – в качестве результата возвращает число единиц в бинарном коде, переданном в виде строки;

- "метод 2.2" – на вход подается десятичное целое число, представленное в виде строки; результат работы метода есть булево значение ("TRUE" – сумма 2-х первых цифр равна сумме двух последних цифр; в противном случае – "FALSE");

- "метод 2.3" – в качестве аргумента передается строка; в случае, если строка содержит подпоследовательность вида "12", в качестве результата формируется новая строка вида "…(12)…" (например, "ab3c12d" -> "ab3c(12)d"); в противном случае возвращается строка символов обратной очередности ("abc" -> "cba").

Примечание 1: в табл. 1 приведены методы, рекомендуемые к использованию.

Таблица 1 – Методы работы со строками

Метод

Описание

1

public char CharAt(int index);

- получение заданного символа строки ();

2

public StringBuilder append \

(char c);

- формирование строки;

3

public String toString();

- преобразование объекта в строку;

4

public static String \ toBinaryString(int i);

- преобразование целого значения в бинарную строку-эквивалент;

5

static Integer valueOf(char c);

- получение "ASCII"-кода символа.

Примечание 2: формат (шаблон) результата тестирования (для "метода 1.3" в частности) приведен на листинге 4.

Листинг 4 – Снимок окна Web-браузера

Method_2 Method invocation

---------------------------------------------

Method parameter(s) // переданные операнды и их значения

Type

Value

java.lang.String

12

---------------------------------------------

Method returned

java.lang.String : "11" // результат работы метода

---------------------------------------------

SOAP Request // SOAP-запрос к сервису

---------------------------------------------

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Header/>

<S:Body>

<ns2:Method_2 xmlns:ns2="http://my/">

<arg0>12</arg0> // входные данные

</ns2:Method_2>

</S:Body>

</S:Envelope>

---------------------------------------------

SOAP Response // SOAP-ответ (сервис -> интерфейс клиента)

---------------------------------------------

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body>

<ns2:sayByeResponse xmlns:ns2="http://my/">

<return>11</return> // возвращаемое значение

</ns2:sayByeResponse>

</S:Body>

</S:Envelope>

Часть 2. Создание интерфейса клиента.

Контрольные вопросы:

  1. Прокомментировать архитектуру "JAX-WS" (рис. 1).

  2. Кратко описать назначения "Java"-файлов, созданных с целью развертывания сервиса. Дать определение процедуре развертывания.

  3. Прокомментировать аннотации (директивы) "@WebService" и "@WebMethod". Верно ли утверждение, что сервис может быть ассоциирован лишь с одним методом?

  4. Пояснить обоснованность проведения тестирования сервиса: указать специфику, а также выделить преимущества в сравнении с использованием консольной реализации интерфейса клиента.

Литература

  1. Vohra, D. Java 7 JAX-WS Web Services: A practical, focused mini book for creating Web Services in Java 7 [Text] / D. Vohra. – Birmingham-Mumbai.: Packt Publishing, 2012. – 64 p. – ISBN 978-1-84968-720-1.

  2. Проектирование и разработка Web-сервисов JAX-WS 2.0 [Электронный ресурс] / Н. Балани, Р. Хати. – Режим доступа: \www/ URL: http://www.ibm.com/developerworks/ru/edu/ws-jax/section2.html. – Загл. с экрана.

  3. Apache Tomcat [Электронный ресурс] – Режим доступа: \www/ URL: http://tomcat.apache.org. – Загл. с экрана.

  4. Oracle GlassFish Server [Электронный ресурс] – Режим доступа: \www/ URL: http://glassfish.java.net/. – Загл. с экрана.

  5. JBoss Application Server 7 [Электронный ресурс] – Режим доступа: \www/ URL: http://www.jboss.org/jbossas. – Загл. с экрана.

© Шкарупило В.В., Ильяшенко М.Б. 5

Соседние файлы в папке IPZ