Java 当我多次使用相同的定位值时,Camel bindy抛出空指针异常
我使用两个位置相同的数据字段来表示两个不同的属性。它抛出空指针异常。有人能帮我如何使它工作吗 *CamelRoute.java*Java 当我多次使用相同的定位值时,Camel bindy抛出空指针异常,java,xml,apache-camel,bindy,Java,Xml,Apache Camel,Bindy,我使用两个位置相同的数据字段来表示两个不同的属性。它抛出空指针异常。有人能帮我如何使它工作吗 *CamelRoute.java* public class ConverterRoute implements RoutesBuilder { private static final String SOURCE_INPUT_PATH = "file://inbox?fileName=Source.txt"; private static final String SOURCE_O
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_$simple{date:now:yyyyMMddHHmmssSSS}.xml";
@Override
public void addRoutesToCamelContext(CamelContext context) throws Exception {
context.addRoutes(new RouteBuilder() {
public void configure() {
try {
DataFormat bindyFixed = new BindyCsvDataFormat(TestOne.class);
XmlFriendlyNameCoder nameCoder = new XmlFriendlyNameCoder("_-", "_");
Dom4JDriver dom4JDriver = new Dom4JDriver(nameCoder);
XStreamDataFormat xStreamDataFormat = new XStreamDataFormat();
xStreamDataFormat.setAliases(Collections.singletonMap("TEST_ONE", TestOne.class.getCanonicalName()));
//xStreamDataFormat.setXstreamDriver(dom4JDriver);
from(SOURCE_INPUT_PATH).
log("Received input from file and body is ${body}").
split().tokenize(System.lineSeparator()).
unmarshal(bindyFixed).
marshal(xStreamDataFormat).
log("After Marshalling and body is ${body}").
to(SOURCE_OUTPUT_PATH).log("Finished Transformation").
end();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
TestOne.java
TestTwo.java
添加了转换器路由详细信息,说明我如何将非结构化数据转换为xml。您尚未显示路由,因此我不确定您是如何执行此操作的。您是否多次读取流源,例如HTTP或文件?如果是这样,第二次失败是因为您已经使用了源代码,因此需要启用流缓存。如果这些都在同一封送内,那么我假设它正在使用Test1的记录,因此Test2没有该记录。如果您尝试使用一个包含多条记录的源,您是否可以让它工作,但从第二条记录中读取Test2?@Screwtape我刚刚添加了转换器路由代码,说明了我是如何进行转换的。@Screwtape我没有使用多条路由进行转换。
@CsvRecord(separator = "\\|", skipField = true)
public class TestOne{
@DataField(pos = 3, required = true)
private String testId;
@Link
private TestTwo testTwo;
}
@CsvRecord(separator = "\\|", skipField = true)
public class TestTwo{
@DataField(pos = 3, required = true)
private String mockIt;
}
java.lang.NullPointerException: null
at org.apache.camel.dataformat.bindy.BindyCsvFactory.setDefaultValuesForFields(BindyCsvFactory.java:695) ~[camel-bindy-2.24.1.jar:2.24.1]