WSDL-подобная генерация кода для схем EbXML CPA+ (не само сообщение EbXML)
Фон:
Определенный поддерживаемый правительством оптовый поставщик широкополосных услуг в Австралии получил отзывы от дискуссионных групп о том, как лучше всего предоставлять услуги B2B розничным интернет-провайдерам. Они остановились на EbXML.
Проблема:
Мы - очень маленький магазин (сравнительно), который не хочет тратить много времени на интеграцию. Мы уже знакомы с интеграцией парных (входящих и исходящих) SOAP-сервисов. В прошлом мы использовали инструменты генерации кода на основе WSDL (в основном с RPC/Literal-сервисами), где WSDL был наглядным и достаточно простым, чтобы его можно было переварить.
Если это вообще возможно, мы бы хотели избежать ручной интеграции сервисов с нашим бизнес-стеком. Мы знаем, что "Схемы интерфейса" обновлялись несколько раз; мы хотели бы (насколько это возможно) сделать код и схему схемы такими, чтобы мы могли смоделировать наши отношения с поставщиком и исходящие / входящие сообщения как простые "очереди" (таблицы) в базе данных SQL - это будет наша точка интеграции.
Начиная с исходящего ("отправителя") веб-сервиса SOAP... он публикует описание службы Document/Literal WSDL, которое, как представляется, правильно работает с различными инструментами (например, wsdl2java, SoapUI) для генерации сообщений EBXML "оболочки", Это ничего не говорит о самих сообщениях "полезной нагрузки", которые (по крайней мере для MSH, на которые мы смотрели) должны быть multipart/related
вложения с типом text/xml
,
Сообщения "полезной нагрузки" определены в предоставленных файлах CPA (что-то вроде привязок) и Schema (стандартно выглядящий XSD). Кажется, что сам MSH не предоставляет никакой внешней проверки для сообщений полезной нагрузки.
Вопрос:
Доступен ли такой же инструмент генерации кода (как в случае описанных WSDL веб-сервисов SOAP) для CPA / схем EbXML? (то есть: инструменты, которые могут использовать схемы интерфейса CPA и "полезной нагрузки" и выплевывать java/ C++/ что угодно, и / или что-то похожее на WSDL, специфичное для сообщений интерфейса "полезной нагрузки" и / или примеров сообщений).
Если так, где я могу посмотреть?
Если нет, есть ли какие-либо специфичные для EbXML проблемы, которые могли бы предотвратить это? (Я бы предпочел не потратить несколько недель на проект по разработке инструментов, которые невозможно "правильно" реализовать, учитывая имеющуюся информацию).
2 ответа
Увы, кажется, что нет никаких специальных инструментов для сообщений "полезной нагрузки" для EbXML, в частности, потому что EbXML не регулирует эти сообщения.
Тем не менее, CPA (через canSend
а также canRecv
) элементы действуют примерно как SOAP WSDL, и XSD служат для тех же целей, что и SOAP, так что это не так уж и далеко.
Существует программное обеспечение для преобразования типов, определенных в XSD, в сообщения (слияние с данными, предоставленными пользователем) во время выполнения, но, на мой вопрос, нет очевидных инструментов для генерации кода вокруг CPA и связанных XSD.
Кроме того, на самом деле написание программного обеспечения для этого самостоятельно становится более проблематичным из-за сложности поиска мета-грамматики для XML-схемы (то есть: той грамматики, которая остается в XML-схеме после разложения на XML-токенизации). По сути, это было сложно, потому что в мире XML слово "грамматика" имеет другое значение, которое сводит воедино результаты поиска.
Мне удалось написать синтаксический анализатор для фрагментов синтаксиса XML, присутствующих в верхней части каждого из статей MSDN по схеме XML (элементы перечислены слева), что, в свою очередь, позволило мне сгенерировать грамматику LL1 для схемы XML, которая работает на предварительно проанализированный AST данного XSD.
Оттуда я создал нисходящий парсер из этой метаграммы, который:
- Следит
<xsd:import>
с и<xsd:include>
s для разрешения пространств имен в дальнейшие XSD. - Рекурсивно разрешает типы сообщений, чтобы создать "плоский" тип для каждого сообщения CPA.
- Создает структуры данных упаковщика / распаковщика для типов сообщений, которые позволяют генерировать код на различных языках, а также сериализовать и анализировать из проверенного "полезного" XML.
Есть все еще различные ограничения XML-схемы, ключи и другие ограничения, о которых не знают мои генераторы кода, но их поддержка может быть добавлена со временем.
Я дополню этот ответ ссылками на грамматику (и, возможно, код - зависит от легалов), если позволит время. Я оставлю вопрос как непринятый на некоторое время, так что, если кто-то чудесным образом найдет инструмент, который выполняет намного меньше работы по генерации кода, я приму ответ, основанный на этом.
MSH не зависит от полезной нагрузки. Полезные нагрузки не определены в CPA, только имена служб и действий, которые используются для отправки полезных нагрузок ebXML. Услуга и действие передаются в заголовке ebXML, который является первой частью составного сообщения. Сами полезные данные могут быть xml, двоичными или комбинацией. Каждая полезная нагрузка - это другая часть.
MSH отвечает за такие задачи, как:
- отправка (обычно асинхронных) подтверждений для полученных сообщений
- повторная отправка сообщений, если подтверждение не было получено в течение определенного периода времени
- игнорирование повторяющихся сообщений
- обеспечение правильности порядка доставки сообщений
реальное поведение все настраивается с использованием CPA, но совместимый MSH будет поддерживать все это.
Это подразумевает, что MSH должен вести администрирование отправленных и полученных сообщений, что обычно делается в базе данных.
Я был бы удивлен, если бы вы могли найти инструмент для создания MSH из конкретной CPA. То, что вы можете найти, - это программное обеспечение / компоненты, которые реализуют общий MSH и могут быть настроены с помощью CPA.
Предполагая, что вы не хотите создавать свой собственный, ищите существующий адаптер ebMS. Настройте его с вашими CPA. Затем сгенерируйте полезные данные так, как вам нравится, и передайте их адаптеру ebMS.
Google для "адаптера ebMS" или "поддержки ebMS".