0

私のdataWeaveへの入力:

コレクション (つまり、「注文」オブジェクトのリスト)

    1st Order Object
    ----SampleObject1    (SampleObject is also a List of Objects that is getting repeated)
          --- SampleValue1    (some 'String' attribute of 'Order' object)
          --- SampleValue2    
    ---SampleObject2
          --- SampleValue3    (some 'String' attribute of 'Order' object)
          --- SampleValue4     .
    ------SampleObject3
        --- SampleValue5     .
        --- SampleValue6
    ------SampleObject4
         --- SampleValue7
          --- SampleValue8

.

2nd Order Object
    ----SampleObject1    (SampleObject is also a List of Objects that is getting repeated)
          --- SampleValue1    (some 'String' attribute of 'Order' object)
          --- SampleValue2    
    ---SampleObject2
          --- SampleValue3    (some 'String' attribute of 'Order' object)
          --- SampleValue4     .
    ------SampleObject3
        --- SampleValue5     .
        --- SampleValue6
    ------SampleObject4
         --- SampleValue7
          --- SampleValue8

コレクション内の「注文」オブジェクトごとに、CSV 内のレコードが必要です。

出力CSV:

SampleValue1      SampleValue3    SampleValue5 .....   (For 1st'Order' object)
SampleValue1      SampleValue3    SampleValue5 ....   (For 2st'Order' object)
SampleValue1      SampleValue3    SampleValue5 .....  (For 3rd'Order' object)
.
.
.
.

次の出力が必要です。DataWeaveコンポーネントで複数の組み合わせを試しました。しかし、解決できませんでした。私が直面している問題は、オブジェクトごとに CSV のレコードが必要なことです。しかし、私が得ているのは、「SampleValue」ごとのレコードです。この問題を克服する方法を教えてください。前もって感謝します!!

4

1 に答える 1

0

内部に dataweave コードを含む以下のフローを見つけてください。

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8082" doc:name="HTTP Listener Configuration"/>
<flow name="testFlow1" >
     <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
    <set-payload value="#['test']" doc:name="Set Payload"/>
    <component class="org.test.MyClass" metadata:id="f70e8945-4d11-40ba-beac-dc2f352cc2ff" doc:name="Java"/> 
    <dw:transform-message doc:name="Transform Message">
        <dw:set-payload><![CDATA[%dw 1.0
%output application/csv separator=" "
---
payload map {
SampleValue1:$.OrderData1,
SampleValue2:$.OrderData2,
SampleValue3:$.OrderData3,
SampleValue4:$.OrderData4,
SampleValue5:$.OrderData5
}]]></dw:set-payload>
    </dw:transform-message>
    <async doc:name="Async">
        <file:outbound-endpoint path="C:\Naveen\OutputDump" responseTimeout="10000" doc:name="File" outputPattern="test.txt"/>
    </async>
    <set-payload value="#['&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;']#[payload]" metadata:id="1e133033-b51d-43a3-a6b5-6496862dd510" doc:name="Set Payload"/>
    <logger message="#[payload]" level="INFO" doc:name="Logger"/>
</flow>

以下は、上記のフローからの出力です

SampleValue1    SampleValue2    SampleValue3    SampleValue4    SampleValue5
orderData1  orderData2  orderData3  orderData4  orderData5
orderData1  orderData2  orderData3  orderData4  orderData5
orderData1  orderData2  orderData3  orderData4  orderData5
orderData1  orderData2  orderData3  orderData4  orderData5
orderData1  orderData2  orderData3  orderData4  orderData5

上記のコードは、以下のように出力にこれを追加する必要がない場合、ヘッダー付きの CSV ファイルを生成し"header=false"ます。

%output application/csv header=false,separator="    "

Java クラスは次のように表示されます。

package org.test;

import java.util.ArrayList;
import java.util.List;

import org.mule.api.MuleEventContext;
import org.mule.api.lifecycle.Callable;

public class MyClass implements Callable{

    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    public Object onCall(MuleEventContext eventContext) throws Exception {
        MyPojo pojos = new MyPojo();
        pojos.setOrderData1("orderData1");
        pojos.setOrderData2("orderData2");
        pojos.setOrderData3("orderData3");
        pojos.setOrderData4("orderData4");
        pojos.setOrderData5("orderData5");

        List MyArray = new ArrayList();
        MyArray.add(pojos);
        MyArray.add(pojos);
        MyArray.add(pojos);
        MyArray.add(pojos);
        MyArray.add(pojos);
        return MyArray;
    }

  }

ポジョは以下のように表示されます

package org.test;

public class MyPojo {

    String OrderData1;
    String OrderData2;
    String OrderData3;
    String OrderData4;
    String OrderData5;

    public String getOrderData1() {
        return OrderData1;
    }
    public void setOrderData1(String orderData1) {
        OrderData1 = orderData1;
    }
    public String getOrderData2() {
        return OrderData2;
    }
    public void setOrderData2(String orderData2) {
        OrderData2 = orderData2;
    }
    public String getOrderData3() {
        return OrderData3;
    }
    public void setOrderData3(String orderData3) {
       OrderData3 = orderData3;
    }
    public String getOrderData4() {
        return OrderData4;
    }
    public void setOrderData4(String orderData4) {
        OrderData4 = orderData4;
    }
    public String getOrderData5() {
        return OrderData5;
    }
    public void setOrderData5(String orderData5) {
        OrderData5 = orderData5;
    }
}

問題がある場合はお知らせください。

于 2015-09-19T17:29:46.540 に答える