2017-08-24 11 views
0

ソースからデスティネーション(ソースとは異なるシステム)にファイルをコピーする必要があります。私たちはapache camelを使う必要があります。ラクダを使用してソースからデスティネーションへファイルをコピーする方法

宛先ディレクトリを指定する方法が見つかりませんでした。あなたは次の例外を与え

private void boot() throws Exception { 
     Main main = new Main(); 
     main.addRouteBuilder(new RouteBuilder() { 
      String sourceDirectory = "D:\\vsinv-conf"; 
      String server = "xxx-yyy-host:/var/log/index/"; 
      String user = "admin"; 
      String password = "password"; 
      public void configure() { 
       from("timer:loadingApplicationList?repeatCount=1").routeId("loadApplicationList").to("direct:start"); 
       from("direct:start").from("file://" + sourceDirectory).to("scp://" + server + "?username=" + user 
         + "&password=" + password + "&useUserKnownHostsFile=false"); 
      } 
     }); 

     main.run(); 
    } 

を助けてください可能性が

java.lang.NullPointerException 
    at com.jcraft.jsch.Util.checkTilde(Util.java:489) 
    at com.jcraft.jsch.KnownHosts.setKnownHosts(KnownHosts.java:53) 
    at com.jcraft.jsch.JSch.setKnownHosts(JSch.java:317) 
    at org.apache.camel.component.scp.ScpOperations.createSession(ScpOperations.java:239) 
    at org.apache.camel.component.scp.ScpOperations.connect(ScpOperations.java:179) 
    at org.apache.camel.component.file.remote.RemoteFileProducer.connectIfNecessary(RemoteFileProducer.java:209) 
    at org.apache.camel.component.file.remote.RemoteFileProducer.recoverableConnectIfNecessary(RemoteFileProducer.java:201) 
    at org.apache.camel.component.file.remote.RemoteFileProducer.preWriteCheck(RemoteFileProducer.java:133) 
    at org.apache.camel.component.file.GenericFileProducer.processExchange(GenericFileProducer.java:113) 
    at org.apache.camel.component.file.remote.RemoteFileProducer.process(RemoteFileProducer.java:58) 
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) 
    at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:173) 
    at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:341) 
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:168) 
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196) 
    at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:454) 
    at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:226) 
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:190) 
    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:471) 
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
2017-08-24 16:29:05 WARN ScpProducer:86 - Writing file failed with: null 
+0

私の答えは問題の解決に役立ちましたか? – jfneis

答えて

1

私はあなたがSCPへのファイルからコピーしようとしている理解しています。

だから、Jsch componentから、私はあなたがそれを達成するための2つの方法持っていると信じて:?

あなたは、次の形式でURIにクエリオプションを追加することができますが、 オプション=値&オプション=値& ...ファイル名は、URIの部分に のいずれかを指定するか、 メッセージ(コードで使用する場合はExchange.FILE_NAME)の "CamelFileName"ヘッダーとして指定することができます。

それはあなたが使用できることを意味します:

to("scp://yourhost/folder1/folder2/youfile.txt?options..") 

か、それはあなたがそこにディレクトリやファイル名だけを設定することができます場合、私は知りませんが、あなたは(Exchange.FILE_NAMEを試すことができます:

from("direct:start") 
.setHeader(Exchange.FILE_NAME, constant("folder1/folder2/youfile.txt")) 
.to("scp://host?options..."); 
関連する問題