Генерация WSDL из файла XSD
Мне нужно сгенерировать файл WSDL с учетом файла XSD. Как мне это сделать? Могу ли я сделать это в VS2005? Какой самый простой способ сделать это?
6 ответов
Вы не можете - XSD описывает аспекты DATA, например, веб-службы - WSDL описывает ФУНКЦИИ веб-служб (вызовы методов). Обычно вы не можете определить вызовы методов только из ваших данных.
Это действительно две отдельные, отличительные части уравнения. Для простоты вы часто импортировали бы свои определения XSD в WSDL в <wsdl:types>
тег.
(спасибо Cheeso за указание на мое неточное использование терминов)
Я хотел бы не согласиться с 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 из кода приведет к ошибкам взаимодействия.
Я знаю, что этот вопрос старый, но он заслуживает ответа. Я лично предпочитаю создавать WSDL вручную и тестировать на соответствие с помощью SoapUI. Но иногда (особенно для сложных WSDL) у вас есть три способа сгенерировать один из XSD:
- Генерация WSDL из схемы с использованием Eclipse (вероятно, наиболее удобной для пользователя)
- Генерация WSDL через CXF (мой любимый)
- Генерация WSDL с помощью соглашений с использованием Spring WS (мой наименее любимый)
Я предпочитаю подход CXF, так как я парень из CLI. Если у него есть CLI, вы можете автоматизировать (это мой девиз). И мне меньше всего нравится подход Spring WS, так как он использует множество соглашений, специфичных для фреймворка.
Есть больше людей, которые знают CXF (я полагаю), чем Spring WS. Поэтому я не одобряю все то, что может привести к обучению нового инженера (без каких-либо явных преимуществ или рентабельности инвестиций).
Также следует сказать, что любой сгенерированный WSDL должен быть проверен на валидность и соответствие (и настроен до его соответствия), и что ваше приложение публикует статический wsdl (вместо того, чтобы возвращать автоматически сгенерированный).
По моему опыту, вы начинаете с WS-I-совместимого WS-I, а затем ваше приложение автоматически генерирует (и возвращает потребителям) несоответствующее.
Другими словами, остерегайтесь авто-магии.
Этот инструмент xsd2wsdl является частью проекта Apache CXF, который создаст минималистский WSDL.
Лично (и учитывая то, что я знаю, т.е. Java и ось), я сгенерирую модель данных Java из файлов.xsd (Axis 2 может сделать это), а затем добавлю интерфейс для описания моего веб-сервиса, использующего эту модель. и затем сгенерируйте WSDL из этого интерфейса.
Поскольку.NET также обладает всеми этими функциями, должна быть возможность делать все это и в этой экосистеме.
Мы можем сгенерировать файл wsdl из xsd, но вы должны использовать пакет Oracle Eclipse(OEPE). просто создайте xsd и затем щелкните правой кнопкой мыши ->new->wsdl...