LoginSignup
5
2

More than 5 years have passed since last update.

ファイルの書き込みだけで使う - Apache Camel

Posted at

テーマ

Apache Camel (システム連携) を使わなくても、便利ライブラリを使うだけでも便利なので使ってみる。

ただ、ここに書いてある例の「テキストファイル出力」は、ライブラリ導入しなくても簡単。。。

と思います。

思いますが、オプションをちょっと変更するだけで色々な機能が使えるので試してみて下さい。

ファイルを出力

・文字列「aaaa」をファイルに出力
・出力ファイル名「test/a4.txt」
・testフォルダが無い場合は自動作成
・ファイルは上書き


import org.apache.camel.*;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.main.Main;

public class FileTest {

    public static Main camel = new Main();

    public static void main(String[] args) throws Exception {
        camel.start();
        ProducerTemplate producer = camel.getCamelTemplate();

        // データ作成
        Exchange exchange = new DefaultExchange(producer.getCamelContext());
        Message message = exchange.getIn();
        message.setHeader(Exchange.FILE_NAME, "test/a4.txt");
        message.setBody("aaaa"); // 出力内容がテキスト

        // ファイル出力
        String directory = ".";
        Exchange result = producer.send("file://" + directory, exchange);

        // エラーチェック
        if (result.getException() != null)
            throw result.getException();
    }

}
pom.xml一部
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel-ver}</version>
        </dependency>

ファイル出力(ファイル追記)

下記のオプションを書き換える

Exchange result = producer.send("file://" + directory + "?fileExist=Append", exchange);

ファイル出力(ファイルが存在した場合はエラー)

下記のオプションを書き換える

Exchange result = producer.send("file://" + directory + "?fileExist=Fail", exchange);

ファイル出力(ファイルのコピー)

下記の実装を書き換える。
filename.txtがa4.txtにコピーされる
内容はコピーで、ファイル名がtest/a4.txt。

message.setHeader(Exchange.FILE_NAME, "test/a4.txt");
message.setBody(new File("filename.txt"));

ファイル出力(ファイルのコピー。ファイル更新日付もコピー)

下記の実装を書き換える。
filename.txtがa4.txtにコピーされる

File file = new File("bbb.txt");
message.setBody(file);
message.setHeader(Exchange.FILE_LAST_MODIFIED, file.lastModified());
Exchange result = producer.send("file://" + directory + "?keepLastModified=true", exchange);

ファイル出力(ファイルのコピー。ファイル更新日付もコピー、権限は777)

下記の実装を書き換える。
filename.txtがa4.txtにコピーされる

File file = new File("bbb.txt");
message.setBody(file);
message.setHeader(Exchange.FILE_LAST_MODIFIED, file.lastModified());
Exchange result = producer.send("file://" + directory + "?keepLastModified=true&chmod=777", exchange);

他のオプションに関しては
http://camel.apache.org/file2.html

HTTP(S)アクセス

・HTTPSでアクセスした結果がresponseに結果が入る


import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.main.Main;

public class HttpTest {
    public static Main camel = new Main();

    public static void main(String[] args) throws Exception {
        camel.start();
        ProducerTemplate producer = camel.getCamelTemplate();

        // データ作成
        Exchange exchange = new DefaultExchange(producer.getCamelContext());
        Message message = exchange.getIn();

        // HTTPアクセス
        Exchange result = producer.send("https://www.google.co.jp", exchange);

        // エラーチェック
        if (result.getException() != null)
            throw result.getException();

        // 結果を取得
        String response = result.getOut().getBody(String.class);
        System.out.println(response);
    }
}

pom.xmlの一部
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-http</artifactId>
            <version>${camel-ver}</version>
        </dependency>

Httpアクセス(Basic認証)

下記のように書き換えてあげる

        Exchange result = producer.send("http://192.168.33.10/member/bbb.html?authMethod=Basic&authUsername=secret&authPassword=aaa", exchange);
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2