Генерация WSDL из файла XSD - PullRequest
35 голосов
/ 28 мая 2009

Мне нужно сгенерировать файл WSDL с учетом файла XSD. Как мне это сделать? Могу ли я сделать это в VS2005? Какой самый простой способ сделать это?

Ответы [ 6 ]

48 голосов
/ 28 мая 2009

Вы не можете - XSD описывает аспекты DATA, например. веб-службы - WSDL описывает ФУНКЦИИ веб-служб (вызовы методов). Обычно вы не можете определить вызовы метода только из ваших данных.

Это действительно две отдельные, отличительные части уравнения. Для простоты вы часто импортировали бы свои определения XSD в WSDL в теге <wsdl:types>.

(спасибо Cheeso за указание на мое неточное использование терминов)

26 голосов
/ 28 мая 2009

Я бы хотел по этому поводу расходиться с 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 вы обычно делаете что-то вроде этого (обратите внимание на творческие шаги в этой процедуре):

  1. импорт схемы XML в WSDL (элемент wsdl: types)
  2. добавьте к набору типов или элементов дополнительные или обертки (скажем, массивы или структуры, содержащие основные типы) по желанию. Результат # 1 и # 2 включает все типы, которые будет использовать WSDL.
  3. определяет набор входящих и исходящих сообщений (и, возможно, сбоев) в терминах этих ранее определенных типов.
  4. Определите тип порта, который представляет собой набор пар сообщений in.out. Вы можете думать о типе порта как о WSDL-аналоге интерфейса Java.
  5. Укажите привязку, которая реализует тип порта и определяет, как сообщения будут сериализованы.
  6. Укажите сервис, который реализует привязку.

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

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

6 голосов
/ 23 сентября 2016

Я знаю, что этот вопрос старый, но он заслуживает ответа. Я лично предпочитаю создавать WSDL вручную и тестировать на соответствие с помощью SoapUI. Но иногда (особенно для сложных WSDL) у вас есть три способа создать один из XSD:

  1. Генерация WSDL из схемы с использованием Eclipse (вероятно, наиболее удобной для пользователя)
  2. Генерация WSDL через CXF (мой любимый)
  3. Генерация WSDL с помощью соглашений с использованием Spring WS (мой наименее любимый)

Я предпочитаю подход CXF, так как я парень из CLI. Если у него есть CLI, вы можете автоматизировать (это мой девиз). И мне меньше всего нравится подход Spring WS, так как он использует множество соглашений, специфичных для фреймворка.

Есть больше людей, которые знают CXF (я полагаю), чем Spring WS. Поэтому я не одобряю все то, что может привести к обучению нового инженера (без каких-либо явных преимуществ или рентабельности инвестиций).

Следует также сказать, что любой сгенерированный WSDL должен быть проверен на валидность и соответствие (и настроен до его соответствия), и что ваше приложение публикует статический wsdl (в отличие от возврата автоматически сгенерированного).

По моему опыту, вы начинаете с WS-I-совместимого wsdl, а затем ваше приложение автоматически генерирует (и возвращает потребителям) несоответствующее.

Другими словами, остерегайтесь авто-магии.

3 голосов
/ 13 декабря 2014

Этот инструмент xsd2wsdl часть проекта Apache CXF, который создаст минималистский WSDL.

0 голосов
/ 13 мая 2016

мы можем сгенерировать файл wsdl из xsd, но вы должны использовать пакет Oracle Eclipse (OEPE). просто создайте xsd и затем щелкните правой кнопкой мыши -> new-> wsdl ...

0 голосов
/ 28 мая 2009

Лично (и учитывая то, что я знаю, то есть Java и ось), я сгенерирую модель данных Java из файлов .xsd (Axis 2 может сделать это), а затем добавлю интерфейс для описания моего веб-сервиса, который использует эту модель, а затем генерирует WSDL из этого интерфейса.

Поскольку .NET также обладает всеми этими функциями, должна быть возможность делать все это и в этой экосистеме.

...