46.3. 生成されたコンポーネントサブプロジェクト
概要 リンクのコピーリンクがクリップボードにコピーされました!
新しいコンポーネントのビルド用の Maven サブプロジェクトは camel-api-example/camel-api-example-component プロジェクトディレクトリーの下にあります。このセクションでは、生成されたサンプルコードの詳細と、その動作を説明します。
コンポーネント POM での Java API の提供 リンクのコピーリンクがクリップボードにコピーされました!
Java API はコンポーネント POM の依存関係として提供される必要があります。たとえば、サンプル Java API は、以下のようにコンポーネント POM ファイルの依存関係 camel-api-example-component/pom.xml として定義されます。
コンポーネント POM での Javadoc メタデータの提供 リンクのコピーリンクがクリップボードにコピーされました!
Java API のすべてのまたは一部に Javadoc メタデータを使用している場合は、コンポーネント POM の依存関係として Javadoc を指定する必要があります。この依存関係に関して注意することが 2 つあります。
Javadoc の Maven コーディネートは Java API の Maven コーディネートとほぼ同じですが、以下のように
classifier要素も指定する必要があります。<classifier>javadoc</classifier>
<classifier>javadoc</classifier>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように、
providedスコープを持つよう Javadoc を宣言する必要があります。<scope>provided</scope>
<scope>provided</scope>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
たとえば、コンポーネント POM では、Javadoc 依存関係は以下のように定義されます。
サンプルファイル Hello のファイルメタデータの定義 リンクのコピーリンクがクリップボードにコピーされました!
ExampleFileHello のメタデータは署名ファイルで提供されます。通常、このファイルは手動で作成する必要がありますが、メソッド署名のリスト (各行に 1 つずつ) で構成される非常にシンプルな形式です。このサンプルコードは camel-api-example-component/signatures ディレクトリーに以下の内容を含む署名ファイル file-sig-api.txt を提供します。
public String sayHi(); public String greetMe(String name); public String greetUs(String name1, String name2);
public String sayHi();
public String greetMe(String name);
public String greetUs(String name1, String name2);
署名ファイル形式の詳細は、「署名ファイルメタデータ」 を参照してください。
API マッピングの設定 リンクのコピーリンクがクリップボードにコピーされました!
API コンポーネントフレームワークの主な機能の 1 つは、API マッピング を実行するコードを自動的に生成することです。つまり、エンドポイント URI を Java API のメソッド呼び出しにマッピングするスタブコードを生成します。API マッピングへの基本的な入力は、Java API、Javadoc メタデータ、署名ファイルのメタデータなどです。
API マッピングを実行するコンポーネントは、コンポーネント POM で設定された camel-api-component-maven-plugin Maven プラグインです。コンポーネント POM からの以下の抜粋は、camel-api-component-maven-plugin プラグインの設定方法を示しています。
プラグインは、Java API のクラスを設定するための単一の apis 子要素が含まれる configuration 要素によって設定されます。各 API クラスは以下のように api 要素によって設定されます。
apiNameAPI name は、API クラスの短縮名で、エンドポイント URI の
endpoint-prefixとして使用されます。注記API が単一の Java クラスのみで構成される場合は、
apiName要素を空のままにすることができます。これにより、endpoint-prefixは冗長になります。その後、「単一 API クラスの URI 形式」 に示す形式を使用して、エンドポイント URI を指定できます。proxyClass- このプロキシークラスの要素は、API クラスの完全修飾名を指定します。
fromJavadoc-
API クラスに Javadoc メタデータが付随する場合、それを示すために
fromJavadoc要素を含める必要があります。provided依存関係として、Javadoc 自体も Maven ファイルで指定する必要があります (「コンポーネント POM での Javadoc メタデータの提供」を参照)。 fromSignatureFileAPI クラスに署名ファイルのメタデータが付随する場合、これを示すために
fromSignatureFile要素を含める必要があります。この要素の内容で署名ファイルの場所を指定します。注記署名ファイルは、実行時ではなくビルド時にのみ必要であるため、Maven によってビルドされた最終パッケージには 含まれません。
生成されたコンポーネントの実装 リンクのコピーリンクがクリップボードにコピーされました!
API コンポーネントは、camel-api-example-component/src/main/java ディレクトリー下において以下のコアクラス (Camel コンポーネントすべてに実装する必要がある) から構成されます。
ExampleComponent-
コンポーネント自体を表します。このクラスは、エンドポイントインスタンスのファクトリーとして機能します (例:
ExampleEndpointのインスタンス)。 ExampleEndpoint-
エンドポイント URI を表します。このクラスは、コンシューマーエンドポイント (例:
ExampleConsumer) のファクトリーとして機能し、またプロデューサーエンドポイント (例:ExampleProducer) のファクトリーとして機能します。 ExampleConsumer- エンドポイント URI で指定された場所からメッセージを消費できるコンシューマーエンドポイントの具象インスタンスを表します。
ExampleProducer- プロデューサーエンドポイントの具象インスタンスを表します。これは、エンドポイント URI で指定された場所にメッセージを送信できます。
ExampleConfigurationエンドポイント URI オプションを定義するために使用できます。この設定クラスによって定義される URI オプションは特定の API クラスには 関連付けられません。つまり、これらの URI オプションを API クラスまたはメソッドのいずれかと組み合わせることができます。これは、たとえば、リモートサービスへの接続にユーザー名およびパスワードの認証情報を宣言する必要がある場合などに役立ちます。
ExampleConfigurationクラスの主な目的は、API クラスまたは API インターフェイスを実装するクラスに必要なパラメーターの値を提供することです。たとえば、これらはコンストラクターパラメーターや、ファクトリーメソッドまたはクラスのパラメーター値になります。このクラスで URI オプション
optionを実装するために必要なのは、アクセッサーメソッドのペアgetOptionおよびsetOptionを実装することだけです。コンポーネントフレームワークはエンドポイント URI を自動的に解析し、実行時にオプション値を挿入します。
ExampleComponent クラス リンクのコピーリンクがクリップボードにコピーされました!
生成された ExampleComponent クラスは、以下のように定義されます。
このクラスの重要なメソッドは createEndpoint で、これは新しいエンドポイントインスタンスを作成します。通常、コンポーネントクラスのデフォルトコードを変更する必要はありません。ただし、このコンポーネントのライフサイクルと同じオブジェクトが存在する場合は、これらのオブジェクトをコンポーネントクラスから利用できるようにすることができます (例: メソッドを追加してこれらのオブジェクトを作成、これらのオブジェクトをコンポーネントに注入)。
ExampleEndpoint クラス リンクのコピーリンクがクリップボードにコピーされました!
生成された ExampleEndpoint クラスは以下のように定義されます。
API コンポーネントフレームワークのコンテキストでは、エンドポイントクラスによって実行される主なステップの 1 つは、API プロキシー を作成することです。API プロキシーは、ターゲット Java API からのインスタンスで、メソッドがエンドポイントによって呼び出されます。通常、Java API は多くのクラスで構成されるため、URI に表示される endpoint-prefix を基にして、適切な API クラスを選択する必要があります (URI の一般形式は scheme://endpoint-prefix/endpoint であることに留意してください)。
ExampleConsumer クラス リンクのコピーリンクがクリップボードにコピーされました!
生成された ExampleConsumer クラスは以下のように定義されます。
ExampleProducer クラス リンクのコピーリンクがクリップボードにコピーされました!
生成された ExampleProducer クラスは以下のように定義されます。
ExampleConfiguration クラス リンクのコピーリンクがクリップボードにコピーされました!
生成された ExampleConfiguration クラスは以下のように定義されます。
このクラスに URI オプション option を追加するには、適切なタイプのフィールドを定義し、対応するアクセッサーメソッド (getOption および setOption) のペアを実装します。コンポーネントフレームワークはエンドポイント URI を自動的に解析し、実行時にオプション値を挿入します。
このクラスは、すべての API メソッドと組み合わせることができる 一般的な URI オプションを定義するために使用されます。特定の API メソッドに関連する URI オプションを定義するには、API コンポーネント Maven プラグインに 追加のオプション を設定します。詳細は、「追加オプション」 を参照してください。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
API コンポーネント URI の一般的な形式を取ります。
scheme://endpoint-prefix/endpoint?Option1=Value1&...&OptionN=ValueN
scheme://endpoint-prefix/endpoint?Option1=Value1&...&OptionN=ValueN
通常、URI は Java API の特定のメソッド呼び出しにマッピングされます。たとえば、API メソッド ExampleJavadocHello.greetMe("Jane Doe") を呼び出す場合、以下のように URI が作成されます。
- scheme
-
Maven archetype でコードを生成した時に指定される API コンポーネントスキーム。この場合、スキームは
exampleです。 - endpoint-prefix
camel-api-component-maven-pluginMaven プラグイン設定で定義される API クラスにマップする API 名。ExampleJavadocHelloクラスの場合、関連する設定は以下のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、必要な
endpoint-prefixがhello-javadocであることを示しています。- endpoint
-
endpointは、メソッド名greetMeにマップします。 - Option1=Value1
-
URI オプションはメソッドパラメーターを指定します。
greetMe(String name)メソッドは、name=Jane%20Doeとして指定できる単一のパラメーターnameを取ります。オプションのデフォルト値を定義する場合は、interceptPropertiesメソッドを上書きしてこれを行うことができます (「プログラミングモデル」 を参照)。
URI の一部をまとめると、以下の URI で ExampleJavadocHello.greetMe("Jane Doe") を呼び出しできることがわかります。
example://hello-javadoc/greetMe?name=Jane%20Doe
example://hello-javadoc/greetMe?name=Jane%20Doe
デフォルトのコンポーネントインスタンス リンクのコピーリンクがクリップボードにコピーされました!
example URI スキームをデフォルトのコンポーネントインスタンスにマッピングするために、Maven archetype は camel-api-example-component サブプロジェクトに以下のファイルを作成します。
src/main/resources/META-INF/services/org/apache/camel/component/example
src/main/resources/META-INF/services/org/apache/camel/component/example
このリソースファイルは、Camel コアが example URI スキームに関連付けられたコンポーネントを特定できるようにします。ルートで example:// URI を使用するたびに、Camel はクラスパスを検索し、対応する example リソースファイルを探します。この example ファイルには、以下のコンテンツが含まれます。
class=org.jboss.fuse.example.ExampleComponent
class=org.jboss.fuse.example.ExampleComponent
これにより、Camel コアは ExampleComponent コンポーネントのデフォルトインスタンスを作成できます。このファイルを編集する必要があるのは、コンポーネントクラスの名前をリファクタリングする場合のみです。