Xml 读取平面文件并写入将写入不同对象的多个写入器
我需要读取一个平面文件并创建一个交易java对象。现在处理器应该基于交易java对象创建3个不同的java对象。 我必须将这3个不同的java对象写入3个不同的xml文件 我只想一个读取3个处理器,然后根据读取的数据将3个写入多个xml文件 我尝试过compositeItemWriter,但它将使用相同的对象进行书写。但我有3个不同的对象:消费者、信封、发货订单 样本输入: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
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
谢谢你,迈克尔,我会查一查让你知道的。你们有同样的样品吗?