使用mule esb POST JSON

时间:2015-04-02 21:17:03

标签: post mule esb

我需要获取一个json内容,我需要将这个json传输给一个Web服务,该服务将发送一个推送并向我的应用程序发送一个json格式的响应。并且在我的应用程序中,我必须跟踪此响应,如果推送它确定如果没有,则必须发送电子邮件。对于客户端应用程序,我正在使用Postman(谷歌Chrome扩展程序)。但为了传播,我尝试了很多东西。但我有点困惑我不知道使用什么组件我试过这个代码是正确和足够的或有什么改变,使我的代码更好?!  需要我连接这两个流?因为我在第一个流程中有一个可变电子邮件,我在第二个流程中调用。如果是,我该怎么办呢。提前谢谢你 注意:我正在使用mule 2.5.0 CE。

<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="8083"  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="token" value="#[message.payload.token]" 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-variable variableName="email" value="#[message.payload.email]" doc:name="Variable"/>
        </foreach>
        <json:object-to-json-transformer doc:name="Object to JSON"/>
        <http:outbound-endpoint exchange-pattern="request-response" host="WS.com" port="8080" method="POST" doc:name="HTTP" path="api.php/push/send_test_push"/>
    <logger message="#[message.payload.token]" level="INFO" doc:name="Logger"/>
</flow>


<flow name="flows1Flow2">
        <quartz:inbound-endpoint jobName="HTTP-Puller-Scheduler" repeatInterval="1000" responseTimeout="10000" doc:name="Quartz" repeatCount="0">
            <quartz:event-generator-job/>
        </quartz:inbound-endpoint>
        <http:outbound-endpoint exchange-pattern="request-response" host="WS.com" port="8080" method="GET" doc:name="HTTP" path="api.php/push/send_test_push"/>
   <json:json-to-object-transformer
            returnClass="java.lang.Object" doc:name="JSON to Object" />
        <choice doc:name="Choice">
            <when expression="#[message.payload.success=1]">
                <logger message="its ok" level="INFO" doc:name="Logger" />
            </when>
            <otherwise>
                    <set-payload
                        value="Dear Mail Crawler,
                    \n\n No spam to my email, please!"
                        doc:name="Set Payload" />
                    <smtp:outbound-endpoint host="smtp.gmail.com"
                        port="587" responseTimeout="10000" doc:name="SMTP" connector-ref="Gmail"
                        from="Rajeun" password="pass" subject="Mule Test with Velocity Transformer"
                        to="#[flowVars['email']]" user="mymail%40gmail.com" />

            </otherwise>
</choice>
</flow>

1 个答案:

答案 0 :(得分:0)

由于您在第一个流程中使用了流量变量电子邮件

<set-variable variableName="email" value="#[message.payload.email]" doc:name="Variable"/>

由于您使用的流量变量的范围仅限于流量,因此您不会在第二个流程中获得值#[flowVars['email']]

为此,您需要在第一个流中使用Session变量,而不是如下所示的流变量: -

<set-session-variable variableName="email" value="#[message.payload.email]" doc:name="Session Variable"/>

并按如下方式提取flow2中的值: -

#[sessionVars['email']]

<强>更新

在出站时按以下方式使用网址,
例如,如果您的外部网址为http://localhost:8082/getData/retrieve,则在出站中使用以下内容: -

<http:outbound-endpoint exchange-pattern="request-response" method="GET" address="http://localhost:8082/getData/retrieve" contentType="application/json" doc:name="HTTP"/>