barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

понедельник, 28 января 2013 г.

WSO2 ESB: валидация запросов и ответов по схеме, импортирующей другие схемы

Валидация в WSO2 ESB выполняется Validate-медиатором. Вот только документация, имеющаяся  по нему  на сайте WSO2, неполная: в ней ни слова не говорится о работе с импортируемыми схемами.
В действительности, настройка валидации по схеме, импортирующей другие схемы, аналогична настройке публикации WSDL, ссылающейся на внешние схемы (я про неё писал когда-то очень-очень давно). Ниже я опишу XML-конфигурацию медиатора Validate.
Пусть схема (назовем её MainSchema.xsd), по которой необходимо осуществить валидацию всего тела запроса к сервису, импортирует 2 другие схемы по относительным URL`ам:
  • Service?xsd=ImportedSchema1.xsd
  • Service?xsd=ImportedSchema2.xsd
Во-первых, все 3 схемы нужно разместить в реестре (во встроенном или подключенном GREG). Я их разместил в коллекции conf:/services/TestValidate/.
После этого во входящую цепочку медиации сервиса нужно поместить такой validate-медиатор:
<validate>
<schema key="conf:/services/TestValidate/MainSchema.xsd"/>
<resource location="Service?xsd=ImportedSchema1.xsd"
key="conf:/services/TestValidate/ImportedSchema1.xsd"/>
<resource location="Service?xsd=ImportedSchema2.xsd"
key="conf:/services/TestValidate/ImportedSchema2.xsd"/>
<on-fail>
<!-- Последовательность, выполняемая при ошибке валидации-->
</on-fail>
</validate>
<!-- Последовательность, выполняемая при успешной валидации -->

Как видно, тегами <resource/> устанавливается соответствие между URL`ами импорта и путями к соответствующим импортируемым схемам в реестре. В случае, если импортируемые схемы, в свою очередь, импортируют другие схемы (или перекрестно уже имеющиеся) - их все нужно перечислить как ресурсы (предварительно разместив в реестре).
Атрибутом "source" у тега <validate/> можно задать xpath, выбирающие узлы, подлежащие валидации (в моем случае, при отсутствии этого атрибута, валидируется все тело сообщения).

Комментариев нет:

Отправить комментарий