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

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

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

と思います。

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


# ファイルを出力

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

```java

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();
    }

}
```

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



## ファイル出力（ファイル追記）

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

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

## ファイル出力（ファイルが存在した場合はエラー）

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

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

## ファイル出力（ファイルのコピー）

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

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


## ファイル出力（ファイルのコピー。ファイル更新日付もコピー）

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

```java
File file = new File("bbb.txt");
message.setBody(file);
message.setHeader(Exchange.FILE_LAST_MODIFIED, file.lastModified());
```

```java
Exchange result = producer.send("file://" + directory + "?keepLastModified=true", exchange);
```


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

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

```java
File file = new File("bbb.txt");
message.setBody(file);
message.setHeader(Exchange.FILE_LAST_MODIFIED, file.lastModified());
```

```java
Exchange result = producer.send("file://" + directory + "?keepLastModified=true&chmod=777", exchange);
```

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


# HTTP(S)アクセス

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


```java

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);
    }
}

```


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

# Httpアクセス（Basic認証）

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

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