2017-10-01 89 views
-1

我有一個讀取平面文件並創建一個TRADE java對象的需求。現在處理器應該創建3個基於TRADE java對象的不同java對象。 我必須將這3個不同的java對象寫入3個不同的xml文件。讀取平面文件並寫入多個寫入器,寫入不同的對象

簡單地說,我想要一個讀取3個處理器,並根據讀取的數據寫入多個xml文件。

我試圖compositeItemWriter但它會採取同樣的對象writing.but我有3個不同的對象的消費者,信封,deliveryOrder

SampleInput:

11000000001F11000000062237  693553467588549 
11000000001221000000030237  628525475867698 
11000000031110000000562374  687598787668557 
11000000001G21000000056237  687557575645346 
11000000001F11000000062237  693553467588549 
11000000001221000000030237  628525475867698 

output 1. 
    <consumers> 
<consumer> 
      <sequenceNum>1481</sequenceNum> 
      <sourceSystemBrandId>237</sourceSystemBrandId> 
      <sourceCid>999000367588</sourceCid> 
      <preferences> 
       <preference> 
        <contentType>Statement</contentType> 
        <value>E</value> 
        <distributionChannel>[email protected]</distributionChannel> 
       </preference> 
      </preferences> 
      <deliveryPoints> 
       <dpvDeliveryPoint> 
        <dpv>1171783651</dpv> 
       </dpvDeliveryPoint> 
       <emailDeliveryPoint> 
        <email>[email protected]</email> 
       </emailDeliveryPoint> 
      </deliveryPoints> 
    </consumer> 
</consumers> 
output 2: 
<envelopes> 
<envelope> 
    <sourceEnvId>xxxx</sourceEnvId> 
    <sourceSystemBrandId>xxx</sourceSystemBrandId> 
    <sourceCid>xxx</sourceCid> 
    <envelopeData> 
    <envelopeName>xxx</envelopeName> 
    <contentType>statement</contentType> 
    <statementData> 
    <accountNumber>xxx</accountNumber> 
    <accountName>xxx</accountName> 
    <statementAmount/> 
    <periodStartDate/> 
    <periodEndDate/> 
    <date>2017-09-04</date> 
    </statementData> 
<details><detail><name>Class_Email</name><value>xxx</value><type>xxx</type> 
</detail></details> 
    <envelopeDocuments> 
    <envelopeDocument><docRef>Benhe</docRef></envelopeDocument> 
    </envelopeDocuments> 
    <printSuppressed>YES</printSuppressed> 
    <historicalMail>NO</historicalMail> 
    <asOfDate>2017-09-04</asOfDate> 
    </envelopeData> 

</envelope> 
</envelopes> 


output 3: 

<deliveryOrder> 
<consumer> 
    <preferences> 
     <!--1 or more repetitions:--> 
     <preference> 
      <contentType>string</contentType> 
      <value>string</value> 
      <!--Optional:--> 
      <effectiveDate>2006-08-19T19:27:14+02:00</effectiveDate> 
     </preference> 
    </preferences> 
    <!--Optional:--> 
    <details> 
     <detail> 
      <name>string</name> 
      <value>string</value> 
     </detail> 
     <detail> 
      <name>string</name> 
      <value>string</value> 
     </detail> 
     <detail> 
      <name>string</name> 
      <value>string</value> 
     </detail> 
    </details> 
    <deliveryPoints> 
     <unstructuredNameDeliveryPoint> 
      <name>string</name> 
     </unstructuredNameDeliveryPoint> 
    </deliveryPoints> 
</consumer> 
<envelopeDocuments> 
    <envelopeDocument> 
     <docRef>string</docRef> 
     <docFingerprint>string</docFingerprint> 
    </envelopeDocument> 
</envelopeDocuments> 
<printSuppressed>NO</printSuppressed> 
<historicalMail>Yes</historicalMail> 
<asOfDate>2005-09-12+02:00</asOfDate> 
</envelopeData>undefined</deliveryOrder> 

欣賞任何幫助。 謝謝。

回答

0

您接近CompositeItemWriter。然而,根據你所描述的是ClassifierCompositeItemWriter有更好的選擇。這個ItemWriter實現允許你注入一個Classifier,你可以實現它來選擇你的對象最終開始傳遞給哪個ItemWriter。實際上,我們甚至提供了一個Classifier實現,它對您應該是有用的,SubclassClassifier。這需要一個類的地圖作爲關鍵和ItemWriter是價值。這將允許您將每個對象類型映射到合適的ItemWriter

+0

謝謝Michael,我會檢查並通知你。你有同樣的樣品嗎? –