第46章 exec
exec コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel 2.3 で利用可能
exec コンポーネントは、システムコマンドを実行するために使用できます。
Dependencies リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Maven ユーザーは以下の依存関係を
pom.xml に追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-exec</artifactId>
<version>${camel-version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-exec</artifactId>
<version>${camel-version}</version>
</dependency>
${camel-version} は、実際のバージョンの Apache Camel (2.3.0 以降)に置き換える必要があります。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
exec://executable[?options]
exec://executable[?options]
ここでの
executable は、実行されるシステムコマンドの名前またはファイルパスです。実行可能ファイル名を使用する場合(例: exec:java)、実行ファイルはシステムパスになければなりません。
URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
| 名前 | デフォルト値 | 説明 |
|---|---|---|
args
|
null
|
実行可能ファイルの引数。引数は、
" で引用できる 1 つまたは複数のスペース区切りトークンにすることができます。たとえば、args="arg 1" arg2 は 2 つの引数 arg 1 と arg2 を使用します。引用符を含めるには、"" を使用します。例: args=""arg 1"" arg2 は引数 "arg 1" および arg2 を使用します。
|
workingDir
|
null
|
コマンドを実行するディレクトリー。null の場合、現在のプロセスの作業ディレクトリーが使用されます。
|
timeout
|
Long.MAX_VALUE
|
実行可能ファイルを終了するまでの時間(ミリ秒単位)。タイムアウト内に実行が終了していない場合、コンポーネントは終了リクエストを送信します。 |
outFile
|
null
|
実行ファイルによって作成されたファイルの名前。出力と見なす必要があります。outFile が設定されていない場合、実行可能ファイルの標準出力(stdout)は出力とみなされます。
|
binding
|
DefaultExecBinding インスタンス
|
レジストリー の org.apache.commons.exec.ExecBinding への 参照。
|
commandExecutor
|
DefaultCommandExecutor インスタンス
|
コマンドの実行をカスタマイズする レジストリー の org.apache.commons.exec.ExecCommandExecutor への参照。デフォルトのコマンドエグゼキューターは、commons-exec ライブラリー を使用します。実行したすべてのコマンドにシャットダウンフックを追加します。
|
useStderrOnEmptyStdout
|
false
|
stdout が空の場合、このコンポーネントは Camel Message Body に stderr が設定されることを示すブール値。この動作は、デフォルトでは無効になっています(false)。
|
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
サポートされるヘッダーは
org.apache.camel.component.exec.ExecBinding で定義されています。
| 名前 | タイプ | メッセージ | 説明 |
|---|---|---|---|
ExecBinding.EXEC_COMMAND_EXECUTABLE
|
文字列
|
in
|
実行する system コマンドの名前。URI の 実行ファイル を上書きします。
|
ExecBinding.EXEC_COMMAND_ARGS
|
java.util.List<String>
|
in
|
実行可能ファイルの引数。引数は文字通りに使用され、引用は適用されません。URI の既存 引数 を上書きします。
|
ExecBinding.EXEC_COMMAND_ARGS
|
文字列
|
in
|
Camel 2.5: 実行可能ファイルの引数は、各引数が空白文字で区切られた Single 文字列として指定されます(URI オプションの引数を参照)。引数は文字通りに使用され、引用は適用されません。URI の既存 引数 を上書きします。
|
ExecBinding.EXEC_COMMAND_OUT_FILE
|
文字列
|
in
|
実行ファイルによって作成されたファイルの名前。実行可能ファイルの出力と見なす必要があります。URI 内の既存の outFile を上書きします。
|
ExecBinding.EXEC_COMMAND_TIMEOUT
|
long
|
in
|
実行可能ファイルを終了するまでの時間(ミリ秒単位)。URI の既存の タイムアウト を上書きします。
|
ExecBinding.EXEC_COMMAND_WORKING_DIR
|
文字列
|
in
|
コマンドを実行するディレクトリー。URI 内の既存の workingDir を上書きします。
|
ExecBinding.EXEC_EXIT_VALUE
|
int
|
out
|
このヘッダーの値は、実行ファイルの 終了値 です。ゼロ以外の終了値は、通常、異常な終了を示します。終了値は OS に依存することに注意してください。 |
ExecBinding.EXEC_STDERR
|
java.io.InputStream
|
out
|
このヘッダーの値は、実行可能ファイルの標準エラーストリーム(stderr)を参照します。stderr が書き込まれていない場合、値は null になります。
|
ExecBinding.EXEC_USE_STDERR_ON_EMPTY_STDOUT
|
boolean
|
in
|
stdout が空の場合、このコンポーネントは Camel Message Body に stderr が設定されることを示します。この動作は、デフォルトでは無効になっています(false)。
|
メッセージボディー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Exec コンポーネントが、java.io.InputStream に 変換できるメッセージボディーの を受信する場合、標準入力(stdin)を介して実行可能ファイルに入力を提供するために使用されます。実行後、メッセージボディー は実行の結果です。つまり、stdout、stderr、終了値、および out ファイルが含まれる org.apache.camel.components.exec.ExecResult インスタンスです。このコンポーネントは、便宜上、以下の ExecResult 型コンバーター をサポートします。
| From | 終了 |
|---|---|
ExecResult
|
java.io.InputStream
|
ExecResult
|
文字列
|
ExecResult
|
byte []
|
ExecResult
|
org.w3c.dom.Document
|
単語数(Linux)の実行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、
wc (単語数、Linux)を実行して /usr/share/dict/words ファイルの単語をカウントします。単語 count (出力)は、wc のスタンドアロン出力ストリームで書かれています。
Java の実行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、
java がシステムパスにあると、-server と -version の 2 つの引数を指定して java を実行します。
from("direct:exec")
.to("exec:java?args=-server -version")
from("direct:exec")
.to("exec:java?args=-server -version")
以下の例では、
-server、-version、および sytem プロパティー user.name の 3 つの引数を使用して、c:/temp で java を実行します。
from("direct:exec")
.to("exec:c:/program files/jdk/bin/java?args=-server -version -Duser.name=Camel&workingDir=c:/temp")
from("direct:exec")
.to("exec:c:/program files/jdk/bin/java?args=-server -version -Duser.name=Camel&workingDir=c:/temp")
Ant スクリプトの実行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、
ant.bat がシステムパスにあり、CamelExecBuildFile.xml が現在のディレクトリーにあると、CamelExecBuildFile.xml ビルドファイルで Apache Ant (Windows のみ)を実行します。
from("direct:exec")
.to("exec:ant.bat?args=-f CamelExecBuildFile.xml")
from("direct:exec")
.to("exec:ant.bat?args=-f CamelExecBuildFile.xml")
以下の例では、
ant.bat コマンドは出力を -l を使用する CamelExecOutFile.txt にリダイレクトします。CamelExecOutFile.txt ファイルは、outFile=CamelExecOutFile.txt ファイルとして使用されます。この例では、ant.bat がシステムパスにあり、CamelExecBuildFile.xml が現在のディレクトリーにあることを前提としています。
echo の実行(Windows) リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
echo や dir などのコマンドは、オペレーティングシステムのコマンドインタープリターでのみ実行できます。この例は、Windows でこのようなコマンド echo を実行する方法を示しています。
from("direct:exec").to("exec:cmd?args=/C echo echoString")
from("direct:exec").to("exec:cmd?args=/C echo echoString")