2016-07-29 32 views
0

org.springframework.integration.ftp.gateway.ftpoutboundgatewayを使用してftp側からls情報を取得しようとしています。スプリング統合を使用してFTPからファイルを取得するFtpOutboundGateway

javadocから私はls、mgetのようなコマンドを実行してFtpoOutboundGatewayで情報を取得できることを理解しています。

私の質問はこれを行う方法です。

私はftpSessionFactoryをセットアップしました。私はこのセッションをFtpRemoteFileTemplateでテストし、get()を使ってファイルを正常に取得できます。

しかし、私はゲートウェイ経由でこれを行う方法が失われています。 設定のためにXMLファイルを使用せずに、コーディングでこれを行いたいと思います。

私はゲートウェイを作成します: 新しいFtpOutboundGateway(defaultFtpSessionFactory、 "ls -R"、null);

コマンドを実行する次のステップは何ですか? (ftp側からの検索を行います)

これは実際には起動して結果を取得できると予想していましたが、これは私には完全に不明です。

また、コード例(xml構成のみ)を見つけることも、javadoc/integrationのマニュアルからこれを取得することもできません。

答えて

0

FtpOutboundGatewayは、統合フローのシナリオでBeanとして設定する必要があるEIPコンポーネントです。

エンドポイントinputChannelためMessageを送信する必要があることで、FtpOutboundGatewayはあなたのためのコマンドを実行し、そのoutputChannelに、特定のMessageと返信。

スプリングインテグレーションReference Manualで見つけることができるすべての情報、特にhere、 "xmlless"構成を達成するための目標。

我々はFtpOutboundGateway Javaのコンフィグサンプルを持っていますが、あなたは春の統合JavaのDSL test-casesで何かを見つけることができません。また、情報のためのhttps://github.com/spring-projects/spring-integration/pull/1860

0

感謝を参照してください

@Bean 
public MessageHandler ftpOutboundGateway() { 
    return Ftp.outboundGateway(this.ftpSessionFactory, 
      AbstractRemoteFileOutboundGateway.Command.MGET, "payload") 
      .options(AbstractRemoteFileOutboundGateway.Option.RECURSIVE) 
      .regexFileNameFilter("(subFtpSource|.*1.txt)") 
      .localDirectoryExpression("@ftpServer.targetLocalDirectoryName + #remoteDirectory") 
      .localFilenameExpression("#remoteFileName.replaceFirst('ftpSource', 'localTarget')") 
      .get(); 
} 

@Bean 
public IntegrationFlow ftpMGetFlow() { 
    return IntegrationFlows.from("ftpMgetInputChannel") 
      .handle(ftpOutboundGateway()) 
      .channel(remoteFileOutputChannel()) 
      .get(); 
} 

。あなたの情報を使って、私のニーズに合ったソリューションを考え出しました。私は本当に完全な統合方法ではなく、ゲートウェイによって与えられたコマンドの抽象化を使用したかったのです。情報にもう一度感謝します。

私のソリューションは、完全な統合スタックを使用せずにゲートウェイ機能を使用できるようにするためです。私はここにそれを掲示した、他の人がそれを利用するかもしれないかもしれない。この例はlsコマンドでのみ動作しますが、ゲートウェイが提供するすべてのコマンドに対して簡単に作業できます。

class FtpGateway { 

@Autowired 
private DefaultFtpSessionFactory defaultFtpSessionFactory; 

private List<String> ftpFiles = new ArrayList<String>(); 

class ProcessCommandReturn extends AbstractMessageChannel { 

    @Override 
    protected boolean doSend(Message<?> message, long timeout) { 
     ftpFiles.clear(); 
     ArrayList<FileInfo> fileNames = (ArrayList<FileInfo>) message.getPayload(); 
     for (FileInfo filename : fileNames) { 
      ftpFiles.add(filename.getFilename()); 
     } 
     return true; 
    } 
} 

public List<String> getFileListFromFTP() throws IOException { 

    FtpOutboundGateway gw = new FtpOutboundGateway(defaultFtpSessionFactory, "ls", "'last*.zip'"); 
    // set return processing 
    MessageChannel ochannel = new ProcessCommandReturn(); 
    e.setOutputChannel(ochannel); 
    // make the gateway do it's work 
    gw.handleMessage(new GenericMessage("")); 
    return ftpFiles; 
} 
} 
関連する問題