Wso2 在Synapse中向XML消息添加头

Wso2 在Synapse中向XML消息添加头,wso2,synapse,Wso2,Synapse,使用Synapse2.1,我试图将一条没有头的XML消息转换为一条SOAP消息,该消息的头包含使用web服务的凭据。大概是这样的: Synapse传入消息: <SOAP-ENV:Envelope> <SOAP-ENV:Body> ...TAGS... </SOAP-ENV:Body> </SOAP-ENV:Envelope> <SOAP-ENV:Envelope> <SOAP-ENV:Header> <y

使用Synapse2.1,我试图将一条没有头的XML消息转换为一条SOAP消息,该消息的头包含使用web服务的凭据。大概是这样的:

Synapse传入消息:

<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传出消息:

<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>

srnm
psswrd
…标签。。。
我如何配置Synapse来执行此操作?我成功地使用了一个转换文件来更新消息体,但没有将头添加到输出中

我尝试在配置文件中使用头和属性中介,但我不确定该怎么做。在阅读关于头中介的文章时,它说“目前集合头只支持简单值头”。会是这样吗


谢谢

您可以使用XSLT中介来操作它。因此,添加一个带有所需头的XSLT转换,它将添加所需头。或者使用脚本中介器/类中介器来处理消息

请参考以下有用信息

如果不需要这个xml结构。 您可以使用Http头,也可以使用如下属性。

看起来您想要保护该服务。最简单的方法是使用用户名令牌安全性。转到WSO2 ESB中代理服务的服务仪表板,并使用UT保护它。另请参阅一个安全示例

以获取记录,我最终使用了一个脚本中介,在配置文件中使用addHeader方法使用了一个内联javascript脚本。见下文:

<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>

{user}{psswd});
]]>

谢谢你,谢兰。实际上,我曾尝试将其添加到XSLT转换中,但没有成功。因此,现在我认为web服务需要在HTTP头中发送凭据。使用任何现有的中介(考虑头或属性)都可以做到这一点吗?XSLT有什么问题?你有没有像论坛帖子中提到的那样给出来源“?”?。这不是名称-值对,而是层次结构。另一种选择是使用类中介来构造消息。在那里你可以完全访问。当我使用XSLT方法时,我从web服务提供商那里得到一个错误“web服务中不存在名为Envelope的操作”,因此我理解它将来自“”的Envelope作为操作,并在web服务中作为匿名用户进行身份验证。我将按照您的建议研究使用类中介。我在看Groovy或JavaScript之类的内联脚本。您认为使用其中任何一种创建头文件都很容易吗?是的,使用脚本中介程序也可以。(这里是如何访问信封,甚至是简单的名称-值对标题)谢谢Samisa。我按照你的建议花了一些时间研究安全策略,很快就变得相当复杂了。我花了一些时间在WS-Security和Rampart配置上,但却一事无成。我相信这是一个选择,但没有安全知识,这将是一个非常耗时的提议。最后,我在Synapse配置中使用了一个脚本(参见答案条目)