Как использовать фабричный шаблон для Apache Camel Bindy - PullRequest
0 голосов
/ 10 октября 2019

Я хочу преобразовать строку с разделителями канала в 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-файлы, как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...