Я бы хотел по этому поводу расходиться с marc_s, который написал:
XSD описывает аспекты DATA, например,
веб-сервиса - WSDL описывает
ФУНКЦИИ веб-сервисов
(вызовы методов). Вы не можете, как правило,
выяснить вызовы методов из вашего
одни данные.
WSDL не описывает функции. WSDL определяет сетевой интерфейс, который сам состоит из конечных точек, которые получают сообщения, а затем иногда отвечают сообщениями. WSDL описывает конечные точки, а также сообщения запроса и ответа. Он очень ориентирован на сообщения.
Мы часто думаем о WSDL как о наборе функций, но это потому, что инструменты веб-сервисов обычно генерируют прокси на стороне клиента, которые представляют операции WSDL как вызовы методов или функций. Но WSDL этого не требует. Это побочный эффект инструментов.
РЕДАКТИРОВАТЬ : Кроме того, в общем случае XSD не определяет аспекты данных веб-службы. XSD определяет элементы, которые могут присутствовать в совместимом документе XML. Такой документ может передаваться как сообщение через конечную точку веб-службы, но это не обязательно.
Возвращаясь к вопросу, я бы ответил на первоначальный вопрос немного по-другому. Я скажу ДА, можно сгенерировать файл WSDL для данного файла xsd, таким же образом, как можно сгенерировать омлет, используя яйца.
РЕДАКТИРОВАТЬ : Мой первоначальный ответ был неясным. Дай мне попробовать снова. Я не предполагаю, что XSD эквивалентен WSDL или что XSD достаточно для создания WSDL. Я действительно говорю, что можно сгенерировать WSDL, учитывая XSD-файл , если под этой фразой вы подразумеваете «сгенерировать WSDL с использованием XSD-файла». Сделав это, вы добавите информацию в XSD-файл для генерации WSDL. Вам нужно будет определить дополнительные вещи - части сообщений, операции, типы портов - ничего из этого не присутствует в XSD. Но можно «сгенерировать WSDL, учитывая XSD», с некоторыми творческими усилиями.
Если фраза «создать WSDL с учетом XSD» подразумевает «механическое преобразование XSD в WSDL», то ответ НЕТ, вы не можете этого сделать. Это должно быть ясно, учитывая мое описание WSDL выше.
При создании WSDL с использованием файла XSD вы обычно делаете что-то вроде этого (обратите внимание на творческие шаги в этой процедуре):
- импорт схемы XML в WSDL (элемент wsdl: types)
- добавьте к набору типов или элементов дополнительные или обертки (скажем, массивы или структуры, содержащие основные типы) по желанию. Результат # 1 и # 2 включает все типы, которые будет использовать WSDL.
- определяет набор входящих и исходящих сообщений (и, возможно, сбоев) в терминах этих ранее определенных типов.
- Определите тип порта, который представляет собой набор пар сообщений in.out. Вы можете думать о типе порта как о WSDL-аналоге интерфейса Java.
- Укажите привязку, которая реализует тип порта и определяет, как сообщения будут сериализованы.
- Укажите сервис, который реализует привязку.
Большая часть WSDL более или менее шаблонна. Это может показаться пугающим, но это в основном из-за тех страшных и обильных угловых скобок, которые я обнаружил.
Некоторые полагают, что это длительный ручной процесс. Может быть. Но именно так вы можете создавать совместимые сервисы. Вы также можете использовать инструменты для определения WSDL. Динамическая генерация WSDL из кода приведет к ошибкам взаимодействия.