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>()