我有以下骡子流程: -
<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脚本
设置响应现在问题很简单..在这里我可以调用其余服务并成功插入数据库..但问题是我无法在服务调用后在浏览器中显示响应,..
请帮忙
答案 0 :(得分:2)
来自foreach
doc:http://www.mulesoft.org/documentation/display/current/Foreach
当您将某些集合类型(例如Java)拆分为多个部分进行处理时,可以将集合重新聚合为不同的集合类型 - 例如MuleMessageCollection。 (因此,您可能需要添加额外的流程步骤以将已处理的消息集合转换回其原始集合类型。)
因此,对于foreach
,您不会收到每次执行其内部结果的汇总,因此您可以使用{&#39;必须自己聚合。
我建议如下:
或者删除foreach并使用常规collection-splitter
后跟aggregator
:)
答案 1 :(得分:1)
所以,最后按照David的解决方案,创建了流量变量,并将结果附加到for和for之外的每个...能够在有效负载中设置流量变量并能够显示它