Как применить преобразование данных Bindy для нескольких классов / Применение Bindy для заводских классов - PullRequest
1 голос
/ 12 октября 2019

У меня есть данные с разделителями, которые я хочу преобразовать в xml. Это преобразование должно быть сделано на основе содержимого данных, разделенных каналом. Я пытаюсь применить шаблон проектирования фабрики для разработки классов моей модели. Он выдает следующие ошибки.

, что является лучшим способом решения проблемы для преобразования на основе содержимого.

Источник. txt

0191155154|0000000001|0000001234|US|0000001101|2117565242|00029|00001|03000|
0191155154|0000000001|0000002342|US|0000001101|2117565242|00029|00001|03030|

PartIfd.java

@CsvRecord(separator = "\\|",skipField = true)
public class PartIfd {

    @DataField(pos = 3)
    private Integer WHSID;

    @Link
    private CntrlSeg cntrlSeg;

}

CntrlSeg.java

public class CntrlSeg {

    @DataField(pos = 5)
    private Integer index;

    @Link
    private PartSeg partSeg;

}

PartIfdFactory.java

public PartSeg getInstance(String string){

        if(string.equals("03000")){
            return new PartSeg3000();
        }else 
            return new PartSeg3030();
    }

PartSeg.java

public interface PartSeg {
    public void recordNum();
}

PartSeg3000.java

public class PartSeg3000 implements PartSeg {

    @DataField(pos = 9)
    private Integer recordNum;

    @Override
    public void recordNum() {
        System.out.println("3000");
    }
}

PartSeg3030.java

public class PartSeg3030 implements PartSeg {

    @DataField(pos = 7)
    private Integer recordNum;

    @Override
    public void recordNum() {
        System.out.println("3030");
    }
}

ConverterRoute.java

public class ConverterRoute implements RoutesBuilder {

        private static final String SOURCE_INPUT_PATH = "file://inbox?fileName=3000.txt";

        private static final String SOURCE_OUTPUT_PATH = "file://outbox?fileName=file_$simple{date:now:yyyyMMddHHmmssSSS}.xml";

        public void addRoutesToCamelContext(CamelContext context) throws Exception {

            context.addRoutes(new RouteBuilder() {
                public void configure() {
                    try {
                        DataFormat bindyFixed = new BindyCsvDataFormat(PartIfd.class);

                        XStreamDataFormat xStreamDataFormat = new XStreamDataFormat();
                        xStreamDataFormat.setAliases(Collections.singletonMap("PART_INB_IFD",PartIfd.class.getCanonicalName()));

                        from(SOURCE_INPUT_PATH).
                                split().tokenize(System.lineSeparator()).
                                unmarshal(bindyFixed).
                                marshal(xStreamDataFormat).
                                to(SOURCE_OUTPUT_PATH).log("Finished Transformation").end();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
}

Stack-trace

Caused by: java.lang.InstantiationException: com.test.domain.PartSeg
    at java.lang.Class.newInstance(Class.java:427) ~[na:1.8.0_191]
    at org.apache.camel.util.ObjectHelper.newInstance(ObjectHelper.java:1734) ~[camel-core-2.24.1.jar:2.24.1]
    ... 32 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.test.domain.PartSeg.<init>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...