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
要素によって設定されます。
apiName
API name は、API クラスの短縮名で、エンドポイント URI の
endpoint-prefix
として使用されます。注記API が単一の Java クラスのみで設定される場合は、
apiName
要素を空のままにすることができます。これにより、endpoint-prefix
は冗長になります。その後、「単一 API クラスの URI 形式」 に示す形式を使用して、エンドポイント URI を指定できます。proxyClass
- このプロキシークラスの要素は、API クラスの完全修飾名を指定します。
fromJavadoc
-
API クラスに Javadoc メタデータが付随する場合、それを示すために
fromJavadoc
要素を含める必要があります。provided
依存関係として、Javadoc 自体も Maven ファイルで指定する必要があります (「コンポーネント POM での Javadoc メタデータの提供」を参照)。 fromSignatureFile
API クラスに署名ファイルのメタデータが付随する場合、これを示すために
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
andsetOption
を実装することだけです。コンポーネントフレームワークはエンドポイント 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-plugin
Maven プラグイン設定で定義される API クラスにマップする API 名。ExampleJavadocHello
クラスの場合、関連する設定は以下のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、必要な
endpoint-prefix
がhello-javadoc
であることを示しています。- エンドポイント
-
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
コンポーネントのデフォルトインスタンスを作成できます。このファイルを編集する必要があるのは、コンポーネントクラスの名前をリファクタリングする場合のみです。