2014-09-25 63 views
0

产生奇怪的回应,我有以下骡子流量: -REST服务在骡子

<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现在,年龄并将其存储在流量变量,然后调用JDBCoutboundendpointSQL使用这些变量来插入数据..

我能够插入到DB顺利..。 。然后我设置响应使用Groovy脚本

现在的问题很简单..在这里,服务电话后浏览器响应,..

enter image description here

请帮

+0

如果您可以格式化XML,因为它很难阅读,因此它会很好。另外,正如我最近在一个类似的问题上评论的那样,我认为使用Jersey组件和其他流程元素的组合是错误的设计。可以使用一个简单的组件,也可以将其余流程移动到另一个流程中,并从JAX-RS批注资源中调用它。 – 2014-09-25 16:23:04

+0

现在真正的问题是:你想通过HTTP响应什么? “foreach”将产生多个值:你打算如何聚合它们以创建可通过HTTP序列化的响应?同样,如果JAX-RS组件是该流程中唯一的JAX-RS组件,那将更容易,因为响应构建将在组件中完成,而不是您在此处混淆的混合模式。 – 2014-09-25 16:25:31

+0

David,我想设置由Groovy生成的Json格式的响应 – 2014-09-25 17:05:25

回答

2

foreach DOC:http://www.mulesoft.org/documentation/display/current/Foreach

当你分割特定集合类型 - Java的,例如 - 成许多碎片进行处理,收集可再例如,汇总到不同的集合类型 - MuleMessageCollection。 (因此,您可能需要添加额外的流程步骤来转换处理的消息收集回原来的集合类型。)

因此,与foreach,您将不会收到的每次执行结果的汇总它里面有什么,所以你必须聚合自己。

我建议如下:

  • 类型列表
  • 的的foreach在foreach之前创建一个流量变量,你的结果添加到这个列表
  • 为的foreach后转换列表为任何响应你想发送到浏览器。

或掉落的foreach,只是使用普通collection-splitter后跟aggregator :)

+0

感谢大卫,为你的时间.. – 2014-09-25 19:12:22

1

所以,最后按照大卫的解决方案,创造了流动变量和内部的和外部的每个附加结果...能够在有效载荷中设置流量变量并能够显示它