1

I have pipe delimited data, which I want to transform that into xml. That transformation needs to be done based on the content of pipe delimited data. I'm trying to apply factory design pattern to design my model classes.It is throwing following errors.

what is the best way to solve the problem for the content based transformation.

Source.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>()
James Z
  • 12,209
  • 10
  • 24
  • 44
TechGeek
  • 480
  • 1
  • 8
  • 22

0 Answers0