Xml 读取平面文件并写入将写入不同对象的多个写入器

Xml 读取平面文件并写入将写入不同对象的多个写入器,xml,spring,spring-boot,spring-batch,Xml,Spring,Spring Boot,Spring Batch,我需要读取一个平面文件并创建一个交易java对象。现在处理器应该基于交易java对象创建3个不同的java对象。 我必须将这3个不同的java对象写入3个不同的xml文件 我只想一个读取3个处理器,然后根据读取的数据将3个写入多个xml文件 我尝试过compositeItemWriter,但它将使用相同的对象进行书写。但我有3个不同的对象:消费者、信封、发货订单 样本输入: 11000000001F11000000062237 693553467588549 1100000000122

我需要读取一个平面文件并创建一个交易java对象。现在处理器应该基于交易java对象创建3个不同的java对象。 我必须将这3个不同的java对象写入3个不同的xml文件

我只想一个读取3个处理器,然后根据读取的数据将3个写入多个xml文件

我尝试过compositeItemWriter,但它将使用相同的对象进行书写。但我有3个不同的对象:消费者、信封、发货订单

样本输入:

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>test@gmail.com</distributionChannel>
                </preference>
            </preferences>
            <deliveryPoints>
                <dpvDeliveryPoint>
                    <dpv>1171783651</dpv>
                </dpvDeliveryPoint>
                <emailDeliveryPoint>
                    <email>test@gmail.com</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>
11000000001F110000062237 69355346758549
11000000001221000000030237      628525475867698
11000000031110000000562374      687598787668557
11000000001G210000056237 6875575645346
11000000001F111000000062376935534675849
11000000001221000000030237      628525475867698
产出1。
1481
237
999000367588
陈述
E
test@gmail.com
1171783651
test@gmail.com
产出2:
xxxx
xxx
xxx
xxx
陈述
xxx
xxx
2017-09-04
类\u电子邮件XXXXXX
本和
对
不
2017-09-04
产出3:
一串
一串
2006-08-19T19:27:14+02:00
一串
一串
一串
一串
一串
一串
一串
一串
一串
不
对
2005-09-12+02:00
未定义
谢谢你在这方面的帮助。
谢谢

您与
CompositeItemWriter
非常接近。但是,根据您所描述的内容,有一个更好的选项,即
分类器组件编写器
。这个
ItemWriter
实现允许您插入一个
分类器
,您可以实现它来选择您的对象最终传递给哪个
ItemWriter
。事实上,我们甚至提供了一个应该对您有用的
分类器
实现,即
子分类器
。它将类的映射作为键,
ItemWriter
是值。这将允许您将每个对象类型映射到相应的
ItemWriter

谢谢你,迈克尔,我会查一查让你知道的。你们有同样的样品吗?