Компания IBM
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 529 / 63 | Оценка: 4.48 / 4.37 | Длительность: 08:45:00
Лекция 3:

Улучшение работы приложения фирмы ITSO Electronics с помощью Web-сервисов

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >

3.5.3 Сгенерированный документ WSDL

Приведенная ниже URL-команда Lotus Domino возвращает документ WSDL для Web-сервиса в ответ на HTTP GET, используя суффикс ?WSDL:

http://servername/databasename.nsf/webservicename?WSDL (http://названиесервера/названиебазыданных.nsf/названиеWeb-сервиса?WSDL)

Например, в нашем сценарии была использована следующая команда:

http://domino7appdev.cam.itso.ibm.com/itso/webservices.nsf/ProductInfo?WSDL

В примере 3.2 показан полученный в результате WSDL-документ.

Для более подробного описания документа WSDL см. "Улучшение работы приложения фирмы ITSO Electronics с помощью Web-сервисов" , "Документ WSDL".

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:
apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="urn:DefaultNamespace" xmlns:intf="urn:DefaultNamespace"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://
schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.
w3.org/2001/XMLSchema"
targetNamespace="urn:DefaultNamespace">
  <wsdl:message name="GETPRODUCTNAMERequest">
    <wsdl:part name="PRODUCTNUMBER" type="xsd:string"/>
  </wsdl:message>
  <wsdl:message name="GETPRODUCTNAMEResponse">
    <wsdl:part name="GETPRODUCTNAMEReturn" type="xsd:string"/>
  </wsdl:message>
  <wsdl:portType name="ProductInfo">
    <wsdl:operation name="GETPRODUCTNAME" parameterOrder="PRODUCTNUMBER">
      <wsdl:input message="impl:GETPRODUCTNAMERequest"
      name="GETPRODUCTNAMERequest"/>
      <wsdl:output message="impl:GETPRODUCTNAMEResponse"
      name="GETPRODUCTNAMEResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="DominoSoapBinding" type="impl:ProductInfo">
    <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="GETPRODUCTNAME">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="GETPRODUCTNAMERequest">      

<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace"
use="encoded"/>
      </wsdl:input>
      <wsdl:output name="GETPRODUCTNAMEResponse">

<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace"
use="encoded"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="ProductInfoService">
    <wsdl:port binding="impl:DominoSoapBinding" name="Domino">
      <wsdlsoap:address
location="http://domino7appdev.cam.itso.ibm.com:80/itso/webservices.nsf/
ProductInfo?OpenWebService"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
Пример 3.2. Код, полученный от сервера при обращении к Web-сервису с суффиксом ?WSDL

Полученный в результате генерации с суффиксом ?WSDL код сложен, однако это не важно, так как документы WSDL считываются компьютерами, а не пользователями. Например, Lotus Domino Designer может импортировать документ WSDL и создавать каркасный класс в LotusScript или Java. Обсуждением данной темы мы занимались в "Улучшение работы приложения фирмы ITSO Electronics с помощью Web-сервисов" , "Импортированный WSDL".

3.5.4 Тестирование простого Web-сервиса

Существует множество приложений, которые позволяют тестировать и использовать Web-сервисы. Для достижения целей, поставленных в этой книге, мы будем использовать IBM Rational \text{\textregistered} Application Developer. Чтобы начать тестирование Web-сервисов, используя Rational Application Developer, выполните приведенную ниже последовательность действий.

  1. Запустите Rational Application Developer.
  2. Выберите Run => Launch the Web Services Explorer (Выполнить \Rightarrow Запустить обозреватель Web-сервисов).
  3. Щелкните по иконке WSDL page (вторая справа, находится в верхней правой части основного окна).
  4. Затем перейдите к панели Navigator (Навигатор) и выберите WSDL Main, как показано на рис. 3.6.
    Выберите WSDL Main на панели Navigator

    увеличить изображение
    Рис. 3.6. Выберите WSDL Main на панели Navigator
  5. Перейдите к панели Open WSDL, после чего определите WSDL URL. В нашем приложении ITSO Electronics мы использовали следующий URL:

    http://domino7appdev.cam.itso.ibm.com/itso/webservices.nsf/ProductInfo?wsdl

  6. Щелкните по кнопке Go (Перейти), после чего откроется панель WSDL Binding Details (Детали привязки WSDL), которая представлена на рис. 3.7.
    Панель WSDL Binding Details

    увеличить изображение
    Рис. 3.7. Панель WSDL Binding Details
  7. В панели WSDL Binding Details показаны операции, производимые для элемента SOAP. Выберите операцию, указанную в панели, чтобы записать ее параметры и задействовать ее или же определить большее количество конечных точек. В этом сценарии (сценарии компании ITSO Electronics) выберите операцию GETPRODUCTNAME (Получить название продукта), после чего появится панель Invoke a WSDL Operation (Задействовать операцию WSDL), как показано на рис. 3.8.
    Панель Invoke a WSDL Operation

    увеличить изображение
    Рис. 3.8. Панель Invoke a WSDL Operation
  8. Введем значение PRODUCTNUMBER и щелкнем по кнопке Go. Результат появился в панели Status (Статус). В нашем сценарии в качестве PRODUCTNUMBER (номера продукта) мы ввели значение 45000 и получили результирующую строчку Redbook Basic (см. рис. 3.9).
    Панель Invoke a WSDL Operation Status

    увеличить изображение
    Рис. 3.9. Панель Invoke a WSDL Operation Status
  9. Чтобы увидеть, что на самом деле происходит "за кулисами", щелкните по кнопке Source (Источник), находящейся на панели Status. В примере 3.3 приведен код, отправленный на сервер Lotus Domino в контексте запроса SOAP. Код, которым сервер Lotus Domino ответил отправлением контекста ответа SOAP на этот запрос, представлен в примере 3.4, после чего этот код был представлен в панели Status, как и видно из рис. 3.10.
    <?xml version="1.0" encoding="UTF-8" ?>
    - <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    - <SOAP-ENV:Body>
    - <ns0:GETPRODUCTNAME xmlns:ns0="urn:DefaultNamespace"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <PRODUCTNUMBER xsi:type="xsd:string">45000</PRODUCTNUMBER>
      </ns0:GETPRODUCTNAME>
      </SOAP-ENV:Body>
      </SOAP-ENV:Envelope>
    Пример 3.3. Контекст запроса SOAP
    soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    - <soapenv:Body>
    - <ns1:GETPRODUCTNAMEResponse xmlns:ns1="urn:DefaultNamespace"
    soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <GETPRODUCTNAMEReturn xsi:type="xsd:string">Redbook Basic</GETPRODUCTNAMEReturn>
      </ns1:GETPRODUCTNAMEResponse>
      </soapenv:Body>
      </soapenv:Envelope>
    Пример 3.4. Контекст ответа SOAP, отправленный обратно с сервера
    Исходный код, представленный в панели Status

    увеличить изображение
    Рис. 3.10. Исходный код, представленный в панели Status
  10. Наконец, чтобы увидеть разницу в формате XML, вернитесь в Lotus Domino Designer и измените формат сообщения SOAP на Wrapped в окне свойств Advanced, как показано на рис. 3.11. Снова задействуйте Web-сервис GETPRODUCTNAME из Rational Application Developer. Результат будет таким же, как в примерах 3.5 и 3.6.
    Формат сообщения SOAP, установленный на Wrapped

    увеличить изображение
    Рис. 3.11. Формат сообщения SOAP, установленный на Wrapped
    <?xml version="1.0" encoding="UTF-8" ?>
    - <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:q0="urn:DefaultNamespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    - <SOAP-ENV:Body>
    - <q0:GETPRODUCTNAME>
      <PRODUCTNUMBER>45000</PRODUCTNUMBER>
      </q0:GETPRODUCTNAME>
      </SOAP-ENV:Body>
      </SOAP-ENV:Envelope>
    Пример 3.5. Контекст запроса SOAP, в котором использован формат сообщения SOAP Wrapped
    - <soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    - <soapenv:Body>
    - <ns1:GETPRODUCTNAMEResponse xmlns:ns1="urn:DefaultNamespace">
      <GETPRODUCTNAMEReturn>Redbook Basic</GETPRODUCTNAMEReturn>
      </ns1:GETPRODUCTNAMEResponse>
      </soapenv:Body>
      </soapenv:Envelope>
    Пример 3.6. Контекст ответа SOAP, в котором использован формат сообщения SOAP Wrapped
Совет Браузеру Web-сервисов необходимо получать обновленный документ WSDL от Web-сервиса. Всякий раз, когда документ WSDL изменяется, ваши потребители (включая браузер Web-сервисов) должны использовать самую последнюю версию документа WSDL. В противном случае операции могут быть выполнены не так, как вы ожидаете.
< Лекция 2 || Лекция 3: 12345 || Лекция 4 >