org.apache.camel.component.file.GenericFileOperationFailedException: 无法获取文件 找不到网络名称

org.apache.camel.component.file.GenericFileOperationFailedException: Could not get files The network name cannot be found

我正在尝试将一些文件从本地文件夹复制到另一个包含 Apache Camel JCIFS 组件的本地文件夹。

这是我的 Java MyRouteBuilder class 代码:

package abc;

import org.apache.camel.builder.RouteBuilder;

public class MyRouteBuilder extends RouteBuilder {

    public void configure() {
        long delay = 60 * 60 * 1000L;
        from("smb://otherUser@localhost/WORKGROUP/home/user/folder?password=secret&delay=" + delay)
        .to("file://home/otherUser/folder");

    // This doesn't work either:
    //from("smb://localhost;otherUser@localhost/WORKGROUP/home/user/folder?password=secret&delay=" + delay)
    //        .to("file://home/otherUser/folder");
    }
}

执行此路由后,出现以下异常:

org.apache.camel.component.file.GenericFileOperationFailedException: Could not get files The network name cannot be found.
at org.apacheextras.camel.component.jcifs.SmbOperations.listFiles(SmbOperations.java:345)
at org.apacheextras.camel.component.jcifs.SmbConsumer.pollDirectory(SmbConsumer.java:58)
at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:131)
at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)
at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: jcifs.smb.SmbException: The network name cannot be found.
at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
at jcifs.smb.SmbTransport.send(SmbTransport.java:663)
at jcifs.smb.SmbSession.send(SmbSession.java:238)
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)
at jcifs.smb.SmbFile.doConnect(SmbFile.java:911)
at jcifs.smb.SmbFile.connect(SmbFile.java:954)
at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
at jcifs.smb.SmbFile.resolveDfs(SmbFile.java:669)
at jcifs.smb.SmbFile.send(SmbFile.java:773)
at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1986)
at jcifs.smb.SmbFile.doEnum(SmbFile.java:1738)
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1715)
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1648)
at org.apacheextras.camel.component.jcifs.DefaultSmbClient.listFiles(DefaultSmbClient.java:161)
at org.apacheextras.camel.component.jcifs.SmbOperations.listFiles(SmbOperations.java:341)
... 11 more

注1:我的电脑配置了samba服务器,共享一个简单的文件夹,里面有四个文件。

注2:我使用的是localhost,只是为了测试。在我开始工作后,我将使用另一台机器 IP/domain.

感谢您的帮助!

我刚刚成功了。我的路线错了。应该是这样的:

package abc;

import org.apache.camel.builder.RouteBuilder;

public class MyRouteBuilder extends RouteBuilder {

    public void configure() {
        long delay = 60 * 60 * 1000L;
        from("smb://otherUser@localhost/folder?password=secret&delay=" + delay)
        .to("file://home/otherUser/folder");
    }
}

我注意到我在终端上执行以下命令时出错:

smbclient -L localhost

该命令告诉我 Sharename 是我的共享文件夹 "folder"。