2014-09-25 44 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

所以,最後按照大衛的解決方案,創造了流動變量和內部的和外部的每個附加結果...能夠在有效載荷中設置流量變量並能夠顯示它