Как сделать из wsdl xsd

Обновлено: 08.07.2024

Ранее я уже писал про

Введение

REST

Термин REST придумал Roy Fielding в своей кандидатской диссертации. Он рассматривал гиперссылки как средство для изменения (хранения) состояния приложения. Гиперлинки хранятся в ресурсах приложения и являются методом изменения состояния приложения, редиректа из одного состояния в другое. Обычно гиперлинки в (X)HTML предназначены для использования людьми, они не использовались в XML, который был предназначен для машинной обработки. Также как и (X)HTML, REST Web-сервисы испльзуют гиперлинки в XML.

Ещё одно важное замечание о REST приложении: RESTful приложения должны быть stateless. Это означает, что REST приложение не сохраняет никакого состояния сессии на стороне сервера. Вся информация, необходимая для выполнения запроса, передается в самом запросе. (Поэтому на повторяющиеся запросы сервер обязан отвечать одинаково прим. переводчика). Соответственно клиент может кешировать полученные ресурсы, что может значительно ускорить скорость работы приложения там, где сервис явно разрешает это. Чтобы узнать больше про REST, см ссылки к статье.

WSDL и REST

WSDL содержит все детали о веб-сервисе, включая:

Клиенты могут использовать перечисленные детали для взамодействия с сервисом.

Применимость WSDL, выходит за пределы его использования в качестве контракта API. Являясь формальным определением, WSDL может быть использован софтом упрощающим реализацию веб-сервисов для таких операций как:

  • Генерирование исходного кода клиентского приложения и сервера для веб-сервиса на разных языках программирования
  • Публикация веб-сервиса
  • Динамическое тестирование веб-сервиса

Большинство программных средств для работы с веб-сервисами включают в себя поддержку WSDL 1.1. Последнее время растёт количество средств разработки веб-сервисов, поддерживающих WSDL 2.0. Проект Apache Web services состоит из двух подпроектов, которые в настоящее время поддерживают WSDL 2.0. Woden — парсер-валидатор WSDL 2.0 на базе Java. Apache Web services проект также предоставляет XSL (XSLT) трансформацию WSDL 2.0 под названием WSDL 2.0 pretty printer, обеспечивающую лучшую человекочитаемость документа WSDL. Axis2 популярный engine веб-сервисов, (тоже от Apache) реализующий генерацию клиентского и серверного Java кода из документа WSDL 2.0.

Описание REST веб-сервиса с помощью WSDL 2.0

Далее в статья проведет вас через шаги, необходимые для создания WSDL 2.0 описания REST веб-сервиса, используя следующий простой пример сценария.

  • book list — сервис получает список продаваемых у вас книг.
  • book details — сервис получает информацию о конкретной книги.

Ответ возвращается в XML-документах.

  • Author — автор
  • Language — язык
  • Publisher — издательство
  • Subject — раздел
  • Title — название

В последующих разделах вы изучите как создавать WSDL 2.0 описание для book list сервиса, используя детали, изложенные выше. Сервис book detailes не имеет серьезных отличий WSDL описания от book list, поэтому не не рассматривается в этой статье.

Прежде чем приступать к разработке WSDL для book list, рассмотрим базовые понятия WSDL 2.0.

Основы WSDL 2.0

Заготовка WSDL 2.0 документа показана на листинге:

Элемент service ассоциирует адреса веб-сервиса с конкретными интерфейсами (interface) и средствами коммуникации (binding). (Т.е. задает соответствие URL операции веб-сервиса и элементу binding).

Кроме главного XML namespace WSDL 2.0 определяет два других namespace интересных при разработке REST веб-сервисов:

Все WSDL элементы, упомянутые в этом разделе показаны более детально в последующих разделах.

Book List сервис

Элемент binding может опционально ссылаться на interface. Оставьте атрибут interface пустым. Вы создадите его в следующем разделе. Если interface ассоциирован с binding, тогда binding элемент может опционально определять дочерний элемент operation, являющийся зеркальным для interface operation элемента. Вам нужно создать заглушку элемента operation и заполнить ссылку на operation позже после создания interface.

Определение book list service operation

So far you’ve learned how to address and communicate with the book list Web service. Next you specify the book list service operation, which describes what the book list service does.

Итак, вы научились задавать address и задавать binding (способ коммуникации) для веб-сервиса. Далее необходимо задать service operation, определяющую что делает book list веб-сервис.

Элемент interface и его дочерний operation элемент используются для определения сервисных операций. В случае с book list, вы определяете одну операцию getBookList, возвращающую список книг.

Затем определите три атрибута для элемента operation:

Pattern

Style

wsdlx:safe

Вы можете найти предопределенные Message Exchange Patterns, styles и wsdlx:safe определения по ссылке WSDL 2.0 Part 2: Adjuncts

Ниже приведено определение book list сервиса с добавленным описанием interface. После добавления interface теперь можно изменить binding operation элемент чтобы указать ссылки на описанные interface и operation.

WSDL 2.0 supports multiple type systems for describing the message content, but XML schema is the only one in use. This section doesn’t cover the details of XML schema. XML schema is used in many other applications, like WSDL 1.1, and there are many good articles about it. This section highlights how to use XML schema for the book list REST Web service and how to use additional attributes defined by WSDL 2.0 to annotate a schema attribute.

WSDL 2.0 поддерживает множество систем определения типов, но на практике используются только XML schema. Эта статья не вдается в детали XML schema. XML schema используется во многих других приложениях, например, WSDL 1.1, и есть много хороших статей о нем. (См. например применение XML schema в JAXB прим. переводчика). В этом разделе демонстрируется, применение XML schema применительно к конкретному примеру REST сервиса book list, а также использование дополнительных атрибутов определенных в WSDL 2.0 для аннотации schema атрибута.

Ваше определение атрибута url использует в свою очередь 2 атрибута из WSDL extensions namespace. Атрибуты wsdlx:interface и wsdlx:binding задают interface и binding для сервиса. Программное обеспечение может использовать эту информацию для автоматического нахождения сервиса. Для использования этих атрибутов, укажите WSDL extentions namespace для элемента schema. Также включите book details namespace из его WSDL 2.0 описания.

XML schema для book list сервиса приведена ниже.

Для ссылки на input и output элементы, вы должны импортировать схему в ваш WSDL документ. Для импортирования сземы, используйте schema import элемент в разделе types как показано на листинге ниже. Кроме того, необходимо добавить ссылки на getBookList и Booklist элементы в interface operation input и output элементах и добавить пространства имен book list XML schema в корневой элемент WSDL.

Готовый WSDL для book list веб-сервиса.

Примечание переводчика

Я позволил себе не переводить summary и ссылки. И то и другое смотреть у автора. в оригинальной статье. Надо сказать язык оригинала весьма тяжёл. Однако, надеюсь, статья окажется полезной.

Несмотря на то, что указанные выше расширения описываются в этом документе и наслаиваются на описание ядра механизма определения служб, никто не запрещает использовать другие расширения связывания вместе с WSDL.

Пример WSDL-документа

  1. ?xml version = "1.0" ?>
  2. name = "StockQuote"
  3. targetNamespace = "http://example.com/stockquote.wsdl"
  4. xmlns :tns= "http://example.com/stockquote.wsdl"
  5. xmlns :xsd1= "http://example.com/stockquote.xsd"
  6. xmlns :soap= "http://schemas.xmlsoap.org/wsdl/soap/"
  7. xmlns= "http://schemas.xmlsoap.org/wsdl/" >
  8. targetNamespace = "http://example.com/stockquote.xsd"
  9. xmlns= "http://www.w3.org/2000/10/XMLSchema" >
  10. name = "TradePriceRequest" >
  11. name = "tickerSymbol" type = "string" />
  12. name = "TradePrice" >
  13. name = "price" type = "float" />
  14. name = "GetLastTradePriceInput" >
  15. name = "body" element = "xsd1:TradePriceRequest" />
  16. name = "GetLastTradePriceOutput" >
  17. name = "body" element = "xsd1:TradePrice" />
  18. name = "StockQuotePortType" >
  19. name = "GetLastTradePrice" >
  20. message = "tns:GetLastTradePriceInput" />
  21. message = "tns:GetLastTradePriceOutput" />
  22. name = "StockQuoteSoapBinding" type = "tns:StockQuotePortType" >
  23. style = "document"
  24. transport = "http://schemas.xmlsoap.org/soap/http" />
  25. name = "GetLastTradePrice" >
  26. soapAction = "http://example.com/GetLastTradePrice" />
  27. use = "literal" />
  28. use = "literal" />
  29. name = "StockQuoteService" >
  30. My first service
  31. name = "StockQuotePort" binding = "tns:StockQuoteBinding" >
  32. location = "http://example.com/stockquote" />

Соглашение об обозначениях

В этом документе используются следующие пространства имен с префиксами:

В текущей спецификации используется свободный синтаксис для описания XML-грамматики WSDL:

Определение службы

Структура WSDL-документа

  1. name = "nmtoken" ? targetNamespace = "uri" ?>
  2. namespace = "uri" location = "uri" />
    *
  3. ?
  4. ?
  5. ?
  6. *
  7. *
  8. name = "nmtoken" > *
  9. ?
  10. name = "nmtoken" element = "qname" ? type = "qname" ?/> *
  11. name = "nmtoken" > *
  12. ?
  13. name = "nmtoken" > *
  14. ?
  15. name = "nmtoken" ? message = "qname" > ?
  16. ?
  17. name = "nmtoken" ? message = "qname" > ?
  18. ?
  19. name = "nmtoken" message = "qname" > *
  20. ?
  21. name = "nmtoken" type = "qname" > *
  22. ?
  23. *
  24. name = "nmtoken" > *
  25. ?
  26. *
  27. ?
  28. ?
  29. *
  30. ?
  31. ?
  32. *
  33. name = "nmtoken" > *
  34. ?
  35. *
  36. name = "nmtoken" > *
  37. ?
  38. name = "nmtoken" binding = "qname" > *
  39. ?
  40. *
  41. *
  42. *

Для определения службы используются шесть основных XML-элементов:

Эти элементы будут детально описаны в разделах 2.2-2.7. В завершение этого раздела будут описаны устанавливаемые WSDL правила именования документов, включения (импорта) документов с определениями, использования расширений и добавления контекстной документации.

Именование и включение документов

Для справочных целей WSDL-документу может быть присвоено опциональное имя, оно задается в атрибуте name типа NCNAME . Также для документа может быть задан опциональный атрибут targetNamespace типа URI , который должен содержать абсолютный URI целевого пространства имён.

WSDL позволяет ассоциировать пространство имён (namespace) с адресом размещения документа (location) с помощью конструкции импорта:

  1. namespace = "uri" location = "uri" />
    *

Адресация определений из подключенного документа выполняются по QName. Можно обращаться к следующим определениям импортированного документа:

  • Определения, введённые WSDL: service , port , binding , portType , message
  • Прочие определения, добавленные посредством использования механизма расширения

Разрешение QName в WSDL выполняется аналогично их разрешению, описанному в спецификации XML Schema.

Стиль составления документа

Использование элемента import позволяет разнести различные элементы определения службы по разным документам. Хорошим подходом является разделение определений в соответствии с их уровнем абстракции, что позволяет создавать более структурированные, следовательно проще читаемые, понимаемые и поддерживаемые определения служб. К тому же подход способствует переиспользованию определений всех уровней.

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

  1. ?xml version = "1.0" ?>
  2. targetNamespace = "http://example.com/stockquote/schemas"
  3. xmlns= "http://www.w3.org/2000/10/XMLSchema" >
  4. name = "TradePriceRequest" >
  5. name = "tickerSymbol" type = "string" />
  6. name = "TradePrice" >
  7. name = "price" type = "float" />
  1. ?xml version = "1.0" ?>
  2. name = "StockQuote"
  3. targetNamespace = "http://example.com/stockquote/definitions"
  4. xmlns :tns= "http://example.com/stockquote/definitions"
  5. xmlns :xsd1= "http://example.com/stockquote/schemas"
  6. xmlns :soap= "http://schemas.xmlsoap.org/wsdl/soap/"
  7. xmlns= "http://schemas.xmlsoap.org/wsdl/" >
  8. namespace = "http://example.com/stockquote/schemas"
  9. location = "http://example.com/stockquote/stockquote.xsd" />
  10. name = "GetLastTradePriceInput" >
  11. name = "body" element = "xsd1:TradePriceRequest" />
  12. name = "GetLastTradePriceOutput" >
  13. name = "body" element = "xsd1:TradePrice" />
  14. name = "StockQuotePortType" >
  15. name = "GetLastTradePrice" >
  16. message = "tns:GetLastTradePriceInput" />
  17. message = "tns:GetLastTradePriceOutput" />
  1. ?xml version = "1.0" ?>
  2. name = "StockQuote"
  3. targetNamespace = "http://example.com/stockquote/service"
  4. xmlns :tns= "http://example.com/stockquote/service"
  5. xmlns :soap= "http://schemas.xmlsoap.org/wsdl/soap/"
  6. xmlns :defs= "http://example.com/stockquote/definitions"
  7. xmlns= "http://schemas.xmlsoap.org/wsdl/" >
  8. namespace = "http://example.com/stockquote/definitions"
  9. location = "http://example.com/stockquote/stockquote.wsdl" />
  10. name = "StockQuoteSoapBinding" type = "defs:StockQuotePortType" >
  11. style = "document"
  12. transport = "http://schemas.xmlsoap.org/soap/http" />
  13. name = "GetLastTradePrice" >
  14. soapAction = "http://example.com/GetLastTradePrice" />
  15. use = "literal" />
  16. use = "literal" />
  17. name = "StockQuoteService" >
  18. My first service
  19. name = "StockQuotePort" binding = "tns:StockQuoteBinding" >
  20. location = "http://example.com/stockquote" />

Расширение языка и связывание

Механизм расширения позволяет поддержать новые сетевые протоколы без внесения изменений в базовую спецификацию WSDL. Рекомендуется, чтобы спецификации этих протоколов и форматов также содержали определение необходимых WSDL-расширений.

Документирование

Необоснованно ожидать, что в настоящем и будущем для определения типов данных будет использоваться только одна грамматика. Поэтому WSDL позволяет подключать другие системы типизации с помощью элементов расширения. Элемент расширения может быть добавлен под элемент types — он будет служить для идентификации системы типизации и для организации контейнера для определений типов. Роль такого элемента аналогична элементу schema языка XML Schema.

  • element — ссылается на XSD-элемент по QName.
  • type — ссылается на XSD-определение simpleType или complexType по QName.
  1. name = "nmtoken" > *
  2. name = "nmtoken" element = "qname" ? type = "qname" ?/> *
  1. name = "PO" type = "tns:POType" />
  2. name = "POType" >
  3. name = "id" type = "string" />
  4. name = "name" type = "string" />
  5. name = "items" >
  6. name = "item" type = "tns:Item"
  7. minOccurs = "0"
  8. maxOccurs = "unbounded" />
  9. name = "Item" >
  10. name = "quantity" type = "int" />
  11. name = "product" type = "string" />
  12. name = "Invoice" type = "tns:InvoiceType" />
  13. name = "InvoiceType" >
  14. name = "id" type = "string" />
  15. name = "PO" >
  16. name = "po" element = "tns:PO" />
  17. name = "invoice" element = "tns:Invoice" />
  1. name = "Composite" >
  2. name = "PO" type = "tns:POType"
  3. minOccurs = "1" maxOccurs = "1" />
  4. name = "Invoice" type = "tns:InvoiceType"
  5. minOccurs = "0" maxOccurs = "unbounded" />
  6. name = "PO" >
  7. name = "composite" type = "tns:Composite" />

Тип порта

Атрибут name задаёт уникальное имя порта среди всех портов, определённых в рамках WSDL-документа. Операция именуется также с использованием атрибута name .

В WSDL имеется четыре примитива организации способа взаимодействия, которые может поддерживать конечная точка:

Запрос / просьба и ответ связаны в WSDL логически, а конкретный механизм их корреляции описывает связывание. Например, запрос и ответ могут быть частью одного сетевого взаимодействия, либо являться физически разными сетевыми посылками.

Хотя WSDL и поддерживает связывания для всех четырёх примитивов, но определяет их только для примитивов однонаправленный запрос и запрос-ответ. Ожидается, что спецификации, определяющие протоколы для взаимодействий просьба-ответ и уведомление, также должны поставлять связывания для WSDL, что позволит использовать эти примитивы.

Распространения эти операции не получили, поддерживаются только теоретически на уровне спецификации. Поэтому web-службу следует разрабатывать как обработчик запросов с соответствующим использованием в её WSDL-документе примитивов однонаправленный запрос и запрос-ответ.

Однонаправленный запрос

Грамматика определения операции следующая:

  1. name = "nmtoken" >
  2. name = "nmtoken" ? message = "qname" />

Запрос-ответ

  1. name = "nmtoken" parameterOrder = "nmtokens" >
  2. name = "nmtoken" ? message = "qname" />
  3. name = "nmtoken" ? message = "qname" />
  4. name = "nmtoken" message = "qname" />
    *

Просьба-ответ

  1. name = "nmtoken" parameterOrder = "nmtokens" >
  2. name = "nmtoken" ? message = "qname" />
  3. name = "nmtoken" ? message = "qname" />
  4. name = "nmtoken" message = "qname" />
    *

Уведомление

  1. name = "nmtoken" >
  2. name = "nmtoken" ? message = "qname" />

Имена элементов в рамках операции

Атрибут name элементов input и output содержит уникальное имя среди всех таких элементов в рамках типа порта.

Порядок параметров в рамках операции

Связывание

Атрибут name задаёт имя связывания, уникальное среди всех связываний WSDL-документа. Связывание ссылается на тип порта с помощью атрибута type типа QName (см. Раздел 2.1.1).

Элемент связывания operation содержит данные для одноимённой операции связанного типа порта. Однако имя операции в общем случае не является уникальным (пример: перегрузка методов / функций — использование одинаковых имён с различными сигнатурами), потому его может быть недостаточно для однозначного определения целевой операции типа порта. В таких случаях целевая операция адресуется с помощью дополнительного задания соответствующих имён элементов wsdl:input и wsdl:output с помощью атрибута name .

Связывание должно устанавливать только один протокол.

Связывание не должно содержать информации об адресе.

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

  1. *
  2. name = "nmtoken" binding = "qname" > *

Атрибут name задаёт уникальное имя среди всех портов в рамках WSDL-документа. Атрибут binding типа QName содержит ссылку на связывание (см. Раздел 2.1.1).

Элементы расширения (1) используются для задания адреса.

Порт не должен задавать более одного адреса.

Порт не должен содержать любую информацию связывания, отличную от адреса.

Служба

Служба объединяет вместе набор связанных портов.

Атрибут name задаёт уникальное имя среди всех служб, определённых в рамках WSDL-документа.

Есть очень много статей о том, как работать с XSL/XSD из 1С, но все они в стиле: возьмем нашу XSD схему (простую и удбоную) или наш web-сервис и смотрите, как все легко экспортировать или импортировать. А что делать, если нам дали пачку XSD-схем со сложным взаимосвязями и изменять мы них не можем, а работать и поддерживать актуальность схем надо?

Сразу скажу, вопросы шифрования/подписи по ГОСТУ при работе с ГИС ЖКХ за рамками этой статьи и на хабре уже освещались. Хотя без подписей запросы выполнить не удастся.

image


Начнем с простого — скачаем пакет форматов по интеграционному взаимодействию с ГИС ЖКХ, импортируем все xsd схемы из пакета интеграций, наведем порядок переименуем все как нам удобно. В итоге получим как показано на картинке:

Ну а теперь приступим к магии. Попробуем запросить данные из справочника организаций по ОРГН. Это подсистема organizations-registry-common метод exportOrgRegist.

В hcs-organizations-registry-common-service.wsdl указано:


Надо собрать SOAP пакет из заголовка ISRequestHeader, тела exportOrgRegistryRequest. Посмотрим их в xsd схемах спецификаций по интеграций.

Ну приступим, откроем нужные нам пакеты XDTO. Оказывается, нужные сущности являются не типами, а свойствами, как с этим работать в документации на XDTO в статьях, которые я находил, не описано, поэтому воспользуемся урокам магии:

Начнем с тела exportOrgRegistryRequest.


Напишем функцию для сбора XML-запроса:


В итоге получим запрос:


Ответ от серверов ГИС ЖКХ (СИТ-1):

Как мы видим, ответ напрямую десериализовать не получится, потому что нет такого типа в предложенных xsd схемах. Нам надо как-то пропустить часть тэгов и обработать только область ответа. На эту тему я тоже не нашел информации, но методом проб и ошибок приходим к кусочку магий:

Не могу найти информацию, как с помощью него можно составить XML для дальнейшего отправления на сервер?

К ней просто прикреплешь WSDL.
Указываешь метод(на картинке выбрали ConversionRate) и программа подготавливает XML запрос.


Какими средствами можно получить данные из xml по wsdl в java soap?
Какими средствами можно получить данные из xml по wsdl в java soap? Может есть примеры.

Soap wsdl возвращает объект, а не xml
Здравствуйте. Такая проблема: в 1С хранятся данные, программист 1С настроил wsdl службу чтобы.

Формирование soap-запроса через SOAP::WSDL
Прошу помочь решить следующую проблему. Необходимо сформировать SOAP-запрос на веб-сервис.

WSDL SOAP и сертификат - как?
Доброго времени суток. Есть одна компания куда нужно положить данные на БД. Чтоб положить данные.

Ссылку на сервис добавь в проекте, сервер тебе покажет методы, с которыми работает, с ними и будешь работать. Или тебя интересует низкоуровневое взаимодействие?

Ссылку на сервис добавил.
Методы появились.

Я хочу получить XML запрос для дальнейшего отправления на сервер указав нужный метод.
Точно также как это делает программа SoapUI.

Для того чтобы не писать вот такой код в ручную:

Я хочу передать какой-нибудь функции WebReference, название метода и получить запрос xml автоматически.
Никак не могу найти информацию об этом.

WSDL расшифровывается как язык описания веб-сервисов. Это стандартный формат для описания веб-службы. WSDL был разработан совместно Microsoft и IBM.

Особенности WSDL

WSDL — это основанный на XML протокол для обмена информацией в децентрализованных и распределенных средах.

Определения WSDL описывают, как получить доступ к веб-службе и какие операции она будет выполнять.

WSDL — это язык для описания взаимодействия с сервисами на основе XML.

WSDL является неотъемлемой частью универсального описания, обнаружения и интеграции (UDDI), всемирного реестра предприятий на основе XML.

WSDL — это язык, который использует UDDI.

WSDL — это основанный на XML протокол для обмена информацией в децентрализованных и распределенных средах.

Определения WSDL описывают, как получить доступ к веб-службе и какие операции она будет выполнять.

WSDL — это язык для описания взаимодействия с сервисами на основе XML.

WSDL является неотъемлемой частью универсального описания, обнаружения и интеграции (UDDI), всемирного реестра предприятий на основе XML.

WSDL — это язык, который использует UDDI.

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

WSDL часто используется в сочетании с SOAP и XML-схемой для предоставления веб-сервисов через Интернет. Клиентская программа, подключающаяся к веб-службе, может прочитать WSDL, чтобы определить, какие функции доступны на сервере. Все используемые специальные типы данных встраиваются в файл WSDL в форме XML-схемы. Затем клиент может использовать SOAP для фактического вызова одной из функций, перечисленных в WSDL.

История WSDL

WSDL 1.1 был представлен Ariba, IBM и Microsoft в виде заметки W3C для описания сервисов для W3C XML Activity по XML-протоколам в марте 2001 года.

WSDL 1.1 не был одобрен Консорциумом World Wide Web (W3C), однако он только что выпустил проект для версии 2.0, который будет рекомендацией (официальным стандартом), и, таким образом, одобрен W3C.

WSDL разбивает веб-службы на три определенных идентифицируемых элемента, которые могут быть объединены или использованы повторно после определения.

Три основных элемента WSDL, которые могут быть определены отдельно:

Документ WSDL имеет различные элементы, но они содержатся в этих трех основных элементах, которые можно разрабатывать как отдельные документы, а затем их можно объединять или повторно использовать для формирования полных файлов WSDL.

Элементы WSDL

Документ WSDL содержит следующие элементы:

Определение — это корневой элемент всех документов WSDL. Он определяет имя веб-службы, объявляет несколько пространств имен, используемых в оставшейся части документа, и содержит все элементы службы, описанные здесь.

Тип порта — это абстрактный набор операций, сопоставленный с одной или несколькими конечными точками, определяющий набор операций для привязки; коллекция операций, как она абстрактна, может быть сопоставлена ​​с несколькими транспортными средствами через различные привязки.

Порт — это сочетание привязки и сетевого адреса, обеспечивающее целевой адрес службы связи.

Сервис — это набор связанных конечных точек, охватывающий определения сервиса в файле; службы сопоставляют привязку с портом и включают любые определения расширяемости.

Определение — это корневой элемент всех документов WSDL. Он определяет имя веб-службы, объявляет несколько пространств имен, используемых в оставшейся части документа, и содержит все элементы службы, описанные здесь.

Тип порта — это абстрактный набор операций, сопоставленный с одной или несколькими конечными точками, определяющий набор операций для привязки; коллекция операций, как она абстрактна, может быть сопоставлена ​​с несколькими транспортными средствами через различные привязки.

Порт — это сочетание привязки и сетевого адреса, обеспечивающее целевой адрес службы связи.

Сервис — это набор связанных конечных точек, охватывающий определения сервиса в файле; службы сопоставляют привязку с портом и включают любые определения расширяемости.

В дополнение к этим основным элементам спецификация WSDL также определяет следующие служебные элементы:

Документация — Этот элемент используется для предоставления удобочитаемой документации и может быть включен в любой другой элемент WSDL.

Импорт — этот элемент используется для импорта других документов WSDL или схем XML.

Документация — Этот элемент используется для предоставления удобочитаемой документации и может быть включен в любой другой элемент WSDL.

Импорт — этот элемент используется для импорта других документов WSDL или схем XML.

ПРИМЕЧАНИЕ. — Части WSDL обычно генерируются автоматически с использованием инструментов, поддерживающих веб-службы.

Структура документа WSDL

Основная структура документа WSDL выглядит следующим образом —

Документ WSDL также может содержать другие элементы, такие как элементы расширения и элемент службы, которые позволяют группировать определения нескольких веб-служб в одном документе WSDL.

Продолжите анализировать пример документа WSDL.

Ниже приведен файл WSDL, предоставленный для демонстрации простой программы WSDL.

пример

Содержимое файла HelloService.wsdl —

Пример анализа

Определения — HelloService

Тип — Использование встроенных типов данных, и они определены в XMLSchema.

sayHelloRequest — параметр firstName

sayHelloresponse — приветствие, возвращаемое значение

Тип порта — операция sayHello, состоящая из запроса и службы ответа.

Определения — HelloService

Тип — Использование встроенных типов данных, и они определены в XMLSchema.

sayHelloRequest — параметр firstName

sayHelloresponse — приветствие, возвращаемое значение

Тип порта — операция sayHello, состоящая из запроса и службы ответа.

Элемент должен быть корневым элементом всех документов WSDL. Он определяет название веб-службы.

Вот фрагмент кода из последней главы, в котором используется элемент определения .

Из приведенного выше примера можно сделать вывод, что определения

является контейнером всех других элементов.

указывает, что этот документ называется HelloService .

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

является контейнером всех других элементов.

указывает, что этот документ называется HelloService .

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

ПРИМЕЧАНИЕ. — Спецификация пространства имен не требует, чтобы документ присутствовал в данном месте. Важным моментом является то, что вы указываете уникальное значение, отличное от всех других определенных пространств имен.

Веб-сервис должен определить свои входы и выходы и то, как они отображаются в сервисы и выходят из них. Элемент WSDL заботится об определении типов данных, используемых веб-службой. Типы — это документы XML или части документа.

Элемент types описывает все типы данных, используемые между клиентом и сервером.

WSDL не привязан исключительно к конкретной системе ввода.

WSDL использует спецификацию XML-схемы W3C в качестве выбора по умолчанию для определения типов данных.

Если служба использует только простые встроенные типы XML-схемы, такие как строки и целые числа, то элемент types не требуется.

WSDL позволяет определять типы в отдельных элементах, чтобы их можно было повторно использовать в нескольких веб-службах.

Элемент types описывает все типы данных, используемые между клиентом и сервером.

Читайте также: