Java 如何使用ApacheCamel而不是xml记录列表将平面文件中的单个记录转换为一个xml

Java 如何使用ApacheCamel而不是xml记录列表将平面文件中的单个记录转换为一个xml,java,apache-camel,spring-camel,bindy,Java,Apache Camel,Spring Camel,Bindy,CamelConfig.java ConverterRoute.java Source.txt Test.java 输出 *File.xml* <?xml version='1.0' encoding='UTF-8'?> <list> <com.john.Test> <ALT_NUM>55158</ALT_NUM> <PRTNUM>11901</PRTNUM>

CamelConfig.java

ConverterRoute.java

Source.txt

Test.java

输出

*File.xml*

<?xml version='1.0' encoding='UTF-8'?>
<list>
    <com.john.Test>
            <ALT_NUM>55158</ALT_NUM>
            <PRTNUM>11901</PRTNUM>
            <UOMCOD>2346</UOMCOD>
    </com.john.Test>
    <com.john.Test>
            <TRNNAM>55158</TRNNAM>
            <PRTNUM>11901</PRTNUM>
            <UOMCOD>3454</UOMCOD>
    </com.john.Test>
</list>

55158
11901
2346
55158
11901
3454
预期产出

fileOne.xml


55158
11901
2346
fileTwo.xml


55158
11901
3454

我能够在一个文件中生成包含所有字段的xml文件。我希望在一个xml文件中包含一条记录。任何人都可以帮助我。还有输出文件根元素中的标记名,它正在生成类的包名。

您可能可以使用
split()
分别处理csv记录中的每一行

from(SOURCE_INPUT_PATH).
 .split().tokenize(System.lineSeparator())
   unmarshal(bindyFixed).
   marshal().
   xstream().
   to(SOURCE_OUTPUT_PATH).log("Finished Transformation").end();

我可以看出拆分更改是有效的,但如何为单个xml文件指定唯一的文件名呢。感谢Arentry将源路径替换为输出路径,如下所示。这将解决长达数秒的唯一文件名问题,但如果在同一秒内创建了两个文件,则可能需要在微秒级
private static final String SOURCE\u OUTPUT\u PATH=”上创建一些内容file://outbox?fileName=file.xml_$simple{date:now:yyyyMMddHHmmss}”不,它不起作用。它仍然在生成单个文件。单记录数据。嘿!当我用微秒替换时间戳时,它起作用了。我可以知道如何更改标签名吗。它与包名一起生成(例如:com.john.test,我只需要测试,而不是打印整个pojo包名)。
55158|11901|2346
55158|11101|3454
@CsvRecord(separator = "\\|",skipField = true,name = "Test")
public class Test {

    @DataField(pos = 1,name = "ALT_NUM")
    private BigDecimal ALT_NUM;

    @DataField(pos = 2,name = "PRTNUM")
    private BigDecimal PRTNUM;

    @DataField(pos = 3,name = "UOMCOD")
    private Integer UOMCOD;

}
<?xml version='1.0' encoding='UTF-8'?>
<list>
    <com.john.Test>
            <ALT_NUM>55158</ALT_NUM>
            <PRTNUM>11901</PRTNUM>
            <UOMCOD>2346</UOMCOD>
    </com.john.Test>
    <com.john.Test>
            <TRNNAM>55158</TRNNAM>
            <PRTNUM>11901</PRTNUM>
            <UOMCOD>3454</UOMCOD>
    </com.john.Test>
</list>
<?xml version='1.0' encoding='UTF-8'?>    
    <Test>
            <ALT_NUM>55158</ALT_NUM>
            <PRTNUM>11901</PRTNUM>
            <UOMCOD>2346</UOMCOD>
    </Test>
<?xml version='1.0' encoding='UTF-8'?>    
    <Test>
            <ALT_NUM>55158</ALT_NUM>
            <PRTNUM>11901</PRTNUM>
            <UOMCOD>3454</UOMCOD>
    </Test>
from(SOURCE_INPUT_PATH).
 .split().tokenize(System.lineSeparator())
   unmarshal(bindyFixed).
   marshal().
   xstream().
   to(SOURCE_OUTPUT_PATH).log("Finished Transformation").end();