找到以元素“simple”开头的无效内容。骆驼问题

时间:2014-05-20 20:56:31

标签: java spring apache-camel dsl

我的要求是每隔几分钟轮询一次数据库并获取一个sql。因此我的代码是

 <camel:route>

        <camel:from uri="timer:dataRetrieve?period=5s"/> 

          <camel:to uri="sql:select output_obj,create_dt,destination_type from dbo.gcas_events_test where process_sw = 'N' order by create_dt desc" />


        </camel:route>

我期待我的数据集中有3个字段。我想看看destination_type ='SEC'是否必须转到不同的路线。

所以我想出来了。

    <camel:route>

                <camel:from uri="timer:dataRetrieve?period=5s"/> 

                  <camel:to uri="sql:select output_obj,create_dt,destination_type from dbo.gcas_events_test where process_sw = 'N' order by create_dt desc" />
                <camel:choice>
                       <camel:when>
                             <simple>${body.destination_type}='SEC'</simple>
                             <camel:to uri="foo" />
                        </camel:when>

                    </camel:choice>

                </camel:route>

它会在简单标记处抛出错误。与ognl也有类似的问题。我在这做错了什么? ${body.destination_type}='SEC'也会工作吗? (假设我在数据集中有这个值)。

1 个答案:

答案 0 :(得分:1)

根据Camel doc,如果配置不同,则select语句的输出为List<Map<String, Object>>。在您的情况下,可以按如下方式访问结果集中找到的第一个destination_type

${body[0][destination_type]}

路线定义应如下(使用==而不是简单的=):

<camel:route>
    <camel:from uri="timer:dataRetrieve?period=5s"/> 
    <camel:to uri="sql:select output_obj,create_dt,destination_type from dbo.gcas_events_test where process_sw = 'N' order by create_dt desc" />
    <camel:choice>
        <camel:when>
            <camel:simple>${body[0][destination_type]} == 'SEC'</simple>
            <camel:to uri="foo" />
        </camel:when>
    </camel:choice>
</camel:route>

如果结果集的每条记录都要逐一处理,那么您可以使用splitter

<camel:route>
    <camel:from uri="timer:dataRetrieve?period=5s"/> 
    <camel:to uri="sql:select output_obj,create_dt,destination_type from dbo.gcas_events_test where process_sw = 'N' order by create_dt desc" />
    <camel:split>
        <camel:simple>${body}</camel:simple>
        <camel:choice>
            <camel:when>
                <camel:simple>${body[destination_type]} == 'SEC'</simple>
                <camel:to uri="foo" />
            </camel:when>
        </camel:choice>
    </camel:split>
</camel:route>