2015-02-11 41 views
2

使用mule數據映射器從CSV轉換爲JSON。我想檢查是否必填字段爲空。如果空記錄該字段並將其丟棄以供進一步處理。驗證datamapper中的字段(CSV到JSON)。

我知道腳本選項我們有if(input.data.length> 0)。' 但如果這失敗瞭如何丟棄整行?

回答

1

只需將整個轉換封裝在if語句的開關大括號中,就可以在mule datamapper中執行此操作。事情是這樣的:

if (input.Quantity > 0) { 
    output.id = input.id; 
    output.Customer = input.Customer; 
    output.Quantity = input.Quantity; 
    output.Price = input.Price; 
} 

然而不同的,也許更好,方法是讓DataMapper的變換中的每一行成JSON,然後分裂和過濾的流作爲單獨的步驟。

<flow name="filterindatamapperFlow2" doc:name="filterindatamapperFlow2"> 
    <file:inbound-endpoint path="/tmp/inbox" doc:name="Inbound file"/> 
    <data-mapper:transform config-ref="CSV_To_UnfilteredJSON" doc:name="CSV To Unfiltered JSON"/> 
    <request-reply> 
     <vm:outbound-endpoint path="splittandprocess" exchange-pattern="one-way"/> 
     <vm:inbound-endpoint path="result"/> 
    </request-reply> 
    <json:object-to-json-transformer doc:name="Object to JSON"/> 
    <file:outbound-endpoint path="/tmp/outbox" doc:name="Outbound file"/> 
</flow> 

<flow name="splittandprocess"> 
    <vm:inbound-endpoint path="splittandprocess" exchange-pattern="one-way"/> 
    <json:json-to-object-transformer returnClass="java.util.List" doc:name="JSON to Object"/> 
    <splitter expression="#[payload]" doc:name="Splitter"/> 
    <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/> 
    <message-filter doc:name="Filter Out Orders With No Quantity" onUnaccepted="handleFilteredMessages"> 
     <expression-filter expression="#[payload['Quantity'] > 0]" /> 
    </message-filter> 
    <collection-aggregator failOnTimeout="false" timeout="1000"/> 
    <vm:outbound-endpoint path="result" exchange-pattern="one-way"/> 
</flow> 
<flow name="handleFilteredMessages"> 
    <logger message="Payload filtered #[payload]" level="ERROR" doc:name="Logger"/> 
</flow> 
+0

情景是我有csv文件。檢查幾個字段是否爲非零。如果其中一個爲零,則丟棄整行,記錄該值並繼續到文件中的下一行。 – user3483129 2015-02-11 18:16:40

+0

正是這樣,上面的腳本將做什麼。該行的數量列爲零,該行將被跳過。我會盡快發佈一個更完整的例子。此外編輯datamapper腳本直接切換到腳本視圖,而不是圖形映射器。 – 2015-02-11 18:32:12

+0

是的,它的工作原理,你知道如何使用記錄器組件記錄這個值嗎? – user3483129 2015-02-11 19:47:05