Java 如何使用ApacheCamel而不是xml记录列表将平面文件中的单个记录转换为一个xml
CamelConfig.java ConverterRoute.java Source.txt Test.java 输出 *File.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>
<?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();