Java 当我多次使用相同的定位值时,Camel bindy抛出空指针异常

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

我使用两个位置相同的数据字段来表示两个不同的属性。它抛出空指针异常。有人能帮我如何使它工作吗

*CamelRoute.java*

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]