Добавление заголовка к XML-сообщению в Synapse

Используя Synapse 2.1, я пытаюсь преобразовать сообщение XML без заголовка в сообщение SOAP с заголовком, содержащим учетные данные для использования веб-службы. Что-то вроде этого:

Входящее сообщение синапса:

<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
   ...TAGS...
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Исходящее сообщение синапса:

<SOAP-ENV:Envelope>
<SOAP-ENV:Header>
   <yta:Authentication>
      <yta:UserName>srnm</yta:UserName>
      <yta:Password>psswrd</yta:Password>
   </yta:Authentication>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
   ...TAGS...
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Как я могу настроить Synapse для этого? Я успешно использую файл преобразования для обновления тела сообщения, но не для добавления заголовка к выводу.

Я пытался использовать посредники заголовков и свойств в файле конфигурации, но я не уверен, что мне делать. Читая о посреднике заголовков, он говорит: «На данный момент заголовок набора поддерживает только заголовки с простым значением». Может ли это быть так?

Спасибо


person pbons    schedule 28.03.2013    source источник


Ответы (3)


Для справки, в итоге я использовал посредник сценария со встроенным сценарием javascript в файле конфигурации, используя метод addHeader. Смотри ниже:

<script language="js">
   <![CDATA[
     var user = mc.getPayloadXML()..*::UserName.toString();
     var psswd = mc.getPayloadXML()..*::Password.toString();
     mc.addHeader(false, <yta:Authentication xmlns:yta="yta:namespace url"><yta:UserName>{user}</yta:UserName><yta:Password>{psswd}</yta:Password></yta:Authentication>);
   ]]>
</script>
person pbons    schedule 01.04.2013

Вы можете использовать посредник XSLT для управления им. Поэтому добавьте преобразование XSLT с обязательными заголовками, и оно добавит требуемые заголовки. Или используйте посредник Script / посредник класса, где вы можете манипулировать сообщением.

Пожалуйста, обратитесь к следующим материалам, которые будут полезны.

http://wso2.org/forum/thread/10794

http://wso2.org/forum/thread/10843

Если эта структура xml не нужна. вы можете использовать заголовки Http, вы можете использовать свойства, как показано ниже. http://blog.thilinamb.com/2011/04/how-to-access-web-service-using-http.html

person Shelan Perera    schedule 28.03.2013
comment
Спасибо, Шелан. На самом деле я пытался добавить его в преобразование XSLT, но это не сработало. Итак, теперь я думаю, что веб-сервис требует отправки учетных данных в заголовке HTTP. Возможно ли это сделать с любым из существующих посредников (думая о заголовке или свойстве)? - person pbons; 29.03.2013
comment
Какая у вас проблема с XSLT? вы дали источник. как упоминалось в сообщении на форуме?. Это не пары имя-значение, а иерархическая структура. Другой вариант — использовать посредник класса для создания сообщения. Там у вас есть полный доступ. документы. wso2.org/wiki/display/ESB460/ - person Shelan Perera; 29.03.2013
comment
Когда я использовал подход XSLT, я получил сообщение об ошибке. В веб-службе не существует операции с именем Envelope от поставщика веб-службы, поэтому я понимаю, что она использует Envelope из ‹SOAP-ENV:Envelope› в качестве операции и аутентификации в веб-службе. как анонимный пользователь. Я рассмотрю возможность использования посредника класса, как вы предлагаете. Я смотрел на встроенные сценарии, такие как Groovy или JavaScript. Как вы думаете, будет легко создать этот заголовок, используя любой из них? - person pbons; 29.03.2013
comment
Да, это возможно с помощью скриптовых посредников. (Здесь вы можете получить доступ к Envelope или даже к простым заголовкам пары "имя-значение") docs. wso2.org/wiki/display/ESB460/Script+Mediator - person Shelan Perera; 29.03.2013

Похоже, вы хотите защитить службу. Тогда проще всего использовать безопасность токена имени пользователя. Перейдите на панель сервисов в WSO2 ESB для вашего прокси-сервиса и защитите его с помощью UT. См. также http://docs.wso2.org/wiki/display/ESB460/Sample+200%3A+Using+WS-Security+with+policy+attachments+for+proxy+services для примера безопасности

person Samisa    schedule 29.03.2013
comment
Спасибо Самиса. Я потратил некоторое время на политику безопасности, как вы предложили, и в кратчайшие сроки это стало довольно сложно. Я потратил некоторое время на настройку WS-Security и Rampart, но это ни к чему не привело. Я уверен, что это один из вариантов, но, не имея знаний о безопасности, это было бы очень трудоемким предложением. В конце концов я использовал скрипт в конфигурации Synapse (см. запись ответа). - person pbons; 02.04.2013