第64章 CSimple
CSimple 言語は コンパイルされた Simple 言語です。
64.1. CSimple と Simple の相違点
Simple 言語は動的な式言語であり、一連の Camel 式または述語に実行時に解析されます。
csimple 言語は、通常の Java ソースコードに解析され、他のすべてのソースコードと一緒にコンパイルされるか、camel-csimple-joor
モジュールを介してブートストラップ中に 1 回コンパイルされます。
Simple 言語は通常、非常に軽量で高速ですが、OGNL パスを介した動的メソッドの呼び出しを伴う一部のユースケースでは、Sinmple 言語が実行時のイントロスペクションとリフレクションの呼び出しを行います。これにはパフォーマンスのオーバーヘッドがあり、csimple が作成された理由の 1 つです。
csimple 言語はタイプセーフである必要があり、OGNL パスを介したメソッド呼び出しでは、解析中に型を把握しておく必要があります。つまり、csimple 言語式の場合、スクリプトでクラスタイプを提供する必要ですが、simple の場合は実行時にこれをイントロスペクトします。
言い換えると、Simple 言語は ダックタイピング (アヒルのように見え、アヒルのように鳴く場合、それはアヒルである) を使用しており、csimple は Java 型 (タイプセーフ) を使用しています。型エラーがある場合には、Simple は実行時にこれを報告し、csimple では Java コンパイルエラーが発生します。
64.1.1. 追加の CSimple 関数
csimple 言語には、Collection
、Map
、または配列型を操作する一般的なユースケースをサポートするための追加関数がいくつか含まれています。次の関数 bodyAsIndex、headerAsIndex、および exchangePropertyAsIndex は、これらのユースケースに入力されたとおりに使用されます。
機能 | タイプ | 説明 |
---|---|---|
bodyAsIndex(type, index) | タイプ |
既存の |
mandatoryBodyAsIndex(type, index) | タイプ |
既存の |
headerAsIndex(key, type, index) | タイプ |
既存の |
mandatoryHeaderAsIndex(key, type, index) | タイプ |
既存の |
exchangePropertyAsIndex(key, type, index) | タイプ |
既存の |
mandatoryExchangePropertyAsIndex(key, type, index) | タイプ |
既存の |
たとえば、次の Simple 式があるとします。
Hello $\{body[0].name}
このスクリプトには型情報がありません。Simple 言語は、メッセージボディーをイントロスペクトし、コレクションベースの場合は最初の要素を検索し、reflection を介して getName
という名前のメソッドを呼び出すことにより、実行時にこの名前を解決します。
csimple (コンパイル済み) では、これをプリコンパイルする必要があるため、エンドユーザーは bodyAsIndex 関数で型情報を提供する必要があります。
Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}