【问题标题】:Adding a header to a XML message in Synapse在 Synapse 中向 XML 消息添加标头
【发布时间】:2013-04-02 06:00:57
【问题描述】:

使用 Synapse 2.1,我试图将没有标头的 XML 消息转换为标头包含凭据的 SOAP 消息,以使用 Web 服务。像这样的:

突触传入消息:

<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 来做到这一点?我成功地使用了转换文件来更新消息的正文,但没有在输出中添加标题。

我尝试在配置文件中使用标头和属性中介,但我不确定该怎么做。阅读有关标头调解器的信息,它说“目前设置标头仅支持简单的值标头”。会这样吗?

谢谢

【问题讨论】:

    标签: wso2 synapse


    【解决方案1】:

    为了记录,我最终使用 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>
    

    【讨论】:

      【解决方案2】:

      您可以使用 XSLT 中介来操作它。所以添加一个带有所需标头的 XSLT 转换,它会添加所需的标头。或者使用脚本调解器/类调解器,您可以在其中操作消息。

      请参考以下内容。

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

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

      如果不需要这个 xml 结构。 您可以使用 Http Headers 您可以使用如下属性。 http://blog.thilinamb.com/2011/04/how-to-access-web-service-using-http.html

      【讨论】:

      • 谢谢你,雪兰。我实际上尝试将它添加到 XSLT 转换中,但它不起作用。所以,现在我认为 Web 服务需要在 HTTP 标头中发送凭据。是否可以使用任何现有的调解器(考虑标头或属性)来做到这一点?
      • XSLT 遇到了什么问题?你有没有给出来源“。”如论坛帖子中所述?这不是名称值对,而是层次结构。其他选项是使用类中介来构造消息。在那里你有完全的访问权限。 docs.wso2.org/wiki/display/ESB460/…
      • 当我使用 XSLT 方法时,我从 Web 服务提供商那里得到一个错误“Web 服务中不存在名为 Envelope 的操作”,所以我知道它从“" 作为匿名用户在 Web 服务中的操作和身份验证。我会按照您的建议考虑使用班级调解员。我正在研究像 Groovy 或 JavaScript 这样的内联脚本。您认为使用其中任何一个创建该标题会很容易吗?
      • 是的,可以使用脚本中介。 (在这里您可以访问信封。甚至是简单的名称值对标题)docs.wso2.org/wiki/display/ESB460/Script+Mediator
      【解决方案3】:

      您似乎想保护该服务。最简单的方法是使用用户名令牌安全性。转到 WSO2 ESB 中的服务仪表板以获取您的代理服务并使用 UT 保护它。另请参阅http://docs.wso2.org/wiki/display/ESB460/Sample+200%3A+Using+WS-Security+with+policy+attachments+for+proxy+services 以获取安全示例

      【讨论】:

      • 谢谢萨米萨。按照您的建议,我在安全策略上花了一些时间,但很快它就变得相当复杂。我花了一些时间在 WS-Security 和 Rampart 配置上,但它让我无处可去。我确信这是一种选择,但如果没有安全知识,这将是一个非常耗时的提议。最后,我在 Synapse 配置中使用了一个脚本(请参阅答案条目。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多