如何从应用程序获取 json 到我的 mule 应用程序
how to get json from an application to my mule application
我想 link 两个应用程序与我的 mule 应用程序。因此它必须从第一个应用程序(消息、令牌)获取信息,并添加另一个信息(电子邮件)并将所有这些信息重播到第二个应用程序。
这是我的代码:
<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>
当我用邮递员(google chrome 扩展名)发布 json 信息进行测试时,我得到了这个结果:
- 怎么了?
- 如何从 json 格式的第二个应用程序(Web 服务)恢复响应?
提前谢谢你。
您没有构建可以通过 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
我想 link 两个应用程序与我的 mule 应用程序。因此它必须从第一个应用程序(消息、令牌)获取信息,并添加另一个信息(电子邮件)并将所有这些信息重播到第二个应用程序。 这是我的代码:
<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>
当我用邮递员(google chrome 扩展名)发布 json 信息进行测试时,我得到了这个结果:
- 怎么了?
- 如何从 json 格式的第二个应用程序(Web 服务)恢复响应?
提前谢谢你。
您没有构建可以通过 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