Главная страница
Навигация по странице:

  • Использование описаний WSDL

  • Листинг 3.17. Web-служба, использующая сеанс связи

  • Листинг Клиент Web-службы, создающий сеанс связи

  • Web-служб средствами Java

  • http://www.w3.org/TR/wsdI.

  • 190 Разработка Web-служб средствами Java

  • Листинг 4.2. Описание Web-службы EchoService

  • Конкретизация описания WSDL

  • Дополнительные элементы протокола SOAP

  • Листинг 4.3. Схема вложенности элементов протокола SOAP

  • Дополнительные элементы протокола HTTP

  • Разработка веб-служб средствами Java. Ильдар ХабибуллинРазработкаWebслужбсредствами


    Скачать 9.24 Mb.
    НазваниеИльдар ХабибуллинРазработкаWebслужбсредствами
    АнкорРазработка веб-служб средствами Java.pdf
    Дата03.02.2018
    Размер9.24 Mb.
    Формат файлаpdf
    Имя файлаРазработка веб-служб средствами Java.pdf
    ТипКнига
    #15148
    КатегорияИнформатика. Вычислительная техника
    страница9 из 21
    1   ...   5   6   7   8   9   10   11   12   ...   21
    />


    Глава 3. Протокол SOAP и Web Services
    />
    />
    />


    name="handlerClass"
    />



    />

    />




    Разработка Web-служб средствами Java
    Конфигурационный DD-файл запоминается обычно под именем deploy.wsdd. После его создания надо перейти в каталог с этим файлом и выполнить команду
    $
    deploy.wsdd
    Класс установит описанную Web-службу в Axis. На консоли появятся сообщения
    Processing f i l e deploy.wsdd
    Done
    После этого клиент может обратиться к Web-службе, воспользовавшись ее адресом например,
    С помощью утилиты AdminClient можно просмотреть описания всех Web- служб, установленных на данной машине. Для этого надо набрать команду
    $
    list
    Для удаления Web-службы из Web-контейнера создается файл undeploy.wsdd.
    Он похож на DD-файл, но корневым элементом служит элемент
    Кроме установки Web-службы в Web-контейнер, утилита AdminClient соз- дает все необходимые для ее работы файлы, в том числе клиентские за- глушки. Пример клиента, использующего их, приведен в листинге 3.18.
    Использование описаний WSDL
    Конфигурационный DD-файл записывается в формате, специально разра- ботанном для Axis. Такой файл не переносим в другие системы обеспечения
    Web-служб. Но в Axis можно использовать и другое средство описания Web- служб — язык WSDL.
    В своей работе Axis широко использует описания WSDL (см. главы 2, 4),
    даже если вы их не сделали. Наберите в браузере Internet Explorer строку и вы увидите в окне брау- зера описание Web-службы сделанное на языке WSDL. Оно сгенерировано автоматически методами класса
    Создание WSDL-файла по классу Java
    По имеющемуся откомпилированному классу или интерфейсу Axis может создать его описание на языке WSDL. Для этого в составе Axis есть класс
    Он работает из командной строки примерно так:
    $
    -o echo.wsdl \
    -l"http://localhost:8080/axis/services/echo" \
    -n "urn:echo" -p"echoservice" urn:echo EchoService

    Глава 3. Протокол SOAP и Web Services
    В этой командной строке за флагом -о записывается имя создаваемого
    WSDL-файла echo.wsdl.
    За флагом -1 идет URI, последнее имя которого, echo, будет именем порта в WSDL-файле.
    За флагом -п стоит идентификатор пространства имен WSDL-файла
    За флагом -р расположены два параметра через пробел: параметр echoservice — это имя пакета, а параметр
    — идентификатор про- странства имен.
    Наконец, последнее имя в командной строке — это имя клас- са, для которого создается описание WSDL.
    В результате выполнения этой команды в текущем каталоге создается файл echo.wsdl с описанием WSDL класса Echoservice.
    Создание Web-службы по WSDL-файлу
    По имеющемуся описанию Web-службы на языке WSDL можно построить
    Web-службу с помощью класса
    Для этого надо набрать в ко- мандной строке следующее:
    $
    -o . -d Session -s \
    -p echo.ws echo.wsdl
    В этой командной строке флаг -о указывает каталог, в который надо помес- тить создаваемые файлы. В данном случае это текущий каталог. На это ука- зывает точка, следующая за флагом -о.
    Флаг -d определяет продолжительность работы Web-службы одним из трех слов:
    • Application — один экземпляр Web-службы обслуживает все запросы;
    Request — для обслуживания каждого запроса создается свой экземпляр
    Web-службы (по умолчанию);

    — экземпляр Web-службы образует сеанс связи с клиентом.
    Флаг -s указывает на то, что следует создать все файлы, необходимые для работы сервера Web-службы.
    За флагом -р идет имя пакета echo.ws, в котором будут лежать создаваемые классы.
    Наконец, последнее слово в командной строке — это имя WSDL-файла echo.wsdl.

    Разработка Web-служб средствами Java
    Команда создаст в текущем каталоге echo подкаталог ws, а в нем множество файлов, образующих заглушки, скелетоны и вспомогательные файлы, необходимые для работы удаленного объекта системы
    В их числе есть и конфигурационные DD-файлы и undeploy.wsdd.
    Среди этих файлов находится файл в кото- ром надо реализовать методы Web-службы, как это обычно делается в сис- теме RMI [10].
    Удаленный интерфейс системы RMI заносится в файл EchoServicePortType.java,
    а его клиентская заглушка — в файл
    Клиент создает заглушку методом getEchoServicePort о класса-фабрики,
    записанного в файл EchoService.java.
    После того как это сделано, надо откомпилировать все файлы в каталоге echo/ws:
    $
    Потом перейти в каталог ws и установить созданную Web-службу в сервер приложений:
    $
    Сеанс связи с Axis
    Еще одна интересная особенность Axis — он может установить сеанс связи с клиентом. Сеанс связи описан интерфейсом session, реализованным дву- мя классами — классом работающим через заголовок SOAP- послания, и классом AxisHttpSession, создающим сеанс связи через серв- лет при помощи cookie [10].
    В первом случае в заголовок SOAP-послания записывается блок содержащий уникальный идентификатор сеанса. Все дейс- твия по его записи и проверке выполняются методами класса
    И в клиенте и в сервере должно находиться по эк- земпляру этого класса.
    Во втором случае обычным образом записываются и проверяются поля set-
    И Cookie [10] HTTP-заголовка.
    Методы сеанса
    Интерфейс описывает метод public void key, Object value);
    задающий идентификатор сеанса key со значением value.

    Глава 3. Протокол SOAP и Web Services
    Все идентификаторы сеанса можно получить методом public Enumeration а значение отдельного идентификатора key — методом public Object key);
    Идентификатор key удаляется методом public void key);
    Сеанс завершается, когда в течение времени timeout, определенного методом public void timeout);
    не было выполнено ни одного действия. Время отсчитывается в секундах.
    Узнать это время можно методом public int
    Если надо продлить сеанс, то можно воспользоваться еще одним методом public void интерфейса
    Этот метод "помечает" сеанс связи, сообщая, что он только что использовался.
    Класс simplesession реализует все методы интерфейса session, добавляя к ним конструктор по умолчанию, начинающий сеанс связи, и метод public long
    ;
    возвращающий время последнего действия в сеансе.
    Класс AxisHttpSession работает в сервлетах в рамках сеанса класса экземпляр которого передается или записывается прямо в конструкторе public session);
    или косвенно, через запрос req, в конструкторе public req);
    Поэтому, кроме методов интерфейса session, в нем есть методы доступа к сеансу сервлета public void session);
    public HttpSession
    Создание сеанса средствами Axis
    Хотя разработчик может "вручную" создать сеанс связи с Web-службой ме- тодами классов
    И AxisHttpSession, В Axis есть средства, ав-

    Разработка Web-служб средствами Java
    томатизирующие этот процесс. Рассмотрим простейший пример Web- службы, которая при первом обращении к ней запоминает имя клиента и использует его в дальнейшей работе с тем же клиентом. Эта Web-служба приведена в листинге 3.17.
    * Листинг 3.17. Web-служба, использующая сеанс связи
    public class private String lastName = " " ;
    public String name){
    String resp = " " ;
    if resp = "Рады снова видеть Вас, ";
    else resp = "Здравствуйте, ";
    lastName = name;
    return resp + name + "\n";
    Для того чтобы Axis организовал сеанс связи с Web-службой не создавая при каждом обращении к ней новый экземпляр, в ее конфигу- рационном файле надо записать элемент
    , дающий значение "Session" параметру "scope":


    />



    Глава 3. Протокол SOAP и Web Services 181
    Если Web-служба создается по ее описанию WSDL, то достаточно при вы- зове утилиты записать параметр -d session, как это сделано в примере использования этой утилиты, приведенном выше.
    Это еще не все. Сервер создаст сеанс связи только по прямому указанию клиента. Указание дается обращением к методу public void session);
    класса-заглушки stub, реализующего в Axis одноименный интерфейс систе- мы
    Axis, точнее, утилиты или автомати- чески создают расширение класса stub, в нашем примере имя этого расши- рения —
    Все вместе выглядит так, как пока- зано в листинге 3.18.
    Клиент, записанный в листинге 3.18, пользуется Web-услугой sayHelloO
    два раза. Первый раз Web-услуга говорит ему: "Здравствуйте, ", второй раз — "Рады снова видеть Вас, ".
    ; Листинг
    Клиент Web-службы, создающий сеанс связи
    public class public static void args){
    String name
    "";
    if (args[0] != null) name = args[0];
    // Класс-фабрика HelloSession создан утилитой
    HelloSession fact = new
    HelloSessionPortType service =
    HeiioSessionSoapBindingStub stub =
    (HeiioSessionSoapBindingStub)service;

    Web-служб средствами Java
    e){

    ГЛАВА 4
    Описание Web Services
    на языке WSDL
    В главе 2 мы говорили о том, что после создания Web-службы на сервере в виде сервлета, страницы JSP, JWS-файла, компонента EJB или другого объ- екта, следует описать состав и возможности Web-службы на языке, не зави- сящем от платформы, операционной системы, системы программирования,
    использованной при создании Web-службы. Это описание регистрируется в общедоступном месте Интернета, например, реестре UDDI или ebXML, или хранится на сервере Web-службы. Описание должно содержать полную и точную информацию обо всех услугах, предоставляемых Web-службой, спо- собы получения услуг, содержимое запроса на получение услуги, формат предоставляемой информации.
    Одно из средств точного и единообразного описания Web-услуг — язык
    WSDL, созданный консорциумом W3C. Этот язык — еще одна реализа- ция XML. Его последняя рекомендованная спецификация всегда публи- куется на странице http://www.w3.org/TR/wsdI. Во время написания кни- ги на черновой стадии была версия WSDL 1.2, которую мы и опишем в этой главе.
    Состав документа WSDL
    Корневым элементом документа
    — описания WSDL — служит эле- мент . В этом элементе необязательным атрибутом name мож- но дать имя описанию. Кроме того, это удобное место для введения исполь- зуемых в описании пространств имен.
    Описания WSDL активно используют различные пространства имен. Кро- ме собственных имен, язык WSDL часто использует имена типов и эле-

    184 Разработка Web-служб средствами Java
    ментов языка описания схем XSD
    главу 1) и имена языка протокола
    SOAP. Пространство имен языка WSDL часто описывается как простран- ство имен по умолчанию. Идентификатор пространства имен последней на время написания этих строк версии WSDL 1.2 был равен
    http://www.w3.org/2002/07/wsdl. Целевое пространство имен, идентифика- тор которого определяется атрибутом обычно получает префикс tns (target namespace).
    В корневой элемент вкладываются элементы шести основ- ных и двух дополнительных типов. Все элементы необязательны, их может быть любое количество, за исключением элемента , который может встретиться в документе только один раз. У каждого элемента есть имя, оп- ределяемое обязательным атрибутом name. Элементы ссылаются друг на друга с помощью этих имен. Вот элементы, вкладываемые в корневой эле- мент
    — определяет сложные типы, используемые Web-службой, с по- мощью языка XSD или другого языка описания типов. Этот элемент не нужен, если Web-служба применяет только простые типы, описанные в языке XSD.
    — описывает каждое SOAP-послание: запрос, ответ, пересыл- ку документов. В этот элемент вкладываются элементы
    , описы- вающие неделимые с точки зрения WSDL части послания. Для посланий процедурного типа каждый элемент может описывать имя и тип одного аргумента запроса или тип возвращаемого значения. Для посла- ний документного типа элементы могут описывать каждую часть послания "multipart/related". Это абстрактное описание затем конкретизируется элементами .

    — описывает интерфейс Web-службы, называемый в языке
    WSDL пунктом назначения (endpoint) или портом (port) прибытия посла- ния. Он описывается как набор Web-услуг, называемых в языке WSDL
    операциями. Переводя это описание на язык программирования можно заметить, что порт хорошо соотносится с интерфейсом Java, а каждая операция — с методом этого интерфейса. Операции описываются вло- женными элементами , описывающими каждую отдельную услугу. Услуга описывается действиями, которые разбиты на четыре ви- да. Это два простых действия: "получение послания", "отправка ответа",
    и два комбинированных действия: "отправка послания — получение от- вета" или, наоборот, "получение послания — отправка ответа". Получе- ние и отправка, в свою очередь, описываются вложенными элементами
    и а сообщение об ошибке — элементом
    По- лучаемые и отправляемые послания уже должны быть описаны элемен- тами ,
    И ссылаются на
    НИХ СВОИМ атрибутом message.

    Глава 4. Описание Web Services на языке WSDL 185
    — перечисляет вложенными элементами на- бор портов, связанных с одной Web-службой. Один и тот же порт может быть связан с несколькими службами.
    — описывает конкретный формат пересылки послания: про- токолы, такие как SOAP или HTTP, способы упаковки послания, тип его содержимого: HTML, XML или другой послания. Каждый элемент может быть связан с несколькими такими элемента- ми, по одному для каждого способа пересылки. В этот элемент вклады- ваются элементы, определенные в схеме выбранного протокола.
    — указывает местоположение Web-службы как один или не- сколько портов. Каждый порт описывается вложенным элементом
    , содержащим адрес интерфейса Web-службы, заданный по пра- вилам выбранного в элементе способа пересылки.
    Кроме этих шести основных элементов есть еще два вспомогательных эле- мента.
    — включает файл с XSD-схемой описания WSDL или другой
    WSDL-файл.
    — комментарий. Его можно включить в любой элемент описания WSDL.
    Можно сказать, что элементы , и показыва- ют, ЧТО есть в описываемой Web-службе, какие услуги она предоставляет,
    как организованы услуги, какие типы данных у этих услуг.
    Элементы объясняют, КАК реализована Web-служба, каков про- токол передачи посланий: HTTP, SMTP или какой-то другой, а также задает технические характеристики передачи данных.
    Наконец, элементы показывают, ГДЕ находится Web-служба,
    связывая описание с конкретными адресами Web-службы.
    Структура документа WSDL показана в листинге 4.1. Символы в квадратных скобках не содержатся в документе. Они показывают повторяемость эле- мента или атрибута в описании Web-службы:
    • символ [?] означает, что элемент или атрибут может появиться в доку- менте нуль или один раз;
    • символ [*] означает, что элемент может появиться нуль или несколько раз;
    • символ [+] означает, что элемент может появиться один или несколько раз;
    • отсутствие символа в квадратных скобках означает, что атрибут должен появиться ровно один раз.

    186 Разработка Web-служб средствами Java
    j
    Схема
    1
    version="1.0" ?>
    [?]
    пространства имен"
    пространства имен" [*] >
    пространства имен"
    /> [*]
    [?]
    Произвольный комментарий
    [?]
    [?]
    Описания сложных и нестандартных
    [*]
    записывается описание сложных типов —>

    [*]
    ion> [?]
    Абстрактное описание SOAP-послания как набора составляющих его частей.
    пате="имя части (аргумента метода)"
    элемента" [?]
    аргумента" [?] /> [*]

    Глава 4. Описание Web Services на языке
    187
    [*]
    [?]
    Абстрактное описание как набора операций (услуг).
    пате="имя услуги"> [*]
    [?]
    Описание услуги как получения (input) и отправки (output, fault) посланий.
    ion>
    соотв. элемента "> [?]
    [?]
    Получаемое послание.
    соотв. элемента "> [?]
    [?]
    Отправляемое пате="имя"
    соотв. элемента "> [*]
    [?]
    Отправляемое сообщение об operation пате="имя"> [*]

    Разработка Web-служб средствами Java
    соотв. элемента "/> [+]
    соотв. элемента "> [*]
    . . . / > [ ? ]
    Сюда записываются элементы, описывающие детали конкретного протокола. Они определяются в схеме этого протокола.
    пате="имя"> [*]
    . . . / > [ ? ]
    Сюда записываются элементы, описывающие детали конкретной операции.
    [? ]
    . . . / > [ ? ]
    Сюда записываются элементы, описывающие детали конкретного получаемого послания.
    [?]
    . . . / > [ ? ]

    Глава 4. Описание Web Services на языке WSDL
    Сюда записываются элементы, описывающие детали конкретного отправляемого послания.
    [*]
    . . . /> [?]

    Сюда записываются элементы, описывающие детали конкретного сообщения об

    соотв. элемента "> [*]
    [?]
    Описание интерфейса Web-службы как набора портов.
    соотв. элемента "> [*]
    . . . / > [ ? ]
    Сюда записывается обязательный и единственный адрес интерфейса Web-службы, записанный по правилам протокола, указанного в элементе .

    190 Разработка Web-служб средствами Java

    Каждый конкретный протокол пересылки посланий — SOAP, HTTP, FTP,
    SMTP — добавляет к шести основным и двум вспомогательным элементам языка WSDL свои дополнительные элементы, описывающие особенности данного протокола.
    Приведем простой пример. В листинге 3.14 мы записали в виде класса Java простейшую Web-службу, возвращающую без всякой обработки присланный запрос:
    public class public String req){
    return req;
    В листинге 4.2 приведено описание этой Web-службы на языке WSDL, ис- пользующее протокол SOAP.
    Листинг 4.2. Описание Web-службы EchoService
    version="1.0"
    ?>
    />

    name="getEchoResponse">
    />


    Глава 4. Описание Web Services на языке
    191
    />
    />


    />

    soapAction="" />
    namespace="http://echoservice.com/echoservice.wsdl"
    use="encoded" />

    "http://schemas.xmlsoap.org/soap/encoding/"
    namespace="http://echoservice.com/echoservice.wsdl"
    />


    Разработка Web-служб средствами Java

    />


    В листинге 4.2 мы в элементе определили префиксы всех нужных нам пространств имен. Далее мы описали запрос и ответ в двух
    Мы дали ИМ
    "getEchoRequest" И "getEchoRe- sponse". В запросе один аргумент типа string. Этот тип определен в языке XSD. Мы дали аргументу имя req, совпадающее с именем аргумента метода
    . Значению, возвращаемому методом, мы дали имя return,
    его тип тоже xsd: string.
    Имена "getEchoRequest" И "getEchoResponse" ИСПОЛЬЗОВаны В следующем элементе для указания входных и выходных параметров Web- услуги. В
    вложен один элемент . Это означает, что Web- служба предоставляет одну услугу, имя которой "getEcho" совпадает с име- нем метода, выполняющего эту услугу. В элементе указаны входной и выходной параметры услуги.
    Затем, элементом мы указали один способ пересылки посла- ний — SOAP-послания в процедурном стиле, пересылаемые по протоколу
    HTTP, на что указывает элемент

    Если применяется документный стиль SOAP, то в атрибуте style записыва- ется значение "document".
    Далее в элементе повторяется описание операции, но уже в тер- минах выбранного протокола SOAP.
    Наконец, в элементе вложенным элементом связываем элемент с элементом
    , указывающим адрес, по которо- му расположена Web-служба.

    Глава 4. Описание Web Services на языке WSDL
    В листинге 4.2 имена с префиксом soap конкретизировали описание посла- ния и способы его пересылки. Посмотрим, какие конкретные протоколы предлагает спецификация WSDL 1.2.
    Конкретизация описания WSDL
    Спецификация WSDL 1.2 задает правила описания адреса Web-службы и предоставляемых ею услуг для протокола SOAP, методов GET и POST про- токола HTTP и — для пересылки документов с различными МШЕ-типами.
    Эти правила записываются дополнительными элементами XML, специфич- ными для каждого протокола.
    Дополнительные элементы протокола SOAP
    При использовании протокола SOAP в элемент и в элемент
    , точнее, во вложенный в него элемент
    , документа WSDL
    вкладывается несколько дополнительных элементов. Для версии WSDL 1.2
    они определены в пространстве имен с идентификатором
    Будем считать, что префиксом имен из этого пространства выбрано слово soap.
    Непосредственно в элемент обязательно вкладывается элемент
    , определяющий необязательным атрибутом s t y l e доку- ментный ("document") или процедурный стиль SOAP. По умолча- нию принимается документный стиль. Второй, обязательный атрибут t r a n s p o r t определяет строкой транспортный протокол пере- сылки SOAP-посланий. Протокол HTTP определяется строкой для других протоколов в спецификации нет никаких обозначений.
    В элемент — тот, что вложен в элемент
    — вкладывается необязательный элемент . Он выбирает документный или процедурный стиль операции необязательным атрибутом style, принимающим значения или "document", а также определяет поле заголовка soAPAction необязательным атрибутом soapAction.
    В элементы и , вложенные в элемент , вкла- дываются
    И , а В

    вкладывается элемент
    В элемент можно вло- жить один или несколько элементов
    У каждого из этих элементов есть обязательный атрибут use, принимающий одно из двух значе- ний — "literal" или "encoded". Он указывает способ сериализации заголовка или содержимого послания.
    7 Зак. 748

    194 Разработка Web-служб средствами Java
    Значение "encoded" атрибута use говорит о том, что послание использует способы сериализации, описание которых надо искать через атрибуты type,
    namespace И
    Значение "literal" атрибута use указывает, что способы сериализации опре- делены в схеме документа.
    В элемент
    , вложенный в элемент , вкладывается ровно один элемент , в атрибуте location которого записывается адрес интерфейса Web-службы в виде строки URI.
    Примеры всех этих элементов уже приведены в листинге 4.2. В следующем листинге 4.3 показана схема расположения элементов протокола SOAP (они помечены префиксом soap) внутри элементов WSDL. Символы в квадрат- ных скобках имеют то же значение, что и в листинге 4.1.
    . Листинг 4.3. Схема вложенности элементов протокола SOAP
    .... >

    [?]
    transport="cTpoKa URI" />
    .... >
    URI" [?]
    [?] /> [?]

    URI"
    [
    header u s e = " l i t e r a l encoded"
    encoding [?]
    [?]

    Глава 4. Описание Web Services на языке WSDL 195
    use="literal encoded"
    [?]
    use="literal | encoded" [?]
    URI"
    [
    encoded"
    URI" [?]
    [?]
    | encoded"
    URI"



    encoded"
    URI"



    196 Разработка Web-служб средствами Java


    в виде строки
    />


    Дополнительные элементы протокола HTTP
    Дополнительные элементы протокола HTTP определены в пространстве имен с идентификатором http://www.w3.org/2002/07/wsdl/http. Будем счи- тать, что этим именам дан префикс http.
    Для описания пересылки посланий по протоколу HTTP вводятся три до- полнительных элемента.
    Элемент
    1   ...   5   6   7   8   9   10   11   12   ...   21


    написать администратору сайта