【发布时间】:2015-04-21 13:21:43
【问题描述】:
我有一个用于验证 FTP 目录的 API,如下所示:
public boolean validateDirectory(FtpLocation ftpLocation) throws CustomException{
FTPClient client = new FTPClient();
try {
client.connect(ftpLocation.getSystem(), Integer.parseInt(ftpLocation.getPort()));
client.login(ftpLocation.getUser(), ftpLocation.getPassword());
client.changeWorkingDirectory(ftpLocation.getDirPath());
int returnCode = client.getReplyCode();
if (returnCode == 550) {
LOG.error("Directory ["+ ftpLocation.getDirPath() + "] does not exist");
return false;
}
File dir = new File(ftpLocation.getDirPath());
if(dir!=null){
if (!dir.canRead()) {
LOG.error("Directory ["+ ftpLocation.getDirPath() + "] does not have read permission");
return false;
}
}
return true;
} catch (NumberFormatException | IOException e) {
LOG.error("Failed to validate Source Directory Path [" + ftpLocation.getDirPath() + "]", e);
throw new CustomException("Failed to validate Source Directory Path [" + ftpLocation.getDirPath() + "]", e);
} finally {
try {
client.disconnect();
} catch (IOException e) {
LOG.warn("Error occured while disconnecting FTPClient", e);
}
}
}
我的 FTP 根目录是 /(绝对路径 /home/soumya)
我想从 /source 路由文件(绝对路径 /home/soumya/source)
我在测试我的 API 时发现了以下行为:
- 如果 source 具有权限 rwxrwxr-x 则抛出验证消息(实际上期望文件路由成功)。
- 如果 source 具有权限 -wx-wx--x 则验证成功。
- 如果 source 不存在,则验证成功。
- 如果 source 不是目录(source 是文件)则验证成功。
以上四种场景的日志如下:
07:41:59.799 [pool-2-thread-1] ERROR c.n.d.m.b.f.Validator - Directory [/source] does not have read permission
07:42:48.801 [pool-2-thread-1] ERROR c.n.d.m.b.f.Validator - Directory [/source] does not have read permission
07:43:27.093 [pool-2-thread-1] ERROR c.n.d.m.b.f.Validator - Directory [/source] does not exist
07:44:00.215 [pool-2-thread-1] ERROR c.n.d.m.b.f.Validator - Directory [/source] does not exist
问题:
- 有没有其他方法可以解决1的问题,成功路由source的文件?
- 如何验证目录以检查读取权限?
注意:骆驼版本是2.12.1
【问题讨论】:
标签: apache-camel