【问题标题】:MULE ESB Import CSV, if no CSV column data (blank data) , errors outMULE ESB 导入 CSV,如果没有 CSV 列数据(空白数据),则报错
【发布时间】:2015-08-21 18:00:24
【问题描述】:

我正在使用这个 MULE ESB 流程将 CSV 文件导入 MYSQL 数据库。我已经确定,如果 CSV 列是“空”的,MULE 流将出错并出现以下错误:

Message               : Execution of the expression "message.payload[4]" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String[]

这是导致错误的 CSV:

 Gone,2691,,13-Jul,8/10/2010

但是,如果我将 CSV 文件更改为此(注意添加了空格),它将按预期工作。

Gone,2691, ,13-Jul,8/10/2010

我是否需要在我的 CSV 中运行一个额外的步骤(在 Mule 处理之前)将所有“空白”值更改为 NULL,或者 Mule 中是否有方法可以将这些空白值导入 CSV 文件?

这是我正在使用的配置文件:

<context:property-placeholder location="classpath:mysql.properties,classpath:smtp.properties" />
<configuration doc:name="Configuration"> 
    <expression-language autoResolveVariables="true"> 
        <import class="org.mule.util.StringUtils"></import>  
    </expression-language>  
</configuration>

<db:mysql-config name="MySQL_Configuration" host="${mysql.host}" port="${mysql.port}" user="${mysql.user}" database="${mysql.database}" password="${mysql.password}" doc:name="MySQL Configuration"/>

<flow name="ImportCSVFileToDatabase" > 
    <file:inbound-endpoint path="\\192.168.10.6\pfw" pollingFrequency="5000" doc:name="Source" responseTimeout="10000" moveToDirectory="C:\Users\IEUser\Desktop\Post Processed">
        <file:filename-regex-filter pattern="Tractor_Status.csv" caseSensitive="true"/>
    </file:inbound-endpoint>  
    <object-to-string-transformer doc:name="Object to String"></object-to-string-transformer>  
    <splitter expression="#[StringUtils.split(message.payload, '\n\r')]" doc:name="Splitter"></splitter>  
    <expression-transformer expression="#[StringUtils.split(message.payload, ',')]" doc:name="Expression" ></expression-transformer> 
            <db:insert config-ref="MySQL_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[INSERT INTO Tractor_Sheet(
 Status,
 Build_Number,
 Ship_Date,
 Production_Completion_Date
 ) VALUES (
 #[message.payload[0]],
 #[message.payload[1]],
 #[message.payload[2]],
 #[message.payload[4]]
 )]]></db:parameterized-query>
            </db:insert>    
  </flow>

【问题讨论】:

    标签: java mule esb


    【解决方案1】:

    如果有人偶然发现这是未来,我添加了一个额外的表达式

    #[StringUtils.replace(message.payload, ",,", ", ,")]
    

    【讨论】:

    • 这是一种更简单的方法,message.payload.split(",").. 无论如何请记住,如果最后一列为空(意味着行的最后一个字符是“,”),两种解决方案都将无法满足您的要求/跨度>
    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 2012-12-04
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多