休息服务在骡子中产生奇怪的反应

时间:2014-09-25 16:10:33

标签: json mule mule-studio

我有以下骡子流程: -

<jdbc-ee:connector name="Database_Global" dataSource-ref="DB_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database">
<jdbc-ee:query key="InsertQuery" value="INSERT INTO getData(ID,NAME,AGE,DESIGNATION)VALUES(#[flowVars['id']],#[flowVars['name']],#[flowVars['age']],#[sessionVars['valueFromgetDesc']])"/>          
</jdbc-ee:connector>

<flow name="ttFlow1" doc:name="ttFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP"/>
<set-payload doc:name="Set Payload" value="{"insertDataRequest": [{"id": "1","name": "Sidray","age": "55","designation": "SE"},{"id": "2","name": "Anir","age": "51","designation": "SE"}]}"/>

<jersey:resources doc:name="REST">
   <component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl"/>
</jersey:resources>

<json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
 <foreach collection="#[message.payload.insertDataRequest]" doc:name="For Each">
    <logger message="INSERTDATA #[message.payload.id]" level="INFO" doc:name="Logger"/>
    <set-variable variableName="id" value="#[message.payload.id]" doc:name="Variable"/>
    <set-variable variableName="name" value="#[message.payload.name]" doc:name="Variable"/>
    <set-variable variableName="age" value="#[message.payload.age]" doc:name="Variable"/>
    <set-session-variable variableName="designation" value="#[message.payload.designation]" doc:name="Session Variable"/>
   <logger message="Total #[variable:id] #[variable:name] #[sessionVars['designation']]" level="INFO" doc:name="Logger"/>

 <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="InsertQuery" queryTimeout="-1" connector-ref="Database_Global" doc:name="Database (JDBC)"/>

 <scripting:component doc:name="Groovy">
  <scripting:script engine="Groovy">
  <scripting:text>
  <![CDATA[ 
   import com.test.services.schema.maindata.v1.*
   def dResponse = new DataResponse()
   dResponse.response='Data inserted Successfully'
   return dResponse]]>
  </scripting:text>
  </scripting:script> 
  </scripting:component> 

 <json:object-to-json-transformer doc:name="Object to JSON"/>
 <logger message="Data inserted Successfully" level="INFO" doc:name="Logger"/>
   </foreach>
</flow>

我正在做的是我有restImpl类(<component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl"/>),它以下列格式返回请求: -

[insertDataRequest=[DataRequest [id=1, name=Sidray, age=21, designation=SE], DataRequest [id=2, name=Anir, age=55, designation=SE]]]

此后,我使用json:json-to-object-transformer从请求对象中获取所有值,例如 id 名称年龄并将其存储在流量变量中,然后调用 JDBC outboundendpoint 并在 SQL 中使用这些变量来插入数据..

我能够成功插入数据库.. ..然后我使用 Groovy脚本

设置响应

现在问题很简单..在这里我可以调用其余服务并成功插入数据库..但问题是我无法在服务调用后在浏览器中显示响应,..

enter image description here

请帮忙

2 个答案:

答案 0 :(得分:2)

来自foreach doc:http://www.mulesoft.org/documentation/display/current/Foreach

  

当您将某些集合类型(例如Java)拆分为多个部分进行处理时,可以将集合重新聚合为不同的集合类型 - 例如MuleMessageCollection。 (因此,您可能需要添加额外的流程步骤以将已处理的消息集合转换回其原始集合类型。)

因此,对于foreach,您不会收到每次执行其内部结果的汇总,因此您可以使用{&#39;必须自己聚合。

我建议如下:

  • 在类型为List
  • 的foreach之前创建一个流变量
  • 在foreach中,将结果附加到此列表
  • 在foreach之后将List转换为您想要发送到浏览器的任何响应。

或者删除foreach并使用常规collection-splitter后跟aggregator:)

答案 1 :(得分:1)

所以,最后按照David的解决方案,创建了流量变量,并将结果附加到for和for之外的每个...能够在有效负载中设置流量变量并能够显示它