Я хочу преобразовать строку с разделителями канала в xml на основе поля в строке ввода / строки с разделителями.
Пример:
55158 | 11901 | 1 | 2346, если позиция 3 равна 1, ему нужно сгенерировать только несколько полей в xml, как показано в выходном файле xml.
Аналогично, если позиция 3 равна 2, ему нужно сгенерировать только несколько полей в xml, как показано в выходном файле xml.
Я хотел бы использовать подход фабричного шаблона для генерации различных xmls на основе входных данных.
Мне удалось преобразовать файл с разделителями в xml на основе логики, которую я реализовал. Может ли кто-нибудь помочь мне с лучшими практиками, чтобы достичь решения.
CamelConfig.java
@Component
public class CamelConfig extends RouteBuilder {
@Override
public void configure() throws Exception {
try {
CamelContext context = new DefaultCamelContext();
ConverterRoute route = new ConverterRoute();
route.addRoutesToCamelContext(context);
context.start();
Thread.sleep(5000);
context.stop();
} catch (Exception exe) {
exe.printStackTrace();
}
}
}
ConverterRoute.java
public class ConverterRoute implements RoutesBuilder {
private static final String SOURCE_INPUT_PATH = "file://inbox?fileName=Source.txt";
private static final String SOURCE_OUTPUT_PATH = "file://outbox?fileName=file.xml";
public void addRoutesToCamelContext(CamelContext context) throws Exception {
context.addRoutes(new RouteBuilder() {
public void configure() {
try {
DataFormat bindyFixed = new BindyCsvDataFormat(Test.class);
from(SOURCE_INPUT_PATH).
unmarshal(bindyFixed).
marshal().
xstream().
to(SOURCE_OUTPUT_PATH).log("Finished Transformation").end();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
Source.txt
55158|11901|1|2346
55158|11101|1|3454
55158|11101|3|3454
55158|11101|2|3454
Тест.java
@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 = "RECRNUM")
private int RECRNUM;
@DataField(pos = 4,name = "UOMCOD")
private Integer UOMCOD;
}
Ожидаемый результат
fileOne.xml
<?xml version='1.0' encoding='UTF-8'?>
<Test>
<ALT_NUM>55158</ALT_NUM>
<RECRNUM>1</RECRNUM>
<UOMCOD>2346</UOMCOD>
</Test>
fileTwo.xml
<?xml version='1.0' encoding='UTF-8'?>
<Test>
<ALT_NUM>55158</ALT_NUM>
<RECRNUM>1</RECRNUM>
<UOMCOD>3454</UOMCOD>
</Test>
fileThree.xml
<?xml version='1.0' encoding='UTF-8'?>
<Test>
<ALT_NUM>55158</ALT_NUM>
<PRTNUM>11901</PRTNUM>
<RECRNUM>3</RECRNUM>
<UOMCOD>2346</UOMCOD>
</Test>
fileFour.xml
<?xml version='1.0' encoding='UTF-8'?>
<Test>
<RECRNUM>2</RECRNUM>
<PRTNUM>11901</PRTNUM>
<UOMCOD>3454</UOMCOD>
</Test>
Я включил ожидаемые выходные XML-файлы, как показано выше.