我有一个场景,我需要从特定文件夹中读取文件。所以我有一个文件入站如下,它读取所有非空文件。但是空文件不会被读取并且位于相同的位置。
<file:inbound-endpoint path="${file.path}" responseTimeout="10000" doc:name="File" moveToDirectory="${audit.location}">
<file:filename-regex-filter pattern="file.employee(.*).xml,file.client(.*).xml"
caseSensitive="true"/>
</file:inbound-endpoint>
我删除了文件过滤器,但仍然没有读取空文件。 有没有办法启用文件入站来读取空文件?
答案 0 :(得分:3)
根据Mule File Connector documentation:
作为入站端点的文件连接器不处理空(0字节)文件。
所以这种行为是预料之中的。没有记录的方法来使用文件入站端点处理非空文件。
但是,您仍然可以编写自己的连接器来执行此操作,或者使用解决方法,例如使用单个字符(例如空格)填充“空”文件以使其为非空
答案 1 :(得分:1)
如果要读取大小为0 KB的文件,则无法使用文件连接器实现此目的,但我们可以使用流中的 MuleRequester 来读取文件。我将尽快分享样本片段。如果您需要任何帮助,请告诉我。
此致 Sreenivas B
答案 2 :(得分:0)
Mule File连接器不会将空(0字节)文件作为入站端点处理
答案 3 :(得分:0)
据我所知,文件入站连接器不会处理(0 KB)大小的文件。
答案 4 :(得分:0)
在文件连接器上,方法poll中的org.mule.transport.file.FileMessageReceiver.java类具有:
if (file.length() == 0)
{
if (logger.isDebugEnabled())
{
logger.debug("Found empty file '" + file.getName() + "'. Skipping file.");
}
continue;
}
阻止它处理空文件
但是您可以创建自己的CustomFileMessageReceiver.java,创建程序包:
package com.mycompany.mule.transport.file;
以及扩展AbstractPollingMessageReceiver的类
public class CustomFileMessageReceiver extends AbstractPollingMessageReceiver
复制原始FileMessageReceiver.java方法,但注释以上各行,并在需要时将FileMessageReceiver更改为CustomFileMessageReceiver。
调用fileConnector.move(file,workFile)是原始程序包中的一种受保护方法,已注释并注意您不能使用workdir。
在同一包中,创建org.mule.transport.file.ReceiverFileInputStream.java的副本
配置您的连接器:
<file:connector name="FILE" readFromDirectory="${incoming.directory}" autoDelete="true" streaming="false" recursive="true" validateConnections="true" doc:name="File" writeToDirectory="${processed.directory}">
<service-overrides messageReceiver="com.mycompany.mule.transport.file.CustomFileMessageReceiver" />
</file:connector>
或者您可以实现自己的文件连接器,如上面的答案所述。