我有管道分隔的数据,我想将其转换为 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");
}
}
转换器路由.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();
}
}
});
}
}
堆栈跟踪
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>()