• Авторизация


Messages splitting in BTS2004 19-11-2004 18:13 к комментариям - к полной версии - понравилось!


Мне известно 3 способа произвести message splitting. Первый состоит в том, чтобы использовать custom pipeline с XMLDiassembler, кот. будет указывать на соответствующий envelope schema и document schema. Вот здесь можно найти подробные инструкции. Проблема с этим подходом, как замечает Darren Jefford, состоит уже хотя бы в том, что во-первых исходный message теряется, а он может содержать и другие атрибуты или элементы, а во-вторых, если, не нарушая schema, разумеется, один из элементов mailformed, весь pipeline завалится с exception.
Тут на помощь приходит xpath(). Эта функция встроена в XLANG/s и имеет очень большие возможности. Подробнее о них - см. здесь. Смысл идеи вот в чем : будем использовать xpath() чтобы получить кол-во искомых элементов. Например, так (внутри Expression Shape):

elementCount = xpath(inMsg, "count(/*[local-name()='store']/*[local-name()='Item'])");

Дальше используем Loop Shape, создавая на каждой итерации новый item message, опять же используя xpath():

XPathStatement = System.String.Format("/*[local-name()='store']/*[local-name()='Item'][{0}]",i);
itemMessage = xpath(inMsg,XPathStatement);
i = i + 1;

В обоих подходах в envelope schema (только при использовании xpath() ее не надо так объявлять), item message указывается, как reference.
Третий способ состоит в использовании Comega, и поэтому пока не разглашается. :)
вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Messages splitting in BTS2004 | Oleg_Kleiman - Soft kibitzing | Лента друзей Oleg_Kleiman / Полная версия Добавить в друзья Страницы: раньше»