首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >意外的Bindy行为- camel

意外的Bindy行为- camel
EN

Stack Overflow用户
提问于 2013-02-21 22:23:36
回答 1查看 950关注 0票数 0

在使用bindy时,我创建了一个提供无效CSV输入的测试。在查看文档( http://camel.apache.org/bindy.html )时,它指出:

代码语言:javascript
复制
If this field is not present in the record, than an error will be raised by the parser with the following information :
Some fields are missing (optional or mandatory), line :

但是当我运行我的测试时,无效的行被简单地忽略了,没有引发任何错误。我声明了三个必填字段,所以我预计会出现一个错误...我做错了什么?

巴里

下面是一些需要澄清的代码片段

路线

代码语言:javascript
复制
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {

            JaxbDataFormat xmlFormat = new JaxbDataFormat();
            xmlFormat.setContextPath("be.smals.dp.asktutor.response");
            BindyCsvDataFormat csvFormat = new BindyCsvDataFormat ("be.smals.dp.asktutor.response");
            context.setTracing(true);

            from("direct:marshall")
                    .wireTap("log:test")
                    .unmarshal(csvFormat)
                    .to("mock:marshall");

            from("direct:unmarshall")
                    .marshal(xmlFormat)
                    .wireTap("log:test")
                    .to("mock:unmarshall");

        }
    };
}

我测试的一部分

代码语言:javascript
复制
@Test
public void testTransformFromCSVToXML() throws Exception {

    // Create CSV input and process it
    String payload = AskTutorResponseCSVMother.getInvalidCSVLines();
    template.sendBody("direct:marshall", payload);

    AskTutorsResponse askTutorsResponse = 
        ExchangeToObjectHelper.getAskTutorsResponseObjectFromExchange(
            mockMarshall.getExchanges().get(0));
    assertEquals("00000000123", askTutorsResponse.getAskTutorResponses().get(0).getSsinChild());

输入的csv字符串

代码语言:javascript
复制
public static String getInvalidCSVLines () {
    String payload = "";
    payload += "00000000321;20121212" + NEWLINE;
    payload += "10000000123;10000000321;20131010" + NEWLINE;
    payload += "20000000123;20000000321;20100909" + NEWLINE;
    return payload;        
}

和我的(直接)绑定:

代码语言:javascript
复制
@XmlType
@XmlAccessorType(XmlAccessType.NONE)
@CsvRecord(separator = ";", skipFirstLine = false)
public class AskTutorResponse {

    @DataField(pos = 1, required = true)
    @XmlElement(name = "SINNChild", required = true)
    private String ssinChild;

    @DataField(pos = 2)
    @XmlElement(name = "SINNTutor", required = true)
    private String ssinTutor;

    @DataField(pos = 3)
    @XmlElement(name = "date", required = true)
    private String date;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-07 07:17:45

我遇到过在同一个包中有多个带有bindy注释的类无法正确解组的问题。原因是bindy试图将每个CSV行解组为每个带注释的类的一个实例。我的第一个修复方法是将每个bindy类放入其自己的包中。此后,我编写了自己的bindy数据格式,允许将单个类指定为解组目标。Here is the code.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15004636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档