Mule DB Component返回ResultsetIterator或List <map <string,object>

时间:2017-06-28 03:50:07

标签: database mule

包装时由Mule richher返回的数据类型显示非常奇怪的行为。它在某些情况下返回ResultSetIterator,在其他时候返回List。我在流程中具有完全相同的配置是唯一的区别,即这里是子流程。当富集程序中的数据库组件在子流中而不是在流中时,返回类型的行为是否有所不同?

<sub-flow name="process.customer">
    <enricher target="#[variable:customers]"
        doc:name="Customer Enrichment">
        <db:select config-ref="MySQLConfig"
                doc:name="Customer Query"
                fetchSize="3000" streaming="true">
                <db:parameterized-query><![CDATA[
                SELECT * FROM CUSTOMER WHERE STATUS='ACTIVE'
                ]]></db:parameterized-query>
            </db:select>
    </enricher>
    <custom-transformer class="com.gdc.transformer.CustomerTransformer" />
    <vm:outbound-endpoint exchange-pattern="one-way"

    public class CustomerTransformer extends AabstractMessageTransformer{

       @Override
        public Object transformMessage(MuleMessage message, String 
         outputEncoding) throws TransformerException {
            //Throws ClassCastException i.e. cannot cast ResultSetIterator to 
            // LinkedList       
           List<Map<String,Object>> r=     
              message.getInvocationProperty("customers"));
         ....

       }
    }

2 个答案:

答案 0 :(得分:0)

使用流媒体=&#34; true&#34;在db:select组件上,您将获得一个ResultSetIterator。在这种情况下,您还有fetchSize =&#34; 3000&#34;,因此它将尝试一次选择3000条记录。 使用streaming =&#34; false&#34;,您将获得一个包含所有适用记录的列表。

答案 1 :(得分:0)

布林,

如果您希望输出为List,如果地图然后禁用Streaming=false,则需要将输出作为可迭代对象,然后将该属性设为true。