【问题标题】:How to add additional data to a mule payload?如何向 mule 有效负载添加其他数据?
【发布时间】:2012-02-27 15:07:04
【问题描述】:

我正在尝试将一些额外的静态数据添加到入站 http 消息(作为 URL 参数接收)有效负载,然后再将其提交到基于出站 http 表单的端点。我的骡子配置如下:

<flow name="login" doc:name="login">
    <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:8081/login" doc:name="Login"/>

    <http:body-to-parameter-map-transformer doc:name="Body to Parameter Map"/>  

    <http:outbound-endpoint address="http://localhost:8090/mayapp/Main/login.do"
            method="POST" contentType="application/x-www-form-urlencoded" exchange-pattern="request-response">
    </http:outbound-endpoint>
</flow>

以上将 URL 参数转换为 http 形式的 POST(名称/值对)非常好。我现在需要的是能够将新的名称-值对添加到 POST(ed) 数据中?我要发布的表单需要一些静态数据(作为隐藏的 HTML 字段发布),我希望在转换过程中处理这些数据。

我已经设法使用自定义组件来实现这一点。我想知道是否有更简单的方法来使用 Mule 的本机转换器/消息处理器来处理这个问题!

【问题讨论】:

    标签: http mule


    【解决方案1】:

    您也可以使用表达式组件:

    <expression-component doc:name="change_payload">
       <![CDATA[#[ message.payload = 'foo';]]]>
    </expression-component>
    

    【讨论】:

      【解决方案2】:

      首先,我会为此使用转换器而不是组件,因为它实际上是您对有效负载数据进行的转换。

      其次,我想不出除 Groovy 之外的其他转换器来修改由 body-to-parameter-map-transformer 创建的 Map 有效负载。比如:

      <script:transformer>
          <script:script engine="groovy">
              <script:text>
                  payload['newKey'] = 'newValue'
              </script:text>
          </script:script>
      </script:transformer>
      

      【讨论】:

      • 编写自己的 AbstractMessageTransformer 怎么样?那一个可以访问http请求参数并修改您的有效负载(或做任何事情......)
      • 当然,如果您更喜欢编译扩展。否则,脚本转换器,或者自 Mule 3.3 起,基于 MEL 的表达式转换器既可以访问 HTTP 请求参数,也可以修改有效负载。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2012-09-18
      相关资源
      最近更新 更多