POST JSON 与 mule esb
POST JSON with mule esb
我需要获取 json 内容,我需要将此 json 传输到 Web 服务,该服务将发送推送并向我的应用程序重新发送 [=18= 中的响应] 格式。在我的应用程序中,如果发送了推送,我必须对这个响应进行 trait,如果没有,则必须发送电子邮件。对于客户端应用程序,我使用的是 Postman(Google 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>
因为您在第一个流程中使用了流程变量电子邮件
<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']]
更新
出站使用url以下方式,
例如,如果您的外部 url 是 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"/>
我需要获取 json 内容,我需要将此 json 传输到 Web 服务,该服务将发送推送并向我的应用程序重新发送 [=18= 中的响应] 格式。在我的应用程序中,如果发送了推送,我必须对这个响应进行 trait,如果没有,则必须发送电子邮件。对于客户端应用程序,我使用的是 Postman(Google 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>
因为您在第一个流程中使用了流程变量电子邮件
<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']]
更新
出站使用url以下方式,
例如,如果您的外部 url 是 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"/>