如何从应用程序获取json到我的mule应用程序

时间:2015-04-04 12:24:21

标签: mule esb

我想用我的mule应用程序链接两个应用程序。所以它必须从第一个(msg,令牌)获取信息,并添加另一个信息(电子邮件)并将所有这些信息重播到第二个应用程序。 这是我的代码:

<db:mysql-config name="MySQL_Configuration" host="localhost" port="3306" user="root" database="mulesoft" doc:name="MySQL Configuration"/>
    <smtp:gmail-connector name="Gmail" validateConnections="true" doc:name="Gmail"/>
<flow name="flows1Flow1">

    <http:inbound-endpoint host="localhost" port="8084"  encoding="UTF-8" doc:name="HTTP"/>
        <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
        <set-variable variableName="msg" value="#[message.payload.msg]" doc:name="Variable"/>
        <set-variable variableName="tkn" value="#[message.payload.tkn]" doc:name="Variable"/>
        <db:select config-ref="MySQL_Configuration" doc:name="Database">
            <db:parameterized-query><![CDATA[select * from push where token = #[message.payload['token']]]]></db:parameterized-query>
        </db:select>
        <foreach doc:name="For Each">
            <set-session-variable variableName="email" value="#[message.payload.email]" doc:name="Session Variable"/>
            <json:object-to-json-transformer doc:name="Object to JSON"/>
            <http:outbound-endpoint exchange-pattern="request-response" method="POST" address="http://slice.WS.com/api.php/push/send_test_push" contentType="application/json" doc:name="HTTP"/>
        </foreach>

</flow>

当我使用邮递员(谷歌浏览器扩展程序)发布json信息进行测试时,我得到以下结果: enter image description here

  1. 怎么了?
  2. 如何从第二个以json格式的应用程序(Web服务)恢复响应?
    提前谢谢你。

1 个答案:

答案 0 :(得分:0)

您没有构建可以通过HTTP正确序列化的特定响应对象,因此Mule使用流的最新消息处理器生成的内容作为响应。

在您的情况下,for-each会生成一个List对象,而Mule会尽职尽责地将其序列化为HTTP响应。

您需要添加http:response-builder元素和set-payload消息处理器来创建对您的入站端点的调用者有意义的HTTP响应。

示例:

<set-payload value="OK"/>
<http:response-builder status="200" contentType="text/plain" />

参考:http://www.mulesoft.org/documentation/display/current/HTTP+Response+Builder