Red Hat build of Apache Camel for Quarkus リファレンス
Red Hat が提供する Red Hat build of Apache Camel for Quarkus
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Apache Camel ドキュメントに関するフィードバック
エラーを報告したり、ドキュメントの改善を提案したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。
手順
- 次のリンクをクリックして チケットを作成 します。
- Summary に課題の簡単な説明を入力します。
- Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
- Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。
第1章 サポートレベルの定義 リンクのコピーリンクがクリップボードにコピーされました!
新しい機能、サービス、およびコンポーネントは、いくつかのサポートレベルを通過してから、実稼働環境での使用に適したフルサポート対象の機能として Red Hat build of Apache Camel for Quarkus に組み込まれます。これは、Red Hat の製品に期待されるエンタープライズグレードの安定性と、新しい Red Hat build of Apache Camel for Quarkus テクノロジーをお客様やパートナーにお試しいただき、今後の開発活動の指針となるフィードバックを得る必要性との間の適切なバランスを確保するためです。
| 型 | 説明 |
|---|---|
| コミュニティーサポート | Red Hat のアップストリームファーストへの取り組みの一環として、Red Hat build of Apache Camel for Quarkus ディストリビューションへの新しいエクステンションの統合が、アップストリームコミュニティーで始まります。これらのエクステンションはアップストリームでテストされ、文書化されていますが、弊社はこれらのエクステンションの成熟度を確認しておらず、今後の製品リリースで Red Hat によって正式にサポートされない可能性があります。 注記 コミュニティーエクステンションは、Camel Quarkus コミュニティープロジェクトのエクステンションリファレンスページにリストされています。 |
| テクノロジープレビュー | テクノロジープレビューの機能は、最新の技術をいち早く提供して、開発段階で機能のテストやフィードバックの収集を可能にするために提供されます。ただし、これらの機能は Red Hat サブスクリプションレベルアグリーメントでは完全にサポートされておらず、機能的に完全でない可能性があり、実稼働環境での使用を目的としていません。Red Hat ではテクノロジープレビュー機能を今後も繰り返し使用することで一般提供に移行できると考えていることから、お客様がこの機能を使用する際に発生する問題の解決に取り組みます。 |
| 製品サポート | 製品サポートのエクステンションは、Red Hat の公式リリースに含まれており、完全にサポートされます。ドキュメントにギャップはなく、エクステンションはサポートされるすべての設定でテストされます。 |
第2章 Camel Quarkus エクステンションの概要 リンクのコピーリンクがクリップボードにコピーされました!
2.1. サポートされるエクステンション リンクのコピーリンクがクリップボードにコピーされました!
97 個のエクステンションがあります。
| エクステンション | アーティファクト | 説明 | JVM サポートレベル | ネイティブサポートレベル | IBM Power および IBM Z のサポート | |
|---|---|---|---|---|---|---|
| 1 | AMQP | Apache QPid クライアントを使用した AMQP プロトコルによるメッセージング。 | 製品サポート | 製品サポート | はい | |
| 2 | Attachments | Camel メッセージでの添付のサポート | 製品サポート | 製品サポート | はい | |
| 3 | AWS2 CloudWatch | AWS SDK バージョン 2.x を使用してメトリクスを AWS CloudWatch に送信します。 | 製品サポート | 製品サポート | はい | |
| 4 | AWS2 DynamoDB | AWS SDK バージョン 2.x を使用して、AWS DynamoDB サービスからデータを保存および取得したり、AWS DynamoDB Stream からメッセージを受信したりします。 | 製品サポート | 製品サポート | はい | |
| 5 | AWS2 Kinesis | AWS SDK バージョン 2.x を使用して、AWS Kinesis Streams からレコードを消費および作成します。 | 製品サポート | 製品サポート | はい | |
| 6 | AWS2 Lambda | AWS SDK バージョン 2.x を使用して、AWS Lambda 関数を管理および呼び出します。 | 製品サポート | 製品サポート | はい | |
| 7 | AWS2 S3 ストレージ | AWS SDK バージョン 2.x を使用して、AWS S3 Storage Service からオブジェクトを保存および取得します。 | 製品サポート | 製品サポート | はい | |
| 8 | AWS2 Simple Notification System (SNS) | AWS SDK バージョン 2.x を使用して AWS Simple Notification Topic にメッセージを送信します。 | 製品サポート | 製品サポート | はい | |
| 9 | AWS2 Simple Queue Service (SQS) | AWS SDK バージョン 2.x を使用して AWS SQS サービスを送信先および送信元としてメッセージを送受信します。 | 製品サポート | 製品サポート | はい | |
| 10 | Azure ServiceBus | Azure Service Bus との間でメッセージを送受信します。 | テクノロジープレビュー | テクノロジープレビュー | はい | |
| 11 | Azure Storage Blob | SDK v12 を使用して Azure Storage Blob Service からブロブを保存および取得します。 | テクノロジープレビュー | テクノロジープレビュー | はい | |
| 12 | Azure Storage Queue |
| テクノロジープレビュー | テクノロジープレビュー | はい | |
| 13 | Bean | Java Bean のメソッドを呼び出します。 | 製品サポート | 製品サポート | はい | |
| 14 | Bean-validator | Java Bean Validation API を使用してメッセージボディーを検証します。 | 製品サポート | 製品サポート | はい | |
| 15 | Browse | BrowsableEndpoint をサポートするエンドポイントで受信したメッセージを調べます。 | 製品サポート | 製品サポート | はい | |
| 16 | Cassandra CQL | CQL3 API (Thrift API 以外) を使用して Cassandra 2.0 と統合します。DataStax が提供する Cassandra Java Driver をベースにしています。 | 製品サポート | 製品サポート | はい | |
| 17 | Cli-connector | Camel CLI に接続するランタイムアダプター | 製品サポート | 製品サポート | はい | |
| 18 | Controlbus | Camel ルートを管理および監視します。 | 製品サポート | 製品サポート | はい | |
| 19 | コア | Camel コア機能と基本的な Camel 言語/Constant、ExchangeProperty、Header、Ref、Simple および Tokenize | 製品サポート | 製品サポート | はい | |
| 20 | Crypto | Java Cryptographic Extension (JCE) の署名サービスを使用してエクスチェンジに署名し、検証します。 | 製品サポート | 製品サポート | はい | |
| 21 | Cron | Unix cron 構文で指定されたタイミングでイベントをトリガーする汎用インターフェイス。 | 製品サポート | 製品サポート | はい | |
| 22 | CXF SOAP | Apache CXF を使用して SOAP WebServices を公開するか、CXF WS クライアントを使用して外部 WebServices に接続します。 | 製品サポート | 製品サポート | はい | |
| 23 | Dataformat | Camel Data Format を通常の Camel コンポーネントとして使用します。 | 製品サポート | 製品サポート | はい | |
| 24 | Dataset | Camel アプリケーションの負荷テストおよびソークテスト用のデータを提供します。 | テクノロジープレビュー | テクノロジープレビュー | はい | |
| 25 | Direct | 同じ Camel コンテキストから別のエンドポイントを同期的に呼び出します。 | 製品サポート | 製品サポート | はい | |
| 26 | FHIR | FHIR (Fast Healthcare Interoperability Resources) 規格を使用して、ヘルスケアドメインの情報を交換します。JSON との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。XML との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。 | 製品サポート | 製品サポート | いいえ | |
| 27 | File | ファイルの読み取りと書き込みを行います。 | 製品サポート | 製品サポート | はい | |
| 28 | FTP | SFTP、FTP、または SFTP サーバーとの間でファイルをアップロードおよびダウンロードする | 製品サポート | 製品サポート | はい | |
| 29 | Google BigQuery | SQL クエリーまたは Google Client Services API を使用して Google Cloud BigQuery サービスにアクセスする | 製品サポート | 製品サポート | はい | |
| 30 | Google Pubsub | Google Cloud Platform PubSub サービスとの間でメッセージを送受信します。 | 製品サポート | 製品サポート | はい | |
| 31 | gRPC | gRPC エンドポイントを公開し、外部 gRPC エンドポイントにアクセスします。 | 製品サポート | 製品サポート | はい | |
| 32 | HTTP | Apache HTTP Client 5.x を使用して、外部の HTTP サーバーにリクエストを送信します。 | 製品サポート | 製品サポート | はい | |
| 33 | Infinispan | Infinispan の分散キー/値のストアとデータグリッドの読み取りと書き込みを行います。 | 製品サポート | 製品サポート | いいえ | |
| 34 | Jasypt | Jasypt を使用したセキュリティー | 製品サポート | 製品サポート | はい | |
| 35 | Java JOOR DSL | 実行時の Java ルート定義の解析のサポート | コミュニティーサポート | コミュニティーサポート | はい | |
| 36 | JDBC | SQL および JDBC を通じてデータベースにアクセスします。 | 製品サポート | 製品サポート | はい | |
| 37 | JIRA | JIRA 問題トラッカーと対話します。 | 製品サポート | 製品サポート | はい | |
| 38 | JMS | JMS Queue または Topic との間でメッセージを送受信します。 | 製品サポート | 製品サポート | はい | |
| 39 | JPA | Java Persistence API (JPA) を使用して、データベースから Java オブジェクトを保存し、取得します。 | 製品サポート | 製品サポート | はい | |
| 40 | JT400 | データキュー、メッセージキュー、またはプログラム呼び出しを使用して、IBM i システムとメッセージを交換します。IBM i は、AS/400 および iSeries サーバーの代替品です。 | 製品サポート | 製品サポート | はい | |
| 41 | JTA | Java Transaction API (JTA) および Narayana トランザクションマネージャーを使用して、Camel ルートをトランザクションに含めます。 | 製品サポート | 製品サポート | はい | |
| 42 | Kafka | Apache Kafka ブローカーとの間でメッセージを送受信します。 | 製品サポート | 製品サポート | はい | |
| 43 | Kamelet | ルートテンプレートを具体化する | 製品サポート | 製品サポート | はい | |
| 44 | Kubernetes | Kubernetes API に対して操作を実行する | テクノロジープレビュー | テクノロジープレビュー | はい | |
| 45 | Kudu | Apache Hadoop エコシステムの無料およびオープンソースの列指向データストアである Apache Kudu と対話します。 | 製品サポート | 製品サポート | いいえ | |
| 46 | 言語 | Camel がサポートする任意の言語でスクリプトを実行します。 | 製品サポート | 製品サポート | はい | |
| 47 | LDAP | LDAP サーバーで検索を実行します。 | 製品サポート | 製品サポート | はい | |
| 48 | Log | 基礎となるロギングメカニズムにメッセージをログとして記録します。 | 製品サポート | 製品サポート | はい | |
| 49 | LRA | Long-Running-Action フレームワークの Camel saga バインディング。 | テクノロジープレビュー | テクノロジープレビュー | はい | |
| 50 | | imap、pop3、および smtp プロトコルを使用してメールを送受信します。添付のある Camel メッセージを MIME-Multipart メッセージに、またはその逆にマーシャリングします。 | 製品サポート | 製品サポート | はい | |
| 51 | 管理 | JMX 管理ストラテジーと関連する管理リソース。 | 製品サポート | 製品サポート | はい | |
| 52 | MapStruct | Mapstruct を使用した型変換 | 製品サポート | 製品サポート | はい | |
| 53 | Master | クラスター内の単一のコンシューマーのみが特定のエンドポイントから消費するようにします。JVM が停止した場合に自動的にフェイルオーバーします。 | 製品サポート | 製品サポート | はい | |
| 54 | Micrometer | Micrometer ライブラリーを使用して、Camel ルートからさまざまなメトリクスを直接収集します。 | 製品サポート | 製品サポート | はい | |
| 55 | MicroProfile Fault Tolerance | Microprofile フォールトトレランスを使用した Circuit Breaker EIP | 製品サポート | 製品サポート | はい | |
| 56 | MicroProfile Health | MicroProfile Health による Camel ヘルスチェックの公開 | 製品サポート | 製品サポート | はい | |
| 57 | Minio | Minio SDK を使用して、Minio Storage Service からオブジェクトを保存および取得します。 | 製品サポート | 製品サポート | はい | |
| 58 | MLLP | MLLP プロトコルを使用して外部システムと通信します。 | 製品サポート | 製品サポート | はい | |
| 59 | MyBatis | MyBatis を使用して、リレーショナルデータベースでクエリー、ポーリング、挿入、更新、または削除を実行します。 | 製品サポート | 製品サポート | はい | |
| 60 | Mock | モックを使用してルートおよび仲介ルールをテストします。 | 製品サポート | 製品サポート | はい | |
| 61 | MongoDB | MongoDB ドキュメントおよびコレクションの操作を実行します。 | テクノロジープレビュー | テクノロジープレビュー | はい | |
| 62 | Netty | Netty 4.x で TCP または UDP を使用するソケットレベルのネットワーク。 | 製品サポート | 製品サポート | はい | |
| 63 | Netty HTTP | Netty 4.x を使用する Netty HTTP サーバーおよびクライアント。 | 製品サポート | 製品サポート | はい | |
| 64 | Openapi Java | Camel REST DSL で定義された OpenAPI リソースを公開する | 製品サポート | 製品サポート | はい | |
| 65 | OpenTelemetry | OpenTelemetry を使用した分散トレース | 製品サポート | 製品サポート | はい | |
| 66 | Quartz | Quartz 2.x スケジューラーを使用してメッセージの送信をスケジュールします。 | 製品サポート | 製品サポート | はい | |
| 67 | Paho | Eclipse Paho MQTT クライアントを使用して MQTT メッセージブローカーと通信します。 | 製品サポート | 製品サポート | はい | |
| 68 | Paho MQTT5 | Eclipse Paho MQTT v5 クライアントを使用して MQTT メッセージブローカーと通信します。 | 製品サポート | 製品サポート | はい | |
| 69 | Platform HTTP | 現在のプラットフォームで利用可能な HTTP サーバーを使用して HTTP エンドポイントを公開します。 | 製品サポート | 製品サポート | はい | |
| 70 | Ref | Camel Registry で名前によって動的に検索されたエンドポイントにメッセージをルーティングします。 | 製品サポート | 製品サポート | はい | |
| 71 | REST | REST サービスおよび OpenAPI Specification を公開するか、外部の REST サービスを呼び出します。 | 製品サポート | 製品サポート | はい | |
| 72 | REST OpenAPI | RestProducerFactory インターフェイスを実装するコンポーネントに委任する OpenAPI 仕様ドキュメントに基づいて REST プロデューサーを設定します。 | 製品サポート | 製品サポート | はい | |
| 73 | Salesforce | Java DTO を使用して Salesforce と通信します。 | 製品サポート | 製品サポート | はい | |
| 74 | SAGA | Saga EIP を使用して、ルート内でカスタムアクションを実行します。 | テクノロジープレビュー | テクノロジープレビュー | はい | |
| 75 | SAP | SAP Camel コンポーネントを提供します。 | 製品サポート | なし | はい | |
| 76 | Saxon | XQuery および Saxon を使用して XML ペイロードをクエリーまたは変換します。 | 製品サポート | 製品サポート | はい | |
| 77 | Scheduler | java.util.concurrent.ScheduledExecutorService を使用して、指定された間隔でメッセージを生成します。 | 製品サポート | 製品サポート | はい | |
| 78 | Seda | 同じ JVM の Camel コンテキストから別のエンドポイントを非同期に呼び出します。 | 製品サポート | 製品サポート | はい | |
| 79 | Servlet | Servlet によって HTTP リクエストを処理します。 | 製品サポート | 製品サポート | はい | |
| 80 | Slack | Slack との間でメッセージを送受信します。 | 製品サポート | 製品サポート | はい | |
| 81 | SNMP | トラップを受信し、SNMP (Simple Network Management Protocol) 対応デバイスをポーリングします。 | 製品サポート | テクノロジープレビュー | はい | |
| 82 | Splunk | Splunk でイベントを公開または検索します。 | 製品サポート | 製品サポート | はい | |
| 83 | Splunk HEC | splunk コンポーネントを使用すると、HTTP Event Collector を使用して Splunk でイベントを公開できます。 | 製品サポート | 製品サポート | はい | |
| 84 | SQL | SQL クエリーを実行します。 | 製品サポート | 製品サポート | はい | |
| 85 | Telegram | Telegram Bot API として動作するメッセージを送受信します。 | 製品サポート | 製品サポート | はい | |
| 86 | Timer | java.util.Timer を使用して、指定された間隔でメッセージを生成します。 | 製品サポート | 製品サポート | はい | |
| 87 | Validator | XML スキーマと JAXP 検証を使用してペイロードを検証します。 | 製品サポート | 製品サポート | はい | |
| 88 | Velocity | Velocity テンプレートを使用してメッセージを変換します。 | 製品サポート | 製品サポート | はい | |
| 89 | VertX HTTP | Vert.x による Camel HTTP クライアントのサポート | 製品サポート | 製品サポート | はい | |
| 90 | VertX Websocket | Vert.x による Camel WebSocket のサポート | 製品サポート | 製品サポート | はい | |
| 91 | XJ | XSLT を使用して、JSON および XML メッセージを変換します。 | 製品サポート | 製品サポート | はい | |
| 92 | XML IO DSL | XML ルート定義を解析するための XML スタック | 製品サポート | 製品サポート | はい | |
| 93 | XSLT | XSLT テンプレートを使用して XML ペイロードを変換します。 | 製品サポート | 製品サポート | はい | |
| 94 | XSLT Saxon | Saxon を使用した XSLT テンプレートを使用して XML ペイロードを変換します。 | 製品サポート | 製品サポート | はい | |
| 95 | Zip ファイル | java.util.zip.ZipStream を使用して、ストリームを圧縮および圧縮解除します。 | 製品サポート | 製品サポート | はい | |
| 96 | Zip デフレート圧縮 | java.util.zip.Deflater、java.util.zip.Inflater、または java.util.zip.GZIPStream を使用して、ストリームを圧縮および解凍します。 | 製品サポート | 製品サポート | はい |
2.2. サポート言語 リンクのコピーリンクがクリップボードにコピーされました!
7 つの言語があります。
| エクステンション | アーティファクト | 説明 | JVM サポートレベル | ネイティブサポートレベル | IBM Power および IBM Z のサポート | |
|---|---|---|---|---|---|---|
| 1 | Bean | Java Bean のメソッドを呼び出します。 | 製品サポート | 製品サポート | はい | |
| 2 | コア | Camel コア機能と基本的な Camel 言語/Constant、ExchangeProperty、Header、Ref、Simple および Tokenize | 製品サポート | 製品サポート | はい | |
| 3 | Hl7 | HL7 MLLP コーデックを使用して、HL7 (Health Care) モデルオブジェクトをマーシャリングおよびアンマーシャリングします。 | 製品サポート | 製品サポート | はい | |
| 4 | JSONPath | JSON メッセージのボディーに対して、JSONPath 式を評価します。 | 製品サポート | 製品サポート | はい | |
| 5 | Jslt | JSLT を使用して JSON ペイロードをクエリーまたは変換します。 | 製品サポート | 製品サポート | はい | |
| 6 | Saxon | XQuery および Saxon を使用して XML ペイロードをクエリーまたは変換します。 | 製品サポート | 製品サポート | はい | |
| 7 | XML IO DSL | XML ルート定義を解析するための XML スタック | 製品サポート | 製品サポート | はい | |
| 8 | Xpath | XML ペイロードに対して XPath 式を評価します。 | 製品サポート | 製品サポート | はい | |
| 9 | YAML DSL | 製品サポート | 製品サポート | はい | YAML ルート定義を解析するための YAML スタック |
2.3. サポートされるデータフォーマット リンクのコピーリンクがクリップボードにコピーされました!
13 種類のデータフォーマットがあります。
| エクステンション | アーティファクト | 説明 | JVM サポートレベル | ネイティブサポートレベル | IBM Power および IBM Z のサポート | |
|---|---|---|---|---|---|---|
| 1 | Avro | Apache Avro バイナリーデータフォーマットを使用して、メッセージをシリアライズおよびデシリアライズします。 | 製品サポート | 製品サポート | はい | |
| 2 | Bindy | Camel Bindy を使用して、片側の POJO と、反対側のコンマ区切り値 (CSV)、固定フィールド長、またはキーと値のペア (KVP) 形式の間のマーシャリングとアンマーシャル | 製品サポート | 製品サポート | はい | |
| 3 | Crypto | Java 暗号化エクステンション: Camel のマーシャルおよびアンマーシャルフォーマットメカニズムを使用した対称 (共有鍵) 暗号化および復号化。 | 製品サポート | 製品サポート | はい | |
| 4 | Gson | Gson を使用して、POJO を JSON に、およびその逆にマーシャリングします。 | 製品サポート | 製品サポート | はい | |
| 5 | Hl7 | HL7 MLLP コーデックを使用して、HL7 (Health Care) モデルオブジェクトをマーシャリングおよびアンマーシャリングします。 | 製品サポート | 製品サポート | はい | |
| 6 | Jackson | Jackson を使用して、POJO を JSON にマーシャリングし、その逆も行います。 | 製品サポート | 製品サポート | はい | |
| 7 | Jackson Avro | Jackson を使用して、POJO を Avro にマーシャリングし、その逆も行います。 | 製品サポート | 製品サポート | はい | |
| 8 | Jackson ProtoBuf | Jackson を使用して、POJO を Protobuf にマーシャリングし、その逆も行います。 | 製品サポート | 製品サポート | はい | |
| 9 | Jackson XML | Jackson の XMLMapper エクステンションを使用して、XML ペイロードを POJO にアンマーシャリングし、戻します。 | 製品サポート | 製品サポート | はい | |
| 10 | Jaxb | JAXB2 XML マーシャリング標準を使用して、XML ペイロードを POJO に、およびその逆にアンマーシャリングします。 | 製品サポート | 製品サポート | はい | |
| 11 | Xml-JAXP | Camel XML JAXP | 製品サポート | 製品サポート | はい | |
| 12 | PGP | Camel のマーシャルおよびアンマーシャルフォーマットメカニズムを使用した対称 (共有鍵) 暗号化および復号化。 | 製品サポート | 製品サポート | はい | |
| 13 | SOAP | Java オブジェクトを SOAP メッセージにマーシャリングし、その逆も行います。 | 製品サポート | 製品サポート | はい |
第3章 Camel Quarkus エクステンションリファレンス リンクのコピーリンクがクリップボードにコピーされました!
この章では、Red Hat build of Apache Camel for Quarkus の使用に関する情報を提供します。
3.1. AMQP リンクのコピーリンクがクリップボードにコピーされました!
Apache QPid クライアントを使用した AMQP プロトコルによるメッセージング。
3.1.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
AMQP コンポーネント、URI 構文:
amqp:destinationType:destinationName
使用方法と設定の詳細は、上記リンクを参照してください。
3.1.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-amqp</artifactId>
</dependency>
3.1.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.1.3.1. org.w3c.dom.Node を使用したメッセージマッピング リンクのコピーリンクがクリップボードにコピーされました!
Camel AMQP コンポーネントは、jakarta.jms.Message および org.apache.camel.Message 間のメッセージマッピングをサポートします。Camel メッセージ本文タイプ org.w3c.dom.Node を変換する場合は、camel-quarkus-xml-jaxp エクステンションがクラスパスに存在することを確認する必要があります。
3.1.3.2. jakarta.jms.ObjectMessage のネイティブモードのサポート リンクのコピーリンクがクリップボードにコピーされました!
JMS メッセージペイロードを jakarta.jms.ObjectMessage として送信する場合、シリアル化のために登録する関連クラスに @RegisterForReflection(serialization = true) でアノテーションを付ける必要があります。このエクステンションは、quarkus.camel.native.reflection.serialization-enabled = true を自動的に設定することに注意してください。詳細は、ネイティブモードのユーザーガイド を参照してください。
3.1.3.3. 接続プール リンクのコピーリンクがクリップボードにコピーされました!
quarkus-pooled-jms エクステンションを使用すると、接続のプーリングサポートを取得できます。詳細は、quarkus-pooled-jms エクステンションドキュメントを参照してください。
以下の依存関係を pom.xml に追加するだけで、接続のプーリングサポートを取得できます。
<dependency>
<groupId>io.quarkiverse.messaginghub</groupId>
<artifactId>quarkus-pooled-jms</artifactId>
</dependency>
プーリングのサポートを有効にするには、以下の設定を application.properties に追加する必要があります。
quarkus.qpid-jms.wrap=true
3.1.4. ネイティブモードの transferException オプション リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
3.1.5. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
エクステンションは、Quarkus Qpid JMS エクステンションを活用します。ConnectionFactory Bean は自動的に作成され、AMQP コンポーネントに接続されます。接続ファクトリーは、Quarkus Qpid JMS 設定オプション を介して設定できます。
3.2. Attachments リンクのコピーリンクがクリップボードにコピーされました!
Camel メッセージでの添付のサポート
3.2.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.2.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-attachments</artifactId>
</dependency>
3.3. Avro リンクのコピーリンクがクリップボードにコピーされました!
Apache Avro バイナリーデータフォーマットを使用して、メッセージをシリアライズおよびデシリアライズします。
3.3.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.3.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-avro</artifactId>
</dependency>
3.3.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
vanilla Camel から知られている標準的な使用方法以外に、Camel Quarkus では、JVM と Native モードの両方でビルド時に Avro スキーマを解析する機能が追加されています。
Avro スキーマファイルから Avro クラスを生成するアプローチは、quarkus-avro エクステンションによって作成されたものです。以下が必要です。
-
*.avscファイルをsrc/main/avroまたはsrc/test/avroという名前のフォルダーに保存します quarkus-maven-pluginの通常のビルド目標に加えて、generate-code目標を追加します。<plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <executions> <execution> <id>generate-code-and-build</id> <goals> <goal>generate-code</goal> <goal>build</goal> </goals> </execution> </executions> </plugin>
Camel Quarkus Avro 統合テスト および Quarkus Avro 統合テスト の動作設定を参照してください。
3.4. AWS 2 CloudWatch リンクのコピーリンクがクリップボードにコピーされました!
メトリクスを AWS CloudWatch に送信します。
3.4.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
AWS CloudWatch コンポーネント、URI 構文:
aws2-cw:namespace
使用方法と設定の詳細は、上記リンクを参照してください。
3.4.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-cw</artifactId>
</dependency>
3.4.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.5. AWS 2 DynamoDB リンクのコピーリンクがクリップボードにコピーされました!
AWS SDK バージョン 2.x を使用して、AWS DynamoDB サービスからデータを保存および取得したり、AWS DynamoDB Stream からメッセージを受信したりします。
3.5.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
AWS DynamoDB コンポーネント、URI 構文:
aws2-ddb:tableName -
AWS DynamoDB Streams コンポーネント、URI 構文:
aws2-ddbstream:tableName
使用方法と設定の詳細は、上記リンクを参照してください。
3.5.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-ddb</artifactId>
</dependency>
3.5.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.5.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.5.4.1. Quarkus Amazon DynamoDB とのオプションの統合 リンクのコピーリンクがクリップボードにコピーされました!
必要に応じて、Quarkus Amazon DynamoDB エクステンションを Camel Quarkus AWS 2 DynamoDB と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。
クライアントタイプ
apacheは、次のプロパティーを設定して選択する必要があります。quarkus.dynamodb.sync-client.type=apacheDynamoDbClientは、Camel Quarkus が実行時に検索できるように、Quarkus CDI 参照 の意味で "削除不可" である必要があります。たとえば、DynamoDbClientを注入するダミー Bean を追加することで、これに到達できます。import jakarta.enterprise.context.ApplicationScoped; import io.quarkus.arc.Unremovable; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; @ApplicationScoped @Unremovable class UnremovableDynamoDbClient { @Inject DynamoDbClient dynamoDbClient; }
3.6. AWS 2 Kinesis リンクのコピーリンクがクリップボードにコピーされました!
AWS SDK バージョン 2.x を使用して、AWS Kinesis Streams からレコードを消費および作成します。
3.6.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
AWS Kinesis コンポーネント、URI 構文:
aws2-kinesis:streamName -
AWS Kinesis Firehose コンポーネント、URI 構文:
aws2-kinesis-firehose:streamName
使用方法と設定の詳細は、上記リンクを参照してください。
3.6.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-kinesis</artifactId>
</dependency>
3.6.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.7. AWS 2 Lambda リンクのコピーリンクがクリップボードにコピーされました!
AWS SDK バージョン 2.x を使用して、AWS Lambda 関数を管理および呼び出します。
3.7.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
AWS Lambda コンポーネント、URI 構文:
aws2-lambda:function
使用方法と設定の詳細は、上記リンクを参照してください。
3.7.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-lambda</artifactId>
</dependency>
3.7.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.7.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.7.4.1. Camel aws2-lambda エクステンションによって quarkus-amazon-lambda を活用することはできません リンクのコピーリンクがクリップボードにコピーされました!
quarkus-amazon-lambda エクステンションを使用すると、Quarkus を使用して AWS Lambda をビルドできますが、Camel コンポーネントは既存の関数を管理 (デプロイ、アンデプロイなど) します。したがって、quarkus-amazon-lambda を aws2-lambda エクステンションのクライアントとして使用することはできません。
3.8. AWS 2 S3 Storage Service リンクのコピーリンクがクリップボードにコピーされました!
AWS S3 Storage Service からオブジェクトを保存および取得します。
3.8.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
AWS S3 Storage Service コンポーネント、URI 構文:
aws2-s3://bucketNameOrArn
使用方法と設定の詳細は、上記リンクを参照してください。
3.8.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-s3</artifactId>
</dependency>
3.8.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.8.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.8.4.1. Quarkus Amazon S3 とのオプションの統合 リンクのコピーリンクがクリップボードにコピーされました!
必要に応じて、Quarkus Amazon S3 エクステンションを Camel Quarkus AWS 2 S3 Storage Service と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。
クライアントタイプ
apacheは、次のプロパティーを設定して選択する必要があります。quarkus.s3.sync-client.type=apacheS3Clientは、Camel Quarkus が実行時に検索できるように、Quarkus CDI 参照 の意味で "削除不可" にする必要があります。たとえば、S3Clientを注入するダミー Bean を追加することで、これに到達できます。import jakarta.enterprise.context.ApplicationScoped; import io.quarkus.arc.Unremovable; import software.amazon.awssdk.services.s3.S3Client; @ApplicationScoped @Unremovable class UnremovableS3Client { @Inject S3Client s3Client; }
3.9. AWS 2 Simple Notification System (SNS) リンクのコピーリンクがクリップボードにコピーされました!
AWS Simple Notification Topic にメッセージを送信します。
3.9.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
AWS Simple Notification System (SNS) コンポーネント、URI 構文:
aws2-sns:topicNameOrArn
使用方法と設定の詳細は、上記リンクを参照してください。
3.9.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-sns</artifactId>
</dependency>
3.9.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.9.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.9.4.1. Quarkus Amazon SNS とのオプションの統合 リンクのコピーリンクがクリップボードにコピーされました!
必要に応じて、Quarkus Amazon SNS エクステンションを Camel Quarkus AWS 2 Simple Notification System (SNS) と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。
クライアントタイプ
apacheは、次のプロパティーを設定して選択する必要があります。quarkus.sns.sync-client.type=apacheSnsClientは、Camel Quarkus が実行時に検索できるように、Quarkus CDI 参照 の意味で "削除不可" にする必要があります。たとえば、SnsClientを注入するダミー Bean を追加することで、これに到達できます。import jakarta.enterprise.context.ApplicationScoped; import io.quarkus.arc.Unremovable; import software.amazon.awssdk.services.sns.SnsClient; @ApplicationScoped @Unremovable class UnremovableSnsClient { @Inject SnsClient snsClient; }
3.10. AWS 2 Simple Queue Service (SQS) リンクのコピーリンクがクリップボードにコピーされました!
AWS SQS サービスとの間でメッセージを送受信します。
3.10.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
AWS Simple Queue Service (SQS) コンポーネント、URI 構文:
aws2-sqs:queueNameOrArn
使用方法と設定の詳細は、上記リンクを参照してください。
3.10.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-sqs</artifactId>
</dependency>
3.10.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.10.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.10.4.1. Quarkus Amazon SQS とのオプションの統合 リンクのコピーリンクがクリップボードにコピーされました!
必要に応じて、Quarkus Amazon SQS エクステンションを Camel Quarkus AWS 2 Simple Queue Service (SQS) と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。
クライアントタイプ
apacheは、次のプロパティーを設定して選択する必要があります。quarkus.sqs.sync-client.type=apacheSqsClientは、Camel Quarkus が実行時に検索できるように、Quarkus CDI 参照 の意味で "削除不可" にする必要があります。たとえば、SqsClientを注入するダミー Bean を追加することで、これに到達できます。import jakarta.enterprise.context.ApplicationScoped; import io.quarkus.arc.Unremovable; import software.amazon.awssdk.services.sqs.SqsClient; @ApplicationScoped @Unremovable class UnremovableSqsClient { @Inject SqsClient sqsClient; }
3.11. Azure ServiceBus リンクのコピーリンクがクリップボードにコピーされました!
Azure Service Bus との間でメッセージを送受信します。
3.11.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Azure ServiceBus コンポーネント、URI 構文:
azure-servicebus:topicOrQueueName
使用方法と設定の詳細は、上記リンクを参照してください。
3.11.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-azure-servicebus</artifactId>
</dependency>
3.12. Azure Storage Blob Service リンクのコピーリンクがクリップボードにコピーされました!
SDK v12 を使用して Azure Storage Blob Service からブロブを保存および取得します。
3.12.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Azure Storage Blob Service コンポーネント、URI 構文:
azure-storage-blob:accountName/containerName
使用方法と設定の詳細は、上記リンクを参照してください。
3.12.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-azure-storage-blob</artifactId>
</dependency>
3.12.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.12.3.1. Micrometer メトリクスのサポート リンクのコピーリンクがクリップボードにコピーされました!
Reactor Netty トランスポートの Micrometer メトリクスのコレクションを有効にする場合は、quarkus-micrometer の依存関係を宣言して、Quarkus メトリクス HTTP エンドポイント経由で利用できるようにします。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer</artifactId>
</dependency>
3.12.4. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.13. Azure Storage Queue Service リンクのコピーリンクがクリップボードにコピーされました!
azure-storage-queue コンポーネントは、Azure SDK v12 を使用して Azure Storage Queue への/からのメッセージを保存および取得するために使用されます。
3.13.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Azure Storage Queue Service コンポーネント、URI 構文:
azure-storage-queue:accountName/queueName
使用方法と設定の詳細は、上記リンクを参照してください。
3.13.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-azure-storage-queue</artifactId>
</dependency>
3.13.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.13.3.1. Micrometer メトリクスのサポート リンクのコピーリンクがクリップボードにコピーされました!
Reactor Netty トランスポートの Micrometer メトリクスのコレクションを有効にする場合は、quarkus-micrometer の依存関係を宣言して、Quarkus メトリクス HTTP エンドポイント経由で利用できるようにします。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer</artifactId>
</dependency>
3.13.4. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.14. Bean バリデーター リンクのコピーリンクがクリップボードにコピーされました!
Java Bean Validation API を使用してメッセージボディーを検証します。
3.14.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Bean Validator コンポーネント、URI 構文:
bean-validator:label
使用方法と設定の詳細は、上記リンクを参照してください。
3.14.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-bean-validator</artifactId>
</dependency>
3.14.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.14.3.1. ValidatorFactory の設定 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションの実装は、Quarkus Hibernate Validator エクステンション を利用します。
そのため、Camel のプロパティー (constraintValidatorFactory、messageInterpolator、traversableResolver、validationProviderResolver、validatorFactory) によって ValidatorFactory を設定することはできません。
デフォルトの ValidatorFactory (Quarkus によって作成される) に注入される Bean を作成して ValidatorFactory を設定できます。詳細は、Quarkus CDI のドキュメント を参照してください。
3.14.3.2. ネイティブモードでのカスタム検証グループ リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードでカスタム検証グループを使用する場合は、反映するためにすべてのインターフェイスを登録する必要があります (ドキュメント を参照)。
以下に例を示します。
@RegisterForReflection
public interface OptionalChecks {
}
3.14.4. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
(META-INF/validation.xml ファイルを指定して) XML として制約を記述することはできません。サポートされているのは Java アノテーションのみです。これは、Quarkus Hibernate Validator エクステンションの制限によって生じます (issue を参照)。
3.15. Bean リンクのコピーリンクがクリップボードにコピーされました!
Java Bean のメソッドを呼び出します。
3.15.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Bean コンポーネント、URI 構文:
bean:beanName - Bean メソッド言語
-
Class コンポーネント、URI 構文:
class:beanName
使用方法と設定の詳細は、上記リンクを参照してください。
3.15.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-bean</artifactId>
</dependency>
3.15.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
Camel レジストリーで使用できる Bean のメソッドを呼び出す場合を除き、Bean コンポーネントおよび Bean メソッド言語は、Quarkus CDI Bean を呼び出することもできます。
3.16. Bindy リンクのコピーリンクがクリップボードにコピーされました!
Camel Bindy を使用して、片側の POJO と、反対側のコンマ区切り値 (CSV)、固定フィールド長、またはキーと値のペア (KVP) 形式の間のマーシャリングとアンマーシャル
3.16.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.16.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-bindy</artifactId>
</dependency>
3.16.3. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで camel-quarkus-bindy を使用する場合は、ビルドマシンのロケールのみがサポートされます。
たとえば、ロケールが french のビルドマシンの場合、以下のコード
BindyDataFormat dataFormat = new BindyDataFormat();
dataFormat.setLocale("ar");
は、JVM モードでは期待どおりに数値をアラビア数字にフォーマットします。ただし、ネイティブモードでは数値をフランス語的にフォーマットします。
さらに調整しないと、ビルドマシンのデフォルトロケールが使用されます。別のロケールは、quarkus.native.user-language および quarkus.native.user-country 設定プロパティーで指定できます。
3.17. Browse リンクのコピーリンクがクリップボードにコピーされました!
BrowsableEndpoint をサポートするエンドポイントで受信したメッセージを調べます。
3.17.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Browse コンポーネント、URI 構文:
browse:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.17.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-browse</artifactId>
</dependency>
3.18. Cassandra CQL リンクのコピーリンクがクリップボードにコピーされました!
CQL3 API (Thrift API 以外) を使用して Cassandra 2.0 と統合します。DataStax が提供する Cassandra Java Driver をベースにしています。
3.18.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Cassandra CQL コンポーネント、URI 構文:
cql:beanRef:hosts:port/keyspace
使用方法と設定の詳細は、上記リンクを参照してください。
3.18.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cassandraql</artifactId>
</dependency>
3.18.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.18.3.1. ネイティブモードでの Cassandra 集約リポジトリー リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで CassandraAggregationRepository などの Cassandra 集約リポジトリーを使用するには、ネイティブシリアライズのサポートを有効化 する必要があります。
さらに、エクスチェンジボディがカスタムタイプである場合、クラス宣言に @RegisterForReflection(serialization = true) のアノテーションを付けてシリアライズ用に登録する必要があります。
3.19. CLI Connector リンクのコピーリンクがクリップボードにコピーされました!
Camel CLI に接続するランタイムアダプター
3.19.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.19.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cli-connector</artifactId>
</dependency>
3.20. Control Bus リンクのコピーリンクがクリップボードにコピーされました!
Camel ルートを管理および監視します。
3.20.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Control Bus コンポーネント、URI 構文:
controlbus:command:language
使用方法と設定の詳細は、上記リンクを参照してください。
3.20.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-controlbus</artifactId>
</dependency>
3.20.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.20.3.1. 統計 リンクのコピーリンクがクリップボードにコピーされました!
stats コマンドエンドポイントを使用する場合は、JMX を有効にするために、camel-quarkus-management エクステンションをプロジェクトの依存関係として追加する必要があります。Maven ユーザーは、pom.xml に以下を追加する必要があります。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-management</artifactId>
</dependency>
3.20.3.2. 言語 リンクのコピーリンクがクリップボードにコピーされました!
次の言語は、Red Hat build of Apache Camel for Quarkus の Control Bus エクステンションでの使用がサポートされています。
3.20.3.2.1. Bean リンクのコピーリンクがクリップボードにコピーされました!
Bean 言語を使用して、Bean でメソッドを呼び出し、ルートの状態を制御できます。org.apache.camel.quarkus:camel-quarkus-bean エクステンションをクラスパスに追加する必要があります。Maven ユーザーは、次の依存関係を POM に追加する必要があります。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-bean</artifactId>
</dependency>
ネイティブモードでは、Bean クラスに @RegisterForReflection のアノテーションを付ける必要があります。
3.20.3.2.2. Simple リンクのコピーリンクがクリップボードにコピーされました!
Simple 言語を使用して、ルートの状態を制御できます。次の例では、ProducerTemplate を使用して、id foo のルートを停止します。
template.sendBody(
"controlbus:language:simple",
"${camelContext.getRouteController().stopRoute('foo')}"
);
OGNL 表記を使用するには、依存関係として org.apache.camel.quarkus:camel-quarkus-bean エクステンションを追加する必要があります。
ネイティブモードでは、OGNL 表記で使用されるクラスをリフレクション用に登録する必要があります。上記のコードスニペットでは、camelContext.getRouteController() から返される org.apache.camel.spi.RouteController クラスを登録する必要があります。これはサードパーティークラスであるため、@RegisterForReflection で直接アノテーションを付けることはできません。代わりに、別のクラスにアノテーションを付けて、登録するターゲットクラスを指定することができます。たとえば、Camel ルートを定義するクラスは、@RegisterForReflection(targets = { org.apache.camel.spi.RouteController.class }) でアノテーションを付けることができます。
または、次の行を src/main/resources/application.properties に追加します。
quarkus.camel.native.reflection.include-patterns = org.apache.camel.spi.RouteController
3.20.4. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
3.20.4.1. 統計 リンクのコピーリンクがクリップボードにコピーされました!
JMX は GraalVM ではサポートされていないため、stats アクションはネイティブモードでは使用できません。そのため、クラスパス上で camel-quarkus-management エクステンションを使用してネイティブイメージをビルドしようとすると、ビルドに失敗します。
この機能は、Red Hat build of Apache Camel for Quarkus ではサポートされていません。
3.21. コア リンクのコピーリンクがクリップボードにコピーされました!
Camel コア機能と基本的な Camel 言語/Constant、ExchangeProperty、Header、Ref、Simple および Tokenize
3.21.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.21.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-core</artifactId>
</dependency>
3.21.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.21.3.1. Simple 言語 リンクのコピーリンクがクリップボードにコピーされました!
3.21.3.1.1. OGNL 表記の使用 リンクのコピーリンクがクリップボードにコピーされました!
Simple 言語から OGNL 表記を使用する場合は、camel-quarkus-bean エクステンションを使用する必要があります。
たとえば、以下の簡易式は、Client 型のメッセージボディーの getAddress() メソッドにアクセスします。
---
simple("${body.address}")
---
このような場合、ここで説明されているように、camel-quarkus-bean エクステンションで、追加の依存関係を取得する必要があります。ネイティブモードでは、反映するためにいくつかのクラスを登録する必要がある場合があります。上記の例では、Client クラスを 反映するために登録する 必要があります。
3.21.3.1.2. ネイティブモードでの動的型解決の使用 リンクのコピーリンクがクリップボードにコピーされました!
次のような単純な式から型を動的に解決する場合:
-
simple("${mandatoryBodyAs(TYPE)}") -
simple("${type:package.Enum.CONSTANT}") -
from("…").split(bodyAs(TYPE.class)) -
simple("${body} is TYPE")
反映するため、一部のクラスを手動で登録する必要がある場合があります。
たとえば、以下の単純な式は、ランタイム時に java.nio.ByteBuffer 型を動的に解決します。
---
simple("${body} is 'java.nio.ByteBuffer'")
---
したがって、java.nio.ByteBuffer クラスを 反映するために登録する 必要があります。
3.21.3.1.3. ネイティブモードでのクラスパスリソースと Simple 言語の使用 リンクのコピーリンクがクリップボードにコピーされました!
次の例のように、ルートがクラスパスから Simple スクリプトをロードすることになっている場合
from("direct:start").transform().simple("resource:classpath:mysimple.txt");
次に、Quarkus quarkus.native.resources.includes プロパティーを使用して、以下に示すようにネイティブ実行可能ファイルにリソースを含める必要があります。
quarkus.native.resources.includes = mysimple.txt
3.21.3.1.4. ネイティブモードのプロパティーを介したカスタム Bean の設定 リンクのコピーリンクがクリップボードにコピーされました!
#class:* や #type:* などの設定でネイティブモードのプロパティーを介してカスタム Bean を指定する場合は、リフレクション用にいくつかのクラスを手動で登録する必要がある場合があります。
たとえば、以下のカスタム Bean 定義には、Bean のインスタンス化とセッターの呼び出しにリフレクションを使用することが含まれます。
---
camel.beans.customBeanWithSetterInjection = #class:org.example.PropertiesCustomBeanWithSetterInjection
camel.beans.customBeanWithSetterInjection.counter = 123
---
そのため、クラス PropertiesCustomBeanWithSetterInjection を リフレクション用に登録 する必要があります。この場合は、フィールドアクセスを省略できることに注意してください。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
true に設定すると、 |
|
|
|
クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。一致するファイルで定義されたサービスは、** 除外は包含よりも優先されます。ここで定義された除外は、Camel Quarkus エクステンションで追加されたサービスの検出性を拒否するのにも使用できます。
値の例: |
| |
|
クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。指定したファイルが
Camel Quarkus エクステンションには、デフォルトで一部のサービスが含まれる可能性があることに注意してください。ここで選択されそれらのサービスに追加されたサービスおよび
値の例: |
| |
|
クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。一致するファイルで定義されたサービスは、アプリケーションの静的初期化中に Camel レジストリーに 追加されません。 除外は包含よりも優先されます。ここで定義された除外は、Camel Quarkus エクステンションで追加されたサービスの登録を拒否するのにも使用できます。
値の例: |
| |
|
クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。指定したファイルが
Camel Quarkus エクステンションには、デフォルトで一部のサービスが含まれる可能性があることに注意してください。ここで選択されそれらのサービスに追加されたサービスおよび
値の例: |
| |
|
これを |
|
|
|
これを |
|
|
|
これを |
|
|
|
これを |
|
|
|
静的な初期化時のルートの自動検出を有効にします。 |
|
|
|
RouteBuilder クラスの除外フィルタースキャンに使用されます。除外フィルタリングは、包含フィルターよりも優先されます。パターンは Ant-path スタイルのパターンを使用しています。複数のパターンをコンマで区切って指定することができます。たとえば、Bar から始まるすべてのクラスを除外するには、**/Bar* を使用します。特定のパッケージからのすべてのルートを除外するには、com/mycompany/bar/* を使用します。特定のパッケージおよびそのサブパッケージからのすべてのルートを除外するには、2 つのワイルドカードを使用します (com/mycompany/bar/**)。特定の 2 つのパッケージからのすべてのルートを除外するには、com/mycompany/bar/*,com/mycompany/stuff/* を使用します。 |
| |
|
RouteBuilder クラスの包含フィルタースキャンに使用されます。除外フィルタリングは、包含フィルターよりも優先されます。パターンは Ant-path スタイルのパターンを使用しています。複数のパターンをコンマで区切って指定することができます。たとえば、Foo から始まるすべてのクラスを含めるには、**/Foo* を使用します。特定のパッケージからのすべてのルートを含めるには、com/mycompany/foo/* を使用します。特定のパッケージおよびそのサブパッケージからのすべてのルートを含めるには、2 つのワイルドカードを使用します (com/mycompany/foo/**)。特定の 2 つのパッケージからのすべてのルートを含めるには、com/mycompany/foo/*,com/mycompany/stuff/* を使用します。 |
| |
|
反映のために登録から 除外 されるクラス名に一致する Ant-path スタイルパターンのコンマ区切りリスト。
このオプションは、 このオプションは、Quarkus エクステンションによって内部で登録されたクラスの登録解除には使用できません。 |
| |
|
反映のために登録されるクラス名に一致する Ant-path フォーマットのパターンのコンマ区切りリスト。
デフォルトでは、クラスは含まれません。このオプションで選択されるセットは、 Quarkus エクステンションは通常、反映のために必要なクラスを登録することに注意してください。このオプションは、組み込みの機能では十分ではない場合に有用です。
このオプションは、コンストラクター、フィールド、およびメソッドの完全な反映アクセスを有効にします。よりきめ細かい制御が必要な場合は、Java コードで このオプションが適切に機能するには、以下の条件のうち少なくとも 1 つが満たされる必要があります。
- パターンにワイルドカード (
ここで、 |
| |
|
|
|
|
|
ビルド時にルート定義から式を抽出できない場合の対処方法。 |
|
|
|
ビルド時にルート定義から式を抽出する必要があるかどうかを示します。無効にすると、式はランタイムにコンパイルされます。 |
|
|
|
Camel イベントから CDI イベントへのブリッジを有効にするかどうか。
これにより、CDI オブザーバーを Camel イベント用に設定できます。たとえば、 この設定項目は、Camel イベント用に設定されたオブザーバーがアプリケーションに存在する場合にのみ効果があることに注意してください。 |
|
|
|
camel ソースの場所を有効/無効にするためのビルド時の設定オプション |
|
|
|
|
|
|
|
|
|
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.22. Cron リンクのコピーリンクがクリップボードにコピーされました!
Unix cron 構文で指定されたタイミングでイベントをトリガーする汎用インターフェイス。
3.22.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Cron コンポーネント、URI 構文:
cron:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.22.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cron</artifactId>
</dependency>
3.22.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
cron コンポーネントは汎用インターフェイスコンポーネントであるため、Camel Quarkus ユーザーは、実装を提供する別のエクステンションと一緒に cron エクステンションを使用する必要があります。
3.23. Crypto (JCE) リンクのコピーリンクがクリップボードにコピーされました!
Java Cryptographic Extension (JCE) の署名サービスを使用してエクスチェンジに署名し、検証します。
3.23.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
- Crypto (Java Cryptographic Extension) データフォーマット
-
Crypto (JCE) コンポーネント、URI 構文:
crypto:cryptoOperation:name - PGP データ形式
使用方法と設定の詳細は、上記リンクを参照してください。
3.23.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-crypto</artifactId>
</dependency>
3.23.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.24. CXF リンクのコピーリンクがクリップボードにコピーされました!
Apache CXF を使用して SOAP WebServices を公開するか、CXF WS クライアントを使用して外部 WebServices に接続します。
3.24.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
CXF コンポーネント、URI 構文:
cxf:beanId:address
使用方法と設定の詳細は、上記リンクを参照してください。
3.24.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cxf-soap</artifactId>
</dependency>
3.24.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.24.3.1. 全般 リンクのコピーリンクがクリップボードにコピーされました!
camel-quarkus-cxf-soap は、CXF Extensions for Quarkus プロジェクト (quarkus-cxf) のエクステンションを使用します。
これは、サポートされるユースケースと WS 仕様のセットの大部分が quarkus-cxf によって提供されることを意味します。
== サポートされるエクステンション
現在、次の quarkus-cxf エクステンション のみ がサポートされています。
暗黙的に、camel-quarkus-cxf-soap の推移的な依存関係として、以下がサポートされます。
-
quarkus-cxf -
quarkus-cxf-rt-features-logging
WS-Security またはその他の関連機能が必要な場合は、次のサポート対象のエクステンションを追加できます。
-
quarkus-cxf-rt-ws-security -
quarkus-cxf-services-sts -
quarkus-cxf-xjc-plugins
=== WS-ReliableMessaging
CXF WS-ReliableMessaging の完全なサポートは現在提供されていません。この機能は、バージョン 3.8 ではテクノロジープレビュー機能のままとなります。
サポート対象のユースケースおよび WS 仕様の詳細は、Quarkus CXF の Reference を参照してください。
3.24.3.2. 依存関係の管理 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Apache Camel for Quarkus は、CXF および quarkus-cxf のバージョンを 管理 します。これらのプロジェクトと互換性があるバージョンを選択する必要はありません。
3.24.3.3. クライアント リンクのコピーリンクがクリップボードにコピーされました!
camel-quarkus-cxf-soap (追加の依存関係は不要) を使用すると、CXF クライアントを Camel ルートでプロデューサーとして使用できます。
import org.apache.camel.builder.RouteBuilder;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.context.SessionScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Named;
@ApplicationScoped
public class CxfSoapClientRoutes extends RouteBuilder {
@Override
public void configure() {
/* You can either configure the client inline */
from("direct:cxfUriParamsClient")
.to("cxf://http://localhost:8082/calculator-ws?wsdlURL=wsdl/CalculatorService.wsdl&dataFormat=POJO&serviceClass=org.foo.CalculatorService");
/* Or you can use a named bean produced below by beanClient() method */
from("direct:cxfBeanClient")
.to("cxf:bean:beanClient?dataFormat=POJO");
}
@Produces
@SessionScoped
@Named
CxfEndpoint beanClient() {
final CxfEndpoint result = new CxfEndpoint();
result.setServiceClass(CalculatorService.class);
result.setAddress("http://localhost:8082/calculator-ws");
result.setWsdlURL("wsdl/CalculatorService.wsdl"); // a resource in the class path
return result;
}
}
CalculatorService は以下のようになります。
import jakarta.jws.WebMethod;
import jakarta.jws.WebService;
@WebService(targetNamespace = CalculatorService.TARGET_NS)
public interface CalculatorService {
public static final String TARGET_NS = "http://acme.org/wscalculator/Calculator";
@WebMethod
public int add(int intA, int intB);
@WebMethod
public int subtract(int intA, int intB);
@WebMethod
public int divide(int intA, int intB);
@WebMethod
public int multiply(int intA, int intB);
}
このサービスエンドポイントインターフェイスを実装する quay.io/l2x6/calculator-ws:1.2 コンテナーに対して、このクライアントアプリケーションをテストできます。
$ docker run -p 8082:8080 quay.io/l2x6/calculator-ws:1.2
quarkus-cxf は、@io.quarkiverse.cxf.annotation.CXFClient アノテーションを使用する SOAP クライアントの注入 をサポートします。詳細は、quarkus-cxf ユーザーガイドの SOAP クライアント の章を参照してください。
3.24.3.4. Server リンクのコピーリンクがクリップボードにコピーされました!
camel-quarkus-cxf-soap を使用すると、SOAP エンドポイントを Camel ルートのコンシューマーとして公開できます。このユースケースには、追加の依存関係は必要ありません。
import org.apache.camel.builder.RouteBuilder;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Named;
@ApplicationScoped
public class CxfSoapRoutes extends RouteBuilder {
@Override
public void configure() {
/* A CXF Service configured through a CDI bean */
from("cxf:bean:helloBeanEndpoint")
.setBody().simple("Hello ${body} from CXF service");
/* A CXF Service configured through Camel URI parameters */
from("cxf:///hello-inline?wsdlURL=wsdl/HelloService.wsdl&serviceClass=org.foo.HelloService")
.setBody().simple("Hello ${body} from CXF service");
}
@Produces
@ApplicationScoped
@Named
CxfEndpoint helloBeanEndpoint() {
final CxfEndpoint result = new CxfEndpoint();
result.setServiceClass(HelloService.class);
result.setAddress("/hello-bean");
result.setWsdlURL("wsdl/HelloService.wsdl");
return result;
}
}
これら 2 つのサービスが提供されるパスは、たとえば application.properties で設定できる quarkus.cxf.path 設定プロパティー の値によって異なります。
application.properties
quarkus.cxf.path = /soap-services
この設定を適用すると、http://localhost:8080/soap-services/hello-bean および http://localhost:8080/soap-services/hello-inline で、2 つのサービスにそれぞれアクセスできます。
WSDL には、上記の URL に ?wsdl を追加することでアクセスできます。
他のエクステンションが HTTP エンドポイントを公開しないと 100% 確信できない限り、アプリケーションで quarkus.cxf.path = / を使用しないでください。
quarkus-cxf 2.0.0 より前 (つまり、Red Hat build of Apache Camel for Quarkus 3.0.0 より前)、quarkus.cxf.path のデフォルト値は / でした。このデフォルト値は、他の Quarkus エクステンションがさらなる HTTP エンドポイントの公開を阻止していたため、変更されました。とりわけ、RESTEasy、Vert.x、SmallRye Health ( health エンドポイントは公開されていません) がこの影響を受けていました。
quarkus-cxf は、SOAP エンドポイントを公開する代替方法をサポートします。詳細は、quarkus-cxf ユーザーガイドの SOAP サービス の章を参照してください。
3.24.3.5. 要求および応答のロギング リンクのコピーリンクがクリップボードにコピーされました!
org.apache.cxf.ext.logging.LoggingFeature を使用して、クライアントとサーバーの両方の SOAP メッセージの詳細ロギングを有効にできます。
import org.apache.camel.builder.RouteBuilder;
import org.apache.cxf.ext.logging.LoggingFeature;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.context.SessionScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Named;
@ApplicationScoped
public class MyBeans {
@Produces
@ApplicationScoped
@Named("prettyLoggingFeature")
public LoggingFeature prettyLoggingFeature() {
final LoggingFeature result = new LoggingFeature();
result.setPrettyLogging(true);
return result;
}
@Inject
@Named("prettyLoggingFeature")
LoggingFeature prettyLoggingFeature;
@Produces
@SessionScoped
@Named
CxfEndpoint cxfBeanClient() {
final CxfEndpoint result = new CxfEndpoint();
result.setServiceClass(CalculatorService.class);
result.setAddress("https://acme.org/calculator");
result.setWsdlURL("wsdl/CalculatorService.wsdl");
result.getFeatures().add(prettyLoggingFeature);
return result;
}
@Produces
@ApplicationScoped
@Named
CxfEndpoint helloBeanEndpoint() {
final CxfEndpoint result = new CxfEndpoint();
result.setServiceClass(HelloService.class);
result.setAddress("/hello-bean");
result.setWsdlURL("wsdl/HelloService.wsdl");
result.getFeatures().add(prettyLoggingFeature);
return result;
}
}
org.apache.cxf.ext.logging.LoggingFeature のサポートは、camel-quarkus-cxf-soap 依存関係として io.quarkiverse.cxf:quarkus-cxf-rt-features-logging によって提供されます。アプリケーションに明示的に追加する必要はありません。
3.24.3.6. WS 仕様 リンクのコピーリンクがクリップボードにコピーされました!
サポートされる WS 仕様の範囲は、Quarkus CXF プロジェクトによって提供されます。
camel-quarkus-cxf-soap は、io.quarkiverse.cxf:quarkus-cxf エクステンションを介して、以下の仕様のみをカバーします。
- JAX-WS
- JAXB
- WS-Addressing
- WS-Policy
- MTOM
アプリケーションが WS-Security や WS-Trust などの他の WS 仕様を必要とする場合は、それをカバーする Quarkus CXF 依存関係を追加する必要があります。どの WS 仕様がどの Quarkus CXF エクステンションでカバーされているかを確認するには、Quarkus CXF の Reference ページを参照してください。
3.24.3.7. ツール リンクのコピーリンクがクリップボードにコピーされました!
quarkus-cxf は、以下の 2 つの CXF ツールをラップします。
-
wsdl2Java- WSDL からサービスクラスを生成する 場合 -
java2ws- Java クラスから WSDL を生成する 場合
wsdl2Java が適切に機能するためには、アプリケーションは io.quarkiverse.cxf:quarkus-cxf に直接依存する必要があります。
wsdlvalidator はサポート対象外ですが、application.properties で以下の設定を指定し、wsdl2Java を使用して WSDL を検証できます。
application.properties
quarkus.cxf.codegen.wsdl2java.additional-params = -validate
3.24.3.8. java.net.http.HttpClient を使用する CXF クライアントによる DoS ベクトルの可能性 リンクのコピーリンクがクリップボードにコピーされました!
CXF クライアントが基盤となる HTTP クライアントとして java.net.http.HttpClient を使用している場合、CXF の問題 により、多数のクライアントが作成されると、スレッドが終了しないため、アプリケーションがクラッシュする可能性があります。
この問題は、CXF クライアントがリクエストごとなどに繰り返し作成される場合に、java.net.http.HttpClient で発生します。アプリケーションの存続期間全体を通じてクライアントが維持される場合、この問題は発生しません。
Apache Camel for Quarkus 3.2.0 および Quarkus CXF 2.2.3 以降では、特定の CXF クライアントにおける HTTP クライアント実装の選択は、quarkus.cxf.client.yourClient.http-conduit-factory プロパティーにより制御されます。デフォルトでは、Quarkus CXF によって作成された CXF クライアントは java.net.HttpURLConnection を HTTP クライアントとして使用します。そのため、この問題はデフォルトでは発生しません。この問題は、quarkus.cxf.client.yourClient.http-conduit-factory=HttpClientHTTPConduitFactory を設定すると発生する可能性があります。
3.24.3.8.1. DoS ベクトルの軽減 リンクのコピーリンクがクリップボードにコピーされました!
-
java.net.http.HttpClientでバックアップされた CXF クライアントは、アプリケーションの存続期間中にクライアントが 1 回しか作成されないことが確実な場合に限り使用してください。 -
HC5 や
java.net.HttpURLConnectionなど、他の HTTP クライアント実装でバックアップされた CXF クライアントを使用します。
3.25. Data Format リンクのコピーリンクがクリップボードにコピーされました!
Camel Data Format を通常の Camel コンポーネントとして使用します。
Red Hat build of Apache Camel for Quarkus でサポートされるデータフォーマットの詳細は、サポートされるデータフォーマット を参照してください。
3.25.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Data Format コンポーネント、URI 構文:
dataformat:name:operation
使用方法と設定の詳細は、上記リンクを参照してください。
3.25.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-dataformat</artifactId>
</dependency>
3.26. Dataset リンクのコピーリンクがクリップボードにコピーされました!
Camel アプリケーションの負荷テストおよびソークテスト用のデータを提供します。
3.26.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Dataset コンポーネント、URI 構文:
dataset:name -
DataSet Test コンポーネント、URI 構文:
dataset-test:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.26.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-dataset</artifactId>
</dependency>
3.27. Direct リンクのコピーリンクがクリップボードにコピーされました!
同じ Camel コンテキストから別のエンドポイントを同期的に呼び出します。
3.27.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Direct コンポーネント、URI 構文:
direct:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.27.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-direct</artifactId>
</dependency>
3.28. Elasticsearch リンクのコピーリンクがクリップボードにコピーされました!
Java クライアント API 経由で ElasticSearch にリクエストを送信します。
3.28.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Elasticsearch コンポーネント、URI 構文:
elasticsearch:clusterName
使用方法と設定の詳細は、上記リンクを参照してください。
3.28.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-elasticsearch</artifactId>
</dependency>
3.29. Elasticsearch 低レベル REST クライアント リンクのコピーリンクがクリップボードにコピーされました!
Elasticsearch または OpenSearch でクエリーやその他の操作を実行します (低レベルクライアントを使用します)。
3.29.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Elasticsearch Low level Rest Client コンポーネント、URI 構文:
elasticsearch-rest-client:clusterName
使用方法と設定の詳細は、上記リンクを参照してください。
3.29.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-elasticsearch-rest-client</artifactId>
</dependency>
3.30. FHIR リンクのコピーリンクがクリップボードにコピーされました!
FHIR (Fast Healthcare Interoperability Resources) 規格を使用して、ヘルスケアドメインの情報を交換します。JSON との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。XML との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。
3.30.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
FHIR コンポーネント、URI 構文:
fhir:apiName/methodName - FHIR JSon データフォーマット
- FHIR XML データフォーマット
使用方法と設定の詳細は、上記リンクを参照してください。
3.30.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-fhir</artifactId>
</dependency>
3.30.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.30.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、FHIR コンポーネントと DataFormat のデフォルト値であるため、FHIR バージョン R4 および DSTU3 のみがネイティブモードで有効になっています。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
ネイティブモードで FHIR DSTU2 Specs を有効にします。 |
|
|
|
ネイティブモードで FHIR DSTU2_HL7ORG Specs を有効にします。 |
|
|
|
ネイティブモードで FHIR DSTU2_1 Specs を有効にします。 |
|
|
|
ネイティブモードで FHIR DSTU3 Specs を有効にします。 |
|
|
|
ネイティブモードで FHIR R4 Specs を有効にします。 |
|
|
|
ネイティブモードで FHIR R5 Specs を有効にします。 |
|
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.31. File リンクのコピーリンクがクリップボードにコピーされました!
ファイルの読み取りと書き込みを行います。
3.31.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
File コンポーネント、URI 構文:
file:directoryName
使用方法と設定の詳細は、上記リンクを参照してください。
3.31.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-file</artifactId>
</dependency>
3.31.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.31.3.1. 特定のエンドポイントから消費するコンシューマがクラスタ内で 1 つだけであること リンクのコピーリンクがクリップボードにコピーされました!
同じルートが複数の JVM にデプロイされている場合、このエクステンションを マスターのエクステンション と組み合わせて使用すると便利な場合があります。このようなセットアップでは、キャメルマスター namespace 全体で一度に 1 つのコンシューマーがアクティブになります。
たとえば、以下のルートを複数の JVM にデプロイするとします。
from("master:ns:timer:test?period=100").log("Timer invoked on a single JVM at a time");
以下のようなプロパティーを使用して、ファイルクラスターサービスを有効にすることができます。
quarkus.camel.cluster.file.enabled = true
quarkus.camel.cluster.file-root = target/cluster-folder-where-lock-file-will-be-held
その結果、1 つのコンシューマーが ns camel マスター namespace 全体でアクティブになります。これは、ある時点で、1 つのタイマーだけがすべての JVM 間でエクスチェンジを生成することを意味します。つまり、メッセージは一度に 1 つの JVM で 100 ミリ秒ごとにログに記録されます。
ファイルクラスターサービスは、quarkus.camel.cluster.file.* プロパティーを微調整できます。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
'quarkus.camel.cluster.file.*' 設定に従って、ファイルロッククラスターサービスを自動的に設定するかどうか。 |
|
|
|
クラスターサービス ID (デフォルトは null)。 |
| |
|
ルートパス (デフォルトは null)。 |
| |
|
サービス検索の順序/優先度 (デフォルトは 2147482647)。 |
| |
|
ロックの取得を開始するまでの待機時間 (デフォルトは 1000 ミリ秒)。 |
| |
|
ロックの取得を試みるまでの待機時間 (デフォルトは 10000 ミリ秒)。 |
| |
|
サービスに関連付けられたカスタム属性 (デフォルトは空のマップ)。 |
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.32. FTP リンクのコピーリンクがクリップボードにコピーされました!
SFTP、FTP、または SFTP サーバーとの間でファイルをアップロードおよびダウンロードする
3.32.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
FTP コンポーネント、URI 構文:
ftp:host:port/directoryName -
FTPS コンポーネント、URI 構文:
ftps:host:port/directoryName -
SFTP コンポーネント、URI 構文:
sftp:host:port/directoryName
使用方法と設定の詳細は、上記リンクを参照してください。
3.32.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-ftp</artifactId>
</dependency>
3.33. Google BigQuery リンクのコピーリンクがクリップボードにコピーされました!
SQL クエリーまたは Google Client Services API を使用して Google Cloud BigQuery サービスにアクセスする
3.33.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Google BigQuery コンポーネント、URI 構文:
google-bigquery:projectId:datasetId:tableId -
Google BigQuery Standard SQL コンポーネント、URI 構文:
google-bigquery-sql:projectId:queryString
使用方法と設定の詳細は、上記リンクを参照してください。
3.33.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-google-bigquery</artifactId>
</dependency>
3.33.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで google-bigquery-sql を使用してクラスパスから SQL スクリプトを読み取る場合は、それらが quarkus.native.resources.includes 設定プロパティーを介してネイティブイメージに追加されていることを確認する必要があります。詳細は、Quarkus のドキュメント を確認してください。
3.34. Google Pubsub リンクのコピーリンクがクリップボードにコピーされました!
Google Cloud Platform PubSub サービスとの間でメッセージを送受信します。
3.34.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Google Pubsub コンポーネント、URI 構文:
google-pubsub:projectId:destinationName
使用方法と設定の詳細は、上記リンクを参照してください。
3.34.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-google-pubsub</artifactId>
</dependency>
3.34.3. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、メッセージ本文が String または byte[] 以外の場合は常に、Camel PubSub コンポーネントは ObjectOutputStream を介して JDK オブジェクトのシリアル化を使用します。
このようなシリアル化は GraalVM ではまだサポートされていないため、このエクステンションはカスタムの Jackson ベースのシリアライザーを提供して、複雑なメッセージペイロードを JSON としてシリアル化します。
ペイロードにバイナリーデータが含まれている場合は、カスタムの Jackson シリアライザー/デシリアライザーを作成して処理する必要があります。これを行う方法は、Quarkus Jackson ガイド を参照してください。
3.35. gRPC リンクのコピーリンクがクリップボードにコピーされました!
gRPC エンドポイントを公開し、外部 gRPC エンドポイントにアクセスします。
3.35.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
gRPC コンポーネント、URI 構文:
grpc:host:port/service
使用方法と設定の詳細は、上記リンクを参照してください。
3.35.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-grpc</artifactId>
</dependency>
3.35.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.35.3.1. Protobuf で生成されるコード リンクのコピーリンクがクリップボードにコピーされました!
Camel Quarkus gRPC は、.proto ファイルの gRPC サービススタブを生成できます。Maven を使用する場合は、プロジェクトビルドで quarkus-maven-plugin の generate-code ゴールが有効になっていることを確認してください。
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
この設定を使用すると、サービス定義とメッセージ定義を src/main/proto ディレクトリーに配置でき、quarkus-maven-plugin が .proto ファイルからコードを生成します。
3.35.3.1.1. インポートによる proto ファイルのスキャン リンクのコピーリンクがクリップボードにコピーされました!
プロトコルバッファー仕様は、proto ファイルをインポートする方法を提供します。設定プロパティーの quarkus.camel.grpc.codegen.scan-for-imports プロパティーを application.properties に追加することで、スキャンする依存関係の範囲を制御できます。利用可能なオプションの概要を以下に示します。
-
all- すべての依存関係をスキャンします。 -
none- 依存関係のスキャンを無効にします。src/main/protoまたはsrc/test/protoで定義された proto 定義のみを使用します。 -
groupId1:artifactId1,groupId2:artifactId2-groupIdおよびartifactIdリストに一致する依存関係のみをスキャンします。
デフォルト値は com.google.protobuf:protobuf-java です。
3.35.3.1.2. 依存関係からの proto ファイルのスキャン リンクのコピーリンクがクリップボードにコピーされました!
複数の依存関係間で共有されている proto ファイルがある場合は、設定プロパティー quarkus.camel.grpc.codegen.scan-for-proto を application.properties に追加することで、そのファイルの gRPC サービススタブを生成できます。
まず、proto ファイルを含むアーティファクトの依存関係をプロジェクトに追加します。次に、proto ファイルの依存関係スキャンを有効にします。
quarkus.camel.grpc.codegen.scan-for-proto=org.my.groupId1:my-artifact-id-1,org.my.groupId2:my-artifact-id-2
設定プロパティーを使用して、特定の proto ファイルを依存関係スキャンに追加または除外することができます。
設定プロパティー名の接尾辞は、追加/除外を設定する依存関係の Maven groupId/artifactId です。パスは、依存関係に含まれる proto ファイルのクラスパスの場所への相対パスです。パスは、proto ファイルへの明示的なパス、または複数のファイルを追加/除外する glob パターンとして指定できます。
quarkus.camel.grpc.codegen.scan-for-proto-includes."<groupId>\:<artifactId>"=foo/**,bar/**,baz/a-proto.proto
quarkus.camel.grpc.codegen.scan-for-proto-excludes."<groupId>\:<artifactId>"=foo/private/**,baz/another-proto.proto
プロパティーキー内の : 文字は \ でエスケープする必要があります。
3.35.3.2. ネイティブモードでのクラスパスリソースへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
gRPC コンポーネントには、リソースをクラスパスから解決するさまざまなオプションがあります。
-
keyCertChainResource -
keyResource -
serviceAccountResource -
trustCertCollectionResource
これらのオプションをネイティブモードで使用する場合は、そのようなリソースがネイティブイメージに含まれていることを確認する必要があります。
これは、設定プロパティー quarkus.native.resources.includes を application.properties に追加することで実現できます。たとえば、SSL/TLS キーと証明書を含めるには、次のように指定します。
quarkus.native.resources.includes = certs/*.pem,certs.*.key
3.35.4. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
3.35.4.1. Quarkus gRPC との統合はサポート対象外 リンクのコピーリンクがクリップボードにコピーされました!
現時点では、Camel Quarkus gRPC と Quarkus gRPC の統合はサポートされていません。クラスパスに camel-quarkus-grpc と quarkus-grpc エクステンションの両方の依存関係がある場合、アプリケーションをコンパイルすると、ビルド時に問題が発生する可能性があります。
3.35.5. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
|
|
|
|
Camel Quarkus gRPC のコード生成が、.proto ファイルのアプリケーションの依存関係をスキャンして、そのファイルから Java スタブを生成できます。このプロパティーは、スキャンする依存関係の範囲を設定します。適用可能な値: - none - デフォルト - 依存関係をスキャンしない - スキャンする groupId:artifactId コーディネートのコンマ区切りのリスト - all - すべての依存関係をスキャンする |
|
|
|
Camel Quarkus gRPC のコード生成が、このアプリケーションの proto によってインポートできる .proto ファイルの依存関係をスキャンできます。適用可能な値: - none - デフォルト - 依存関係をスキャンしない - スキャンする groupId:artifactId コーディネートのコンマ区切りリスト - all - すべての依存関係をスキャンする (デフォルトは com.google.protobuf:protobuf-java) |
|
|
|
パッケージパスまたはファイル glob パターンは、追加対象として考慮すべき .proto ファイルを含む依存関係ごとに追加します。 |
| |
|
パッケージパスまたはファイル glob パターンは、除外対象として考慮すべき .proto ファイルを含む依存関係ごとに追加します。 |
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.36. Gson リンクのコピーリンクがクリップボードにコピーされました!
Gson を使用して、POJO を JSON に、およびその逆にマーシャリングします。
3.36.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.36.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-gson</artifactId>
</dependency>
3.36.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.36.3.1. ネイティブモードでのオブジェクトのマーシャリング/アンマーシャリング リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードでオブジェクトをマーシャリングまたはアンマーシャリングする場合、シリアライズされたクラスはすべて リフレクションのために登録 する必要があります。そのため、GsonDataFormat.setUnmarshalType(…)、GsonDataFormat.setUnmarshalTypeName(…)、さらに GsonDataFormat.setUnmarshalGenericType(…) を使用する場合は、アンマーシャリングタイプとサブフィールドタイプをリフレクション用に登録する必要があります。この インテグレーションテスト で実際の例を参照してください。
3.37. HL7 リンクのコピーリンクがクリップボードにコピーされました!
HL7 MLLP コーデックを使用して、HL7 (Health Care) モデルオブジェクトをマーシャリングおよびアンマーシャリングします。
3.37.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.37.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-hl7</artifactId>
</dependency>
3.37.3. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
MLLP と TCP を使用する場合には、Netty が Hl7 MLLP リスナーを実行する唯一のサポートされる手段です。現在、GraalVM ネイティブサポートがないため、Mina はサポートされません。
HL7MLLPNettyEncoderFactory および HL7MLLPNettyDecoderFactory コーデックのオプションのサポートは、プロジェクト pom.xml の依存関係を camel-quarkus-netty に追加することで取得できます。
3.38. HTTP リンクのコピーリンクがクリップボードにコピーされました!
Apache HTTP Client 5.x を使用して、外部の HTTP サーバーにリクエストを送信します。
3.38.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
HTTP コンポーネント、URI 構文:
http://httpUri -
HTTPS (Secure) コンポーネント、URI 構文:
https://httpUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.38.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-http</artifactId>
</dependency>
3.38.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.38.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
- アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
3.39. Infinispan リンクのコピーリンクがクリップボードにコピーされました!
Infinispan の分散キー/値のストアとデータグリッドの読み取りと書き込みを行います。
3.39.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Infinispan コンポーネント、URI 構文:
infinispan:cacheName
使用方法と設定の詳細は、上記リンクを参照してください。
3.39.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-infinispan</artifactId>
</dependency>
3.39.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.39.3.1. Infinispan クライアント設定 リンクのコピーリンクがクリップボードにコピーされました!
該当する Camel Infinispan コンポーネントおよびエンドポイントオプションで Infinispan クライアントを設定するか、Quarkus Infinispan エクステンション設定プロパティー を使用できます。
Quarkus Infinispan 設定プロパティーを使用することを選択した場合は、Camel Infinispan コンポーネントで検出できるようにするために、RemoteCacheManager のインジェクションポイントを 追加する必要がある ことに注意してください。以下に例を示します。
public class Routes extends RouteBuilder {
// Injects the default unnamed RemoteCacheManager
@Inject
RemoteCacheManager cacheManager;
// If configured, injects an optional named RemoteCacheManager
@Inject
@InfinispanClientName("myNamedClient")
RemoteCacheManager namedCacheManager;
@Override
public void configure() {
// Route configuration here...
}
}
3.39.3.2. ネイティブモードの Camel Infinispan InfinispanRemoteAggregationRepository リンクのコピーリンクがクリップボードにコピーされました!
InfinispanRemoteAggregationRepository をネイティブモードで使用することを選択した場合は、ネイティブシリアライゼーションサポートを有効 にする必要があります。
3.40. Avro Jackson リンクのコピーリンクがクリップボードにコピーされました!
Jackson を使用して、POJO を Avro にマーシャリングし、その逆も行います。
3.40.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.40.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jackson-avro</artifactId>
</dependency>
3.41. Protobuf Jackson リンクのコピーリンクがクリップボードにコピーされました!
Jackson を使用して、POJO を Protobuf にマーシャリングし、その逆も行います。
3.41.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.41.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jackson-protobuf</artifactId>
</dependency>
3.42. Jackson リンクのコピーリンクがクリップボードにコピーされました!
Jackson を使用して、POJO を JSON にマーシャリングし、その逆も行います。
3.42.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.42.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jackson</artifactId>
</dependency>
3.42.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.42.3.1. Jackson ObjectMapper の設定 リンクのコピーリンクがクリップボードにコピーされました!
JacksonDataFormat が使用する ObjectMapper を設定するには、いくつかの方法があります。これらの概要を以下に示します。
3.42.3.1.1. JacksonDataFormat によって内部的に作成された ObjectMapper リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、JacksonDataFormat は独自の ObjectMapper を作成し、DataFormat のさまざまな設定オプションを使用して、追加の Jackson モジュール、きれいな印刷、およびその他の機能を設定します。
3.42.3.1.2. JacksonDataFormat のカスタム ObjectMapper リンクのコピーリンクがクリップボードにコピーされました!
次のように、カスタム ObjectMapper インスタンスを JacksonDataFormat に渡すことができます。
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
public class Routes extends RouteBuilder {
public void configure() {
ObjectMapper mapper = new ObjectMapper();
JacksonDataFormat dataFormat = new JacksonDataFormat();
dataFormat.setObjectMapper(mapper);
// Use the dataFormat instance in a route definition
from("direct:my-direct").marshal(dataFormat)
}
}
3.42.3.1.3. JacksonDataFormat での Quarkus Jackson ObjectMapper の使用 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus Jackson エクステンションは、JacksonDataFormat によって検出できる ObjectMapper CDI Bean を公開します。
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
public class Routes extends RouteBuilder {
public void configure() {
JacksonDataFormat dataFormat = new JacksonDataFormat();
// Make JacksonDataFormat discover the Quarkus Jackson `ObjectMapper` from the Camel registry
dataFormat.setAutoDiscoverObjectMapper(true);
// Use the dataFormat instance in a route definition
from("direct:my-direct").marshal(dataFormat)
}
}
Camel REST DSL で JSON バインディングモードを使用していて、Quarkus Jackson ObjectMapper を使用したい場合は、次のように実現できます。
import org.apache.camel.builder.RouteBuilder;
@ApplicationScoped
public class Routes extends RouteBuilder {
public void configure() {
restConfiguration().dataFormatProperty("autoDiscoverObjectMapper", "true");
// REST definition follows...
}
}
ObjectMapperCustomizer を使用して、Quarkus ObjectMapper でカスタマイズを実行できます。
import com.fasterxml.jackson.databind.ObjectMapper;
import io.quarkus.jackson.ObjectMapperCustomizer;
@Singleton
public class RegisterCustomModuleCustomizer implements ObjectMapperCustomizer {
public void customize(ObjectMapper mapper) {
mapper.registerModule(new CustomModule());
}
}
Quarkus ObjectMapper を @Inject して、JacksonDataFormat に渡すこともできます。
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
@ApplicationScoped
public class Routes extends RouteBuilder {
@Inject
ObjectMapper mapper;
public void configure() {
JacksonDataFormat dataFormat = new JacksonDataFormat();
dataFormat.setObjectMapper(mapper);
// Use the dataFormat instance in a route definition
from("direct:my-direct").marshal(dataFormat)
}
}
3.43. JacksonXML リンクのコピーリンクがクリップボードにコピーされました!
Jackson の XMLMapper エクステンションを使用して、XML ペイロードを POJO にアンマーシャリングし、戻します。
3.43.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.43.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jacksonxml</artifactId>
</dependency>
3.44. Jasypt リンクのコピーリンクがクリップボードにコピーされました!
Jasypt を使用したセキュリティー
3.44.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.44.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jasypt</artifactId>
</dependency>
3.44.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
Camel Quarkus での Jasypt の設定は、設定プロパティー によって決まります。
設定プロパティー quarkus.camel.jasypt.password を使用して、Jasypt 復号化のマスターパスワードを提供することが、最低限必要となります。
以下に説明する quarkus.camel.jasypt オプションを使用して、暗号化アルゴリズムやその他の Jasypt 設定を選択できます。
デフォルトでは、Camel JasyptPropertiesParser または PropertiesComponent を設定するためにカスタムコードを記述する必要はありません。これは自動的に行われます。
application.properties に追加された Camel 設定プロパティーはすべて、Jasypt で保護できます。値の暗号化は、JBang で実行できるユーティリティーがあります。
jbang org.apache.camel:camel-jasypt:{camel-version} -c encrypt -p secret-password -i "Some secret content"
デフォルト (PBEWithMD5AndDES) とは異なる Jasypt アルゴリズムを使用する場合は、暗号化で使用する正しいアルゴリズムを設定するために、-a (アルゴリズム)、-riga (IV ジェネレーターアルゴリズム)、および -rsga (Salt ジェネレーターアルゴリズム) 引数を指定する必要があります。指定しない場合、アプリケーションは設定値を復号化できません。
開発モードで実行している場合は、Dev UI を開き、Camel Jasypt ペインの 'ユーティリティー' リンクをクリックします。次に、'Decrypt' アクションまたは 'Encrypt' アクションのいずれかを選択し、テキストを入力して送信ボタンをクリックします。アクションの結果は、クリップボードにコピーするためのボタンとともに出力されます。
設定プロパティーは、ENC() で囲まれた暗号化された値を使用して application.properties に追加できます。以下はその例です。
my.secret = ENC(BoDSRQfdBME4V/AcugPOkaR+IcyKufGz)
Camel ルートでは、標準のプレースホルダー構文を使用してプロパティー名を参照でき、その値は復号化されます。
public class MySecureRoute extends RouteBuilder {
@Override
public void configure() {
from("timer:tick?period=5s")
.to("{{my.secret}}");
}
}
Camel では、プロパティー値の末尾に .secret を付けることで、セキュリティー上の機密設定をマスクする機能を使用できます。また、camel.main.autoConfigurationLogSummary = false の設定で、起動設定の概要を無効にすることもできます。
3.44.3.1. 暗号化された設定の注入 リンクのコピーリンクがクリップボードにコピーされました!
@ConfigProperty アノテーションを使用して、暗号化された設定を Camel ルートまたは CDI Bean に注入できます。
@ApplicationScoped
public class MySecureRoute extends RouteBuilder {
@ConfigInject("my.secret")
String mySecret;
@Override
public void configure() {
from("timer:tick?period=5s")
.to(mySecret);
}
}
3.44.3.1.1. 代替設定ソースの保護 リンクのコピーリンクがクリップボードにコピーされました!
シークレットの設定を application.properties とは別のファイルに保存したい場合は、quarkus.config.locations 設定オプションを使用して追加の設定ファイルを指定できます。
ネイティブモードでは、追加の設定ファイルリソースパスも quarkus.native.resources.includes に追加する必要があります。
3.44.3.1.2. Jasypt 設定の細かい制御 リンクのコピーリンクがクリップボードにコピーされました!
デフォルト設定よりも細かく Jasypt 設定を制御する必要がある場合は、次のオプションを使用できます。
3.44.3.1.2.1. JasyptConfigurationCustomizer リンクのコピーリンクがクリップボードにコピーされました!
Jasypt EnvironmentStringPBEConfig をカスタマイズするには、JasyptConfigurationCustomizer クラスを実装します。
package org.acme;
import org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
import org.jasypt.iv.RandomIvGenerator;
import org.jasypt.salt.RandomSaltGenerator;
public class JasyptConfigurationCustomizer implements JasyptConfigurationCustomizer {
public void customize(EnvironmentStringPBEConfig config) {
// Custom algorithms
config.setAlgorithm("PBEWithHmacSHA256AndAES_256");
config.setSaltGenerator(new RandomSaltGenerator("PKCS11"));
config.setIvGenerator(new RandomIvGenerator("PKCS11"));
// Additional customizations...
}
}
application.properties に、quarkus.camel.jasypt.configuration-customizer-class-name 設定プロパティーを追加します。
quarkus.camel.jasypt.configuration-customizer-class-name = org.acme.MyJasyptEncryptorCustomizer
3.44.3.1.2.2. 自動 Jasypt 設定の無効化 リンクのコピーリンクがクリップボードにコピーされました!
'classic' Java DSL 方式を使用して Camel Jasypt を設定する場合は、quarkus.camel.jasypt.enabled = false で自動設定を無効にできます。
これにより、Camel JasyptPropertiesParser と PropertiesComponent の手動設定が可能になります。
このモードでは、@ConfigProperty アノテーションを使用して暗号化された設定プロパティーを注入することはできません。
import org.apache.camel.CamelContext;
import org.apache.camel.component.jasypt.JasyptPropertiesParser;
import org.apache.camel.component.properties.PropertiesComponent;
public class MySecureRoute extends RouteBuilder {
@Override
public void configure() {
JasyptPropertiesParser jasypt = new JasyptPropertiesParser();
jasypt.setPassword("secret");
PropertiesComponent component = (PropertiesComponent) getContext().getPropertiesComponent();
jasypt.setPropertiesComponent(component);
component.setPropertiesParser(jasypt);
from("timer:tick?period=5s")
.to("{{my.secret}}");
}
}
PropertiesComponent で setLocation(…) を呼び出し、classpath: 接頭辞を使用してカスタム設定ファイルの場所を指定する場合、そのファイルを quarkus.native.resources.includes に追加してネイティブモードでのロードを可能にする必要があります。
3.44.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
このオプションを false に設定すると、Quarkus SmallRye 設定との Jasypt 統合が無効になります。ただし、JasyptPropertiesParser と PropertiesComponent を手動で設定する '従来' の方法で、Camel を使用して Jasypt を手動で設定することもできます。詳細は、使用方法のセクションを参照してください。 |
|
|
|
復号化に使用するアルゴリズム。 |
|
|
|
Jasypt が設定値を復号化するために使用するマスターパスワード。このオプションは、マスターパスワードの検索動作に影響する接頭辞をサポートします。
|
| |
|
指定されたアルゴリズムを使用して、RandomIvGenerator で Jasypt StandardPBEStringEncryptor を設定します。 |
|
|
|
指定されたアルゴリズムを使用して、RandomSaltGenerator で Jasypt StandardPBEStringEncryptor を設定します。 |
|
|
|
org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer 実装の完全修飾クラス名。これにより、Jasypt 設定を完全に制御するオプション機能が提供されます。 |
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.44.5. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
3.44.6. Jasypt: quarkus.camel.jasypt.enabled=false が機能しない リンクのコピーリンクがクリップボードにコピーされました!
camel-quarkus-jasypt エクステンションには、システムプロパティーまたは環境変数から提供された設定プロパティーを解決する際に問題があります。たとえば、-Dquarkus.camel.jasypt.enabled=false または -Dquarkus.camel.jasypt.password=my-password を渡しても機能しません。
この問題を回避するには、application.properties で quarkus.camel.jasypt.enabled を指定します。
jasypt を無効にする
quarkus.camel.jasypt.enabled = false
システムプロパティーまたは環境変数から quarkus.camel.jasypt.password をオーバーライドするには、application.properties を次のように設定します。
application.properties にパスワードをハードコードするか
ハードコードされたパスワード
quarkus.camel.jasypt.password = my-password
あるいは、'sys' または 'sysenv' 接頭辞を使用して、システムプロパティーまたは環境変数からパスワードを解決することもできます。
sys 接頭辞付きのパスワード
quarkus.camel.jasypt.password = sys:jasyptPassword
次に、希望するパスワードを使用してアプリケーションを構築します。
パスワードを使用したビルド
mvn clean package -DjasyptPassword=my-password
そして、アプリケーション JAR を実行するとき。
アプリケーション JAR
java -DjasyptPassword=my-password -jar target/quarkus-app/quarkus-run.jar
ネイティブモードの場合:
ネイティブモード
target/my-native-application-runner -DjasyptPassword=my-password
3.45. Java jOOR DSL リンクのコピーリンクがクリップボードにコピーされました!
実行時の Java ルート定義の解析のサポート
3.45.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.45.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-java-joor-dsl</artifactId>
</dependency>
3.45.3. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
コンポーネントによってコンパイルされるクラスに追加されたアノテーションは、Quarkus によって無視されます。このエクステンションで部分的にサポートされている唯一のアノテーションは、ネイティブモードのリフレクションの設定を容易にするアノテーション RegisterForReflection です。ただし、要素 registerFullHierarchy はサポートされていないことに注意してください。
3.46. JAXB リンクのコピーリンクがクリップボードにコピーされました!
JAXB2 XML マーシャリング標準を使用して、XML ペイロードを POJO に、およびその逆にアンマーシャリングします。
3.46.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.46.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jaxb</artifactId>
</dependency>
3.46.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.46.3.1. 非 JAXB アノテーション付きクラスのネイティブモード ObjectFactory インスタンス化 リンクのコピーリンクがクリップボードにコピーされました!
JAXB アノテーションを持たない POJO クラスをインスタンス化するために、カスタム ObjectFactory で JAXB マーシャル操作を行う場合、それらの POJO クラスをネイティブモードでインスタンス化するために、リフレクションに登録する必要があります。たとえば、@RegisterForReflection アノテーションまたは設定プロパティー quarkus.camel.native.reflection.include-patterns を介した場合です。
詳細は、ネイティブモード のユーザーガイドを参照してください。
3.47. JDBC リンクのコピーリンクがクリップボードにコピーされました!
SQL および JDBC を通じてデータベースにアクセスします。
3.47.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
JDBC コンポーネント、URI 構文:
jdbc:dataSourceName
使用方法と設定の詳細は、上記リンクを参照してください。
3.47.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jdbc</artifactId>
</dependency>
3.47.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.47.3.1. DataSource の設定 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、DataSource のサポートに Quarkus Agroal を活用します。DataSource の設定は、設定プロパティーを介して実行できます。JDBC エンドポイント URI で参照できるように、データソースの名前は明示的に付けることを推奨します。たとえば、to("jdbc:camel") のようになります。
quarkus.datasource.camel.db-kind=postgresql
quarkus.datasource.camel.username=your-username
quarkus.datasource.camel.password=your-password
quarkus.datasource.camel.jdbc.url=jdbc:postgresql://localhost:5432/your-database
quarkus.datasource.camel.jdbc.max-size=16
データソースに名前を付けないことを選択した場合は、to("jdbc:default") のようにエンドポイントを定義することでデフォルトの DataSource を解決できます。
3.47.3.1.1. Quarkus Dev Services によるゼロ設定 リンクのコピーリンクがクリップボードにコピーされました!
開発モードとテストモードでは、Configuration Free Databases を利用できます。必要なのは、ルート内でデフォルトのデータベースを参照することだけです。たとえば、to("jdbc:default") のようになります。
3.48. Jira リンクのコピーリンクがクリップボードにコピーされました!
JIRA 問題トラッカーと対話します。
3.48.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Jira コンポーネント、URI 構文:
jira:type
使用方法と設定の詳細は、上記リンクを参照してください。
3.48.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jira</artifactId>
</dependency>
camel-quarkus-jira エクステンションを使用するアプリケーションでは、Maven の settings.xml ファイルまたはアプリケーションプロジェクトの pom.xml ファイルのいずれかで、追加の Maven リポジトリー https://packages.atlassian.com/maven-external/ を設定する必要があります。
3.48.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.49. JMS リンクのコピーリンクがクリップボードにコピーされました!
JMS Queue または Topic との間でメッセージを送受信します。
3.49.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
JMS コンポーネント、URI 構文:
jms:destinationType:destinationName
使用方法と設定の詳細は、上記リンクを参照してください。
3.49.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jms</artifactId>
</dependency>
3.49.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.49.3.1. org.w3c.dom.Node を使用したメッセージマッピング リンクのコピーリンクがクリップボードにコピーされました!
Camel JMS コンポーネントは、jakarta.jms.Message および org.apache.camel.Message 間のメッセージマッピングをサポートします。Camel メッセージ本文タイプ org.w3c.dom.Node を変換する場合は、camel-quarkus-xml-jaxp エクステンションがクラスパスに存在することを確認する必要があります。
3.49.3.2. jakarta.jms.ObjectMessage のネイティブモードのサポート リンクのコピーリンクがクリップボードにコピーされました!
JMS メッセージペイロードを jakarta.jms.ObjectMessage として送信する場合、シリアル化のために登録する関連クラスに @RegisterForReflection(serialization = true) でアノテーションを付ける必要があります。
このエクステンションは、quarkus.camel.native.reflection.serialization-enabled = true を自動的に設定します。詳細は、ネイティブモードのユーザーガイド を参照してください。
3.49.3.3. 接続プーリングと X/Open XA 分散トランザクションのサポート リンクのコピーリンクがクリップボードにコピーされました!
camel-quarkus-jms コンポーネントで接続プールを使用するには、io.quarkiverse.artemis:quarkus-artemis および io.quarkiverse.messaginghub:quarkus-pooled-jms を pom.xml に追加し、次の設定を指定する必要があります。
quarkus.pooled-jms.max-connections = 8
quarkus-pooled-jms エクステンションを使用して、JMS 接続のプーリングと XA のサポートを得ることができます。詳細は、quarkus-pooled-jms エクステンションドキュメントを参照してください。現在、このエクステンションは、quarkus-artemis-jms、quarkus-qpid-jms、および ibmmq-client で使用できます。依存関係を pom.xml に追加するだけです。
<dependency>
<groupId>io.quarkiverse.messaginghub</groupId>
<artifactId>quarkus-pooled-jms</artifactId>
</dependency>
プーリングはデフォルトで有効になっています。
プーリング接続では、clientID と durableSubscriptionName はサポートされていません。プールから reused された接続で setClientID が呼び出されると、IllegalStateException が出力されます。次のようなエラーメッセージが表示されます。Cause: setClientID can only be called directly after the connection is created
XA を有効にするには、quarkus-narayana-jta エクステンションを追加する必要があります。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-narayana-jta</artifactId>
</dependency>
続いて、次の設定を application.properties に追加します。
quarkus.pooled-jms.transaction=xa
quarkus.transaction-manager.enable-recovery=true
XA サポートは、quarkus-artemis-jms および ibmmq-client でのみ利用可能です。
トランザクションリカバリー を有効にすることを強く推奨します。
現在、ibmmq-client 用の quarkus エクステンションは存在しないため、独自にカスタム ConnectionFactory を作成してラップする必要があります。
以下に例を示します。
ラッパーの例: ibmmq-client 用の ConnectionFactory
@Produces
public ConnectionFactory createXAConnectionFactory(PooledJmsWrapper wrapper) {
MQXAConnectionFactory mq = new MQXAConnectionFactory();
try {
mq.setHostName(ConfigProvider.getConfig().getValue("ibm.mq.host", String.class));
mq.setPort(ConfigProvider.getConfig().getValue("ibm.mq.port", Integer.class));
mq.setChannel(ConfigProvider.getConfig().getValue("ibm.mq.channel", String.class));
mq.setQueueManager(ConfigProvider.getConfig().getValue("ibm.mq.queueManagerName", String.class));
mq.setTransportType(WMQConstants.WMQ_CM_CLIENT);
mq.setStringProperty(WMQConstants.USERID,
ConfigProvider.getConfig().getValue("ibm.mq.user", String.class));
mq.setStringProperty(WMQConstants.PASSWORD,
ConfigProvider.getConfig().getValue("ibm.mq.password", String.class));
} catch (Exception e) {
throw new RuntimeException("Unable to create new IBM MQ connection factory", e);
}
return wrapper.wrapConnectionFactory(mq);
}
ibmmq-client を使用してメッセージを消費し、XA を有効にする場合は、次のように camel ルートで TransactionManager を設定する必要があります。
@Inject
TransactionManager transactionManager;
@Override
public void configure() throws Exception {
from("jms:queue:DEV.QUEUE.XA?transactionManager=#jtaTransactionManager");
}
@Named("jtaTransactionManager")
public PlatformTransactionManager getTransactionManager() {
return new JtaTransactionManager(transactionManager);
}
そうでない場合は、MQRC_SYNCPOINT_NOT_AVAILABLE のような例外が発生します。
ibmmq-client を使用してトランザクションをロールバックすると、次のような WARN メッセージが表示されます。
WARN [com.arj.ats.jta] (executor-thread-1) ARJUNA016045: attempted rollback of < formatId=131077, gtrid_length=35, bqual_length=36, tx_uid=0:ffffc0a86510:aed3:650915d7:16, node_name=quarkus, branch_uid=0:ffffc0a86510:aed3:650915d7:1f, subordinatenodename=null, eis_name=0 > (com.ibm.mq.jmqi.JmqiXAResource@79786dde) failed with exception code XAException.XAER_NOTA: javax.transaction.xa.XAException: The method 'xa_rollback' has failed with errorCode '-4'.
これを無視して、MQ がトランザクションの作業を破棄したと想定することができます。詳細は、Red Hat ナレッジベース を参照してください。
3.49.4. ネイティブモードの transferException オプション リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
3.50. JPA リンクのコピーリンクがクリップボードにコピーされました!
Java Persistence API (JPA) を使用して、データベースから Java オブジェクトを保存し、取得します。
3.50.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
JPA コンポーネント、URI 構文:
jpa:entityType
使用方法と設定の詳細は、上記リンクを参照してください。
3.50.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jpa</artifactId>
</dependency>
3.50.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、Quarkus Hibernate ORM を活用して、Hibernate 経由で JPA 実装を提供します。
Hibernate とデータソースを設定する方法は、Quarkus Hibernate ORM のドキュメントを参照してください。
また、Quarkus TX API を活用して TransactionStrategy 実装を提供します。
単一の永続ユニットが使用される場合、Camel Quarkus JPA エクステンションは、自動的に JPA コンポーネントを EntityManagerFactory および TransactionStrategy で設定します。
3.50.3.1. JpaMessageIdRepository の設定 リンクのコピーリンクがクリップボードにコピーされました!
CDI コンテナーの EntityManagerFactory と TransactionStrategy を使用して、JpaMessageIdRepository を設定する必要があります。
@Inject
EntityManagerFactory entityManagerFactory;
@Inject
TransactionStrategy transactionStrategy;
from("direct:idempotent")
.idempotentConsumer(
header("messageId"),
new JpaMessageIdRepository(entityManagerFactory, transactionStrategy, "idempotentProcessor"));
spring-orm 依存関係が除外されるため、sharedEntityManager、transactionManager などの一部のオプションはサポートされません。
3.51. JSLT リンクのコピーリンクがクリップボードにコピーされました!
JSLT を使用して JSON ペイロードをクエリーまたは変換します。
3.51.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
JSLT コンポーネント、URI 構文:
jslt:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.51.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jslt</artifactId>
</dependency>
3.51.3. ネイティブモードの allowContextMapAll オプション リンクのコピーリンクがクリップボードにコピーされました!
allowContextMapAll オプションはネイティブモードではサポートされていません。これは、CamelContext や Exchange などのセキュリティーに敏感な Camel コアクラスへのリフレクティブアクセスが必要なためです。これはセキュリティーリスクとみなされるため、この機能へのアクセスはデフォルトでは提供されません。
3.51.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.51.4.1. ネイティブモードでクラスパスから JSLT テンプレートをロードする リンクのコピーリンクがクリップボードにコピーされました!
通常、このコンポーネントはクラスパスからテンプレートをロードします。ネイティブモードでも機能させるには、quarkus.native.resources.includes プロパティーを使用して、テンプレートファイルをネイティブ実行可能ファイルに明示的に埋め込む必要があります。
たとえば、以下のルートは、transformation.json という名前のクラスパスリソースから JSLT スキーマを読み込みます。
from("direct:start").to("jslt:transformation.json");
これら (.json ファイルに保存されている可能性のある他のテンプレート) をネイティブイメージに含めるには、application.properties ファイルに次のようなものを追加する必要があります。
quarkus.native.resources.includes = *.json
3.51.4.2. ネイティブモードでの JSLT 関数の使用 リンクのコピーリンクがクリップボードにコピーされました!
camel-quarkus の JSLT 関数をネイティブモードで使用する場合、関数をホストするクラスを リフレクションに登録 する必要があります。ターゲット関数を登録できない場合、以下のようにスタブを書いてしまうことがあります。
@RegisterForReflection
public class MathFunctionStub {
public static double pow(double a, double b) {
return java.lang.Math.pow(a, b);
}
}
ターゲット関数 Math.pow(…) は、以下のようにコンポーネントに登録できる MathFunctionStub クラスを介してアクセスできるようになりました。
@Named
JsltComponent jsltWithFunction() throws ClassNotFoundException {
JsltComponent component = new JsltComponent();
component.setFunctions(singleton(wrapStaticMethod("power", "org.apache.cq.example.MathFunctionStub", "pow")));
return component;
}
3.52. JSON Path リンクのコピーリンクがクリップボードにコピーされました!
JSON メッセージのボディーに対して、JSONPath 式を評価します。
3.52.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.52.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jsonpath</artifactId>
</dependency>
3.53. JTA リンクのコピーリンクがクリップボードにコピーされました!
Java Transaction API (JTA) および Narayana トランザクションマネージャーを使用して、Camel ルートをトランザクションに含めます。
3.53.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.53.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jta</artifactId>
</dependency>
3.53.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ルーターで transacted() EIP を使用する必要がある場合に追加する必要があります。これは、Quarkus の narayana-jta エクステンションによって提供されるトランザクション機能を利用します。
トランザクションサポートの詳細は、Quarkus Transaction guide を参照してください。簡単な使用方法の場合:
from("direct:transaction")
.transacted()
.to("sql:INSERT INTO A TABLE ...?dataSource=#ds1")
.to("sql:INSERT INTO A TABLE ...?dataSource=#ds2")
.log("all data are in the ds1 and ds2")
さまざまなトランザクションポリシーのサポートが提供されます。
| ポリシー | 説明 |
|---|---|
|
| 現在のトランザクションをサポートします。現在のトランザクションが存在しない場合は例外が発生します。 |
|
| 現在のトランザクションをサポートしません。現在のトランザクションが存在する場合は例外が発生します。 |
|
| 現在のトランザクションはサポートせず、常に非トランザクションを実行します。 |
|
| 現在のトランザクションをサポートします。存在しない場合は新しいトランザクションを作成します。 |
|
| 新しいトランザクションを作成し、現在のトランザクションが存在する場合はそれを一時停止します。 |
|
| 現在のトランザクションをサポートします。存在しない場合は、非トランザクションを実行します。 |
3.54. JT400 リンクのコピーリンクがクリップボードにコピーされました!
データキュー、メッセージキュー、またはプログラム呼び出しを使用して、IBM i システムとメッセージを交換します。IBM i は、AS/400 および iSeries サーバーの代替品です。
3.54.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
JT400 コンポーネント、URI 構文:
jt400:userID:password@systemName/QSYS.LIB/objectPath.type
使用方法と設定の詳細は、上記リンクを参照してください。
3.54.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jt400</artifactId>
</dependency>
ネイティブエクステンションを使用すると、次のようなエラーが発生する場合があります。
Resource bundle lookup must be loaded during native image generation:
これはネイティブ登録が欠落していることが原因です (https://github.com/apache/camel-quarkus/pull/6029)。
回避策として、複数のリソースバンドルを含めることができます。
quarkus.native.additional-build-args = -H:IncludeResourceBundles=com.ibm.as400.access.JDMRI,-H:IncludeResourceBundles=com.ibm.as400.access.SVMRI_en,-H:IncludeResourceBundles=com.ibm.as400.access.MRI2,-H:IncludeResourceBundles=com.ibm.as400.access.JDMRI2,-H:IncludeResourceBundles=com.ibm.as400.access.SVMRI,-H:IncludeResourceBundles=com.ibm.as400.data.DAMRI,-H:IncludeResourceBundles=com.ibm.as400.security.SecurityMRI,-H:IncludeResourceBundles=com.ibm.as400.util.commtrace.CTMRI,-H:IncludeResourceBundles=com.ibm.as400.access.CoreMRI,-H:IncludeResourceBundles=com.ibm.as400.resource.ResourceMRI,-H:IncludeResourceBundles=com.ibm.as400.access.MRI
3.55. Kafka リンクのコピーリンクがクリップボードにコピーされました!
Apache Kafka ブローカーとの間でメッセージを送受信します。
3.55.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Kafka コンポーネント、URI 構文:
kafka:topic
使用方法と設定の詳細は、上記リンクを参照してください。
3.55.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-kafka</artifactId>
</dependency>
3.55.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.55.3.1. Quarkus Kafka Dev Services リンクのコピーリンクがクリップボードにコピーされました!
Camel Quarkus Kafka は、Quarkus Kafka Dev services を利用して、ローカルのコンテナー化された Kafka ブローカーでの開発およびテストを簡素化できます。
デフォルトで、Kafka Dev Services は開発およびテストモードで有効になっています。Camel Kafka コンポーネントは、brokers コンポーネントのオプションがローカルのコンテナー化された Kafka ブローカーを参照するように自動的に設定されます。つまり、このオプションを独自に設定する必要はありません。
この機能は、設定プロパティー quarkus.kafka.devservices.enabled=false を使用して無効にできます。
3.55.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
|
|
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.56. Kamelet リンクのコピーリンクがクリップボードにコピーされました!
ルートテンプレートを具体化する
3.56.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Kamelet コンポーネント、URI 構文:
kamelet:templateId/routeId
使用方法と設定の詳細は、上記リンクを参照してください。
3.56.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-kamelet</artifactId>
</dependency>
3.56.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.56.3.1. ビルド時に Kamelets をプリロードします リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションを使用すると、quarkus.camel.kamelet.identifiers プロパティーを使用して、ビルド時に一連の Kamelet をプリロードできます。
3.56.3.2. Kamelet Catalog の使用 リンクのコピーリンクがクリップボードにコピーされました!
/camel-kamelets/latest[Kamelet Catalog] には事前に設定された Kamelets のセットがあります。カタログから Kamelet を使用するには、クラスパスのプロジェクトの yaml 定義 (camel-kamelet リポジトリー にあります) をコピーする必要があります。または、camel-kamelets-catalog アーティファクトを pom.xml に追加できます。
<dependency>
<groupId>org.apache.camel.kamelets</groupId>
<artifactId>camel-kamelets-catalog</artifactId>
</dependency>
このアーティファクトは、カタログで使用可能なすべての kamelets を Camel Quarkus アプリケーションに追加してビルドタイム処理を行います。アーティファクトがランタイムではなくビルドタイムクラスパスの一部でなければならないという条件 (provided) でスコープに含める場合、quarkus.camel.kamelet.identifiers プロパティーを介してリストされたすべての kamelets を事前にロードする必要があります。
3.56.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
ビルド時にプリロードする kamelets 識別子のリスト。
個々の識別子は、関連する |
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.57. Kubernetes リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes API に対して操作を実行する
3.57.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-kubernetes</artifactId>
</dependency>
3.57.2. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Apache Camel for Quarkus のこのリリースでは、camel-quarkus-kubernetes エクステンションは、クラスターサービスとして camel-quarkus-master エクステンションと併用する場合にのみサポートされます。さらに、camel-quarkus-kubernetes エクステンションをサポートするには、アプリケーションで quarkus-openshift-client エクステンションへの依存関係を明示的に追加する必要があります。
3.57.2.1. Kubernetes クライアントインスタンスの自動登録 リンクのコピーリンクがクリップボードにコピーされました!
エクステンションは、kubernetesClient という名前の Kubernetes クライアント Bean を自動的に登録します。次のように、ルートで Bean を参照できます。
from("direct:pods")
.to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=listPods")
デフォルトでは、クライアントはローカルの kubeconfig ファイルから設定されます。application.properties 内のプロパティーを使用して、クライアント設定をカスタマイズできます。
quarkus.kubernetes-client.master-url=https://my.k8s.host
quarkus.kubernetes-client.namespace=my-namespace
設定オプションの完全なセットは、Quarkus Kubernetes Client ガイド に記載されています。
3.57.2.2. 特定のエンドポイントから消費するコンシューマがクラスタ内で 1 つだけであること リンクのコピーリンクがクリップボードにコピーされました!
同じルートが複数の Pod にデプロイされている場合、このエクステンションを マスターのエクステンション と組み合わせて使用すると便利な場合があります。このようなセットアップでは、キャメルマスター namespace 全体で一度に 1 つのコンシューマーがアクティブになります。
たとえば、以下のルートを複数の Pod にデプロイするとします。
from("master:ns:timer:test?period=100").log("Timer invoked on a single pod at a time");
以下のようなプロパティーを使用して、kubernetes クラスターサービスを有効にすることができます。
quarkus.camel.cluster.kubernetes.enabled = true
その結果、1 つのコンシューマーが ns camel マスター namespace 全体でアクティブになります。これは、特定の時点で、単一のタイマーのみがクラスター全体でエクスチェンジを生成することを意味します。つまり、メッセージは一度に 1 つの Pod で 100 ミリ秒ごとにログに記録されます。
kubernetes クラスターサービスは、quarkus.camel.cluster.kubernetes.* プロパティーをさらに微調整できます。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
'quarkus.camel.cluster.kubernetes.*' 設定に従って、Kubernetes クラスターサービスを自動的に設定する必要があるかどうか。 |
|
|
|
クラスターサービス ID (デフォルトは null)。 |
| |
|
Kubernetes マスターの URL (デフォルトでは Kubernetes クライアントプロパティーから読み取られます)。 |
| |
|
Kubernetes API サーバーにリクエストを送信するときに使用する接続タイムアウト (ミリ秒単位)。 |
| |
|
Pod と configmap を含む Kubernetes namespace の名前 (デフォルトで自動検出)。 |
| |
|
現在の Pod の名前 (デフォルトではコンテナーのホスト名から自動検出されます)。 |
| |
|
すべての Pod が同じ瞬間に Kubernetes API を呼び出さないようにするために適用するジッター係数 (デフォルトは 1.2)。 |
| |
|
現在のリーダーのデフォルトのリース期間 (デフォルトは 15000)。 |
| |
|
リーダーシップを失った可能性があるため、リーダーがサービスを停止しなければならない期限 (デフォルトは 10000)。 |
| |
|
リーダーシップを確認して獲得するための後続の 2 つの試みの間の時間。ジッター係数を使用してランダム化されます (デフォルトは 2000)。 |
| |
|
サービス検索の順序/優先度 (デフォルトは 2147482647)。 |
| |
|
楽観的ロックを行うために使用されるリースリソースの名前 (デフォルトは 'leaders')。リソース名は、基になる Kubernetes リソースが単一のロックを管理できる場合に接頭辞として使用されます。 |
| |
|
Kubernetes で使用されるリースリソースタイプ。'config-map' または 'lease' のいずれかです (デフォルトは 'lease')。 |
| |
|
camel マスター namespace リーダーをクラスター内のすべての camel コンテキストに均等に分散する必要があるかどうか。 |
|
|
|
クラスターを設定する Pod を識別するために使用されるラベルのキー/値。デフォルトは空のマップです。 |
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.58. Kudu リンクのコピーリンクがクリップボードにコピーされました!
Apache Hadoop エコシステムの無料およびオープンソースの列指向データストアである Apache Kudu と対話します。
3.58.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Kudu コンポーネント、URI 構文:
kudu:host:port/tableName
使用方法と設定の詳細は、上記リンクを参照してください。
3.58.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-kudu</artifactId>
</dependency>
3.58.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
Kudu は IBM Z および IBM Power ではサポートされていません。
3.59. 言語 リンクのコピーリンクがクリップボードにコピーされました!
Camel がサポートする任意の言語でスクリプトを実行します。
3.59.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Language コンポーネント、URI 構文:
language:languageName:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.59.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-language</artifactId>
</dependency>
3.59.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.59.3.1. 必要な依存関係 リンクのコピーリンクがクリップボードにコピーされました!
言語エクステンションは、実行するスクリプトに Exchange を渡すことのみを処理します。言語を実装するエクステンションは依存関係として追加する必要があります。次のリストの言語が Core に実装されています。
- Constant
- ExchangeProperty
- File
- Header
- Ref
- Simple
- Tokenize
他の言語を使用するには、対応する依存関係を追加する必要があります。詳細は、言語ガイド を参照してください。
3.59.3.2. ネイティブモード リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードでクラスパスからスクリプトをロードする場合、スクリプトファイルへのパスを application.properties ファイルの quarkus.native.resources.includes プロパティーで指定する必要があります。以下に例を示します。
quarkus.native.resources.includes=script.txt
3.59.4. ネイティブモードの allowContextMapAll オプション リンクのコピーリンクがクリップボードにコピーされました!
allowContextMapAll オプションはネイティブモードではサポートされていません。これは、CamelContext や Exchange などのセキュリティーに敏感な Camel コアクラスへのリフレクティブアクセスが必要なためです。これはセキュリティーリスクとみなされるため、この機能へのアクセスはデフォルトでは提供されません。
3.60. LDAP リンクのコピーリンクがクリップボードにコピーされました!
LDAP サーバーで検索を実行します。
3.60.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
LDAP コンポーネント、URI 構文:
ldap:dirContextName
使用方法と設定の詳細は、上記リンクを参照してください。
3.60.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-ldap</artifactId>
</dependency>
3.60.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.60.3.1. ネイティブモードでの SSL の使用 リンクのコピーリンクがクリップボードにコピーされました!
カスタム SSLSocketFactory (Configuring SSL セクションにあるものなど) をネイティブモードで使用する場合は、クラスをリフレクション用に登録する必要があります。そうしないと、クラスがクラスパスで使用可能になりません。次のように、クラス定義の上に @RegisterForReflection アノテーションを追加します。
@RegisterForReflection
public class CustomSSLSocketFactory extends SSLSocketFactory {
// The class definition is the same as in the above link.
}
3.61. LRA リンクのコピーリンクがクリップボードにコピーされました!
Long-Running-Action フレームワークの Camel saga バインディング
3.61.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.61.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-lra</artifactId>
</dependency>
3.62. Log リンクのコピーリンクがクリップボードにコピーされました!
基礎となるロギングメカニズムにメッセージをログとして記録します。
3.62.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Log コンポーネント、URI 構文:
log:loggerName
使用方法と設定の詳細は、上記リンクを参照してください。
3.62.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-log</artifactId>
</dependency>
3.63. Mail リンクのコピーリンクがクリップボードにコピーされました!
imap、pop3、および smtp プロトコルを使用してメールを送受信します。添付のある Camel メッセージを MIME-Multipart メッセージに、またはその逆にマーシャリングします。
3.63.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
IMAP コンポーネント、URI 構文:
imap:host:port -
IMAPS (Secure) コンポーネント、URI 構文:
imaps:host:port - MIME Multipart データ形式
-
POP3 コンポーネント、URI 構文:
pop3:host:port -
POP3S コンポーネント、URI 構文:
pop3s:host:port -
SMTP コンポーネント、URI 構文:
smtp:host:port -
SMTPS コンポーネント、URI 構文:
smtps:host:port
使用方法と設定の詳細は、上記リンクを参照してください。
3.63.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-mail</artifactId>
</dependency>
3.64. 管理 リンクのコピーリンクがクリップボードにコピーされました!
JMX 管理ストラテジーと関連する管理リソース。
3.64.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-management</artifactId>
</dependency>
3.64.2. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
Camel で管理対象 Bean を使用する方法は、Camel Manual の JMX セクション を参照してください。
3.64.2.1. JMX の有効化と無効化 リンクのコピーリンクがクリップボードにコピーされました!
JMX は、次のいずれかの方法で Camel-Quarkus で有効または無効にすることができます。
-
camel-quarkus-managementエクステンションを追加または削除する。 -
camel.main.jmxEnabled設定プロパティーをブール値に設定する。 -
システムプロパティー
-Dorg.apache.camel.jmx.disabledをブール値に設定する。
3.64.2.2. ネイティブモード リンクのコピーリンクがクリップボードにコピーされました!
JDK 17/20/Mandrel 23.0 の GraalVM のネイティブ実行可能ファイルに 実験的な JMX サポートが追加されました。この機能を有効にするには、以下の設定プロパティーを application.properties に追加します。
quarkus.native.monitoring=jmxserver
ネイティブアプリケーションを JConsole や VisualVM などのツールで検出できるようにするには、上記の設定に jvmstat オプションを追加します。
詳細は、Quarkus native guide を参照してください。
3.65. MapStruct リンクのコピーリンクがクリップボードにコピーされました!
Mapstruct を使用した型変換
3.65.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
MapStruct コンポーネント、URI 構文:
mapstruct:className
使用方法と設定の詳細は、上記リンクを参照してください。
3.65.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-mapstruct</artifactId>
</dependency>
3.65.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.65.3.1. アノテーションプロセッサー リンクのコピーリンクがクリップボードにコピーされました!
MapStruct を使用するには、アノテーションプロセッサーを使用するようにビルドを設定する必要があります。
3.65.3.1.1. Maven リンクのコピーリンクがクリップボードにコピーされました!
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>{mapstruct-version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
3.65.3.1.2. Gradle リンクのコピーリンクがクリップボードにコピーされました!
dependencies {
annotationProcessor 'org.mapstruct:mapstruct-processor:{mapstruct-version}'
testAnnotationProcessor 'org.mapstruct:mapstruct-processor:{mapstruct-version}'
}
3.65.3.2. マッパー定義の検出 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Red Hat build of Apache Camel for Quarkus は、@Mapper アノテーション付きインターフェイスまたは抽象クラスのパッケージパスを自動的に検出し、それらを Camel MapStruct コンポーネントに渡します。
スキャンされる特定のパッケージをより細かく制御する必要がある場合は、application.properties で設定プロパティーを設定できます。
camel.component.mapstruct.mapper-package-name = com.first.package,org.second.package
3.66. Master リンクのコピーリンクがクリップボードにコピーされました!
クラスター内の単一のコンシューマーのみが特定のエンドポイントから消費するようにします。JVM が停止した場合に自動的にフェイルオーバーします。
3.66.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Master コンポーネント、URI 構文:
master:namespace:delegateUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.66.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-master</artifactId>
</dependency>
3.66.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、以下のエクステンションと組み合わせて使用できます。
3.67. Micrometer リンクのコピーリンクがクリップボードにコピーされました!
Micrometer ライブラリーを使用して、Camel ルートからさまざまなメトリクスを直接収集します。
3.67.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Micrometer コンポーネント、URI 構文:
micrometer:metricsType:metricsName
使用方法と設定の詳細は、上記リンクを参照してください。
3.67.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-micrometer</artifactId>
</dependency>
3.67.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは Quarkus Micrometer を活用しています。Quarkus は、さまざまな Micrometer メトリクスレジストリー実装をサポートしています。
アプリケーションでは、使用する監視ソリューションに応じて、以下の依存関係、または quarkiverse ドキュメント に記載されている依存関係の 1 つを宣言する必要があります。
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
依存関係が宣言されていない場合、Micrometer エクステンションは主にテストに適した SimpleMeterRegistry インスタンスを作成します。
3.67.4. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
3.67.4.1. JMX での Micrometer 統計情報の公開 リンクのコピーリンクがクリップボードにコピーされました!
quarkus-micrometer-registry-jmx には現在ネイティブサポートがないため、JMX での Micrometer 統計の公開はネイティブモードでは利用できません。
3.67.4.2. Counter のデクリメントヘッダーは Prometheus によって無視されます リンクのコピーリンクがクリップボードにコピーされました!
Prometheus バックエンドは、Counter メトリクスのインクリメント中に負の値を無視します。
3.67.4.3. JMX での統計の公開 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Apache Camel for Quarkus では、JmxMeterRegistry の登録が簡素化されています。io.quarkiverse.micrometer.registry:quarkus-micrometer-registry-jmx の依存関係を追加すると、JmxMeterRegistry が自動的に作成されます。
3.67.5. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
ルート処理時間のメトリクスをキャプチャーするために MicrometerRoutePolicyFactory を有効化するかどうかを設定します。 |
|
|
|
個々のルートノード処理時間のメトリクスをキャプチャーするために、MicrometerMessageHistoryFactory を有効化するかどうかを設定します。設定されたルートノードの数によっては、大量のメトリクスが作成される可能性があります。したがって、このオプションはデフォルトで無効になります。 |
|
|
|
エクスチェンジ処理時間のメトリクスをキャプチャーするために、MicrometerExchangeEventNotifier を有効化するかどうかを設定します。 |
|
|
|
ルートの合計数と実行中のルートの合計数のメトリクスをキャプチャーするために、MicrometerRouteEventNotifier を有効化するかどうかを設定します。 |
|
|
|
InstrumentedThreadPoolFactory を注入して Camel Thread Pool に関するパフォーマンス情報を収集するかどうかを設定します。 |
|
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
smallrye-metrics から micrometer に移行する場合は、一部の Bean をスコープ指定された Bean として手動で定義する必要がある場合があります。
smallrye-metrics では、メトリクス (@COUNTED、@METRIC など) として登録されているが、スコープ指定された Bean として登録されていないクラスが、自動的に登録されます。micrometer ではこのようなことは起こりません。
micrometer では、@Dependent アノテーションを追加するなどして、CDI を通じてアクセスされる Bean を手動で登録する必要があります。
3.68. Microprofile フォールトトレランス リンクのコピーリンクがクリップボードにコピーされました!
Microprofile フォールトトレランスを使用した Circuit Breaker EIP
3.68.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.68.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-microprofile-fault-tolerance</artifactId>
</dependency>
3.69. MicroProfile Health リンクのコピーリンクがクリップボードにコピーされました!
MicroProfile Health による Camel ヘルスチェックの公開
3.69.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.69.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-microprofile-health</artifactId>
</dependency>
3.69.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、AbstractHealthCheck を拡張するクラスは Liveness および Readiness チェックの両方として登録されます。isReadiness メソッドを上書きして、この動作を制御できます。
アプリケーションによって提供されるチェックは自動的に検出され、Camel レジストリーにバインドされます。これらは、Quarkus ヘルスエンドポイント /q/health/live および /q/health/ready から利用できます。
カスタムの HealthCheckRepository 実装も提供でき、これらの実装も自動的に検出され、Camel レジストリーにバインドされます。
詳細は、Quarkus health guide を参照してください。
3.69.3.1. 提供されるヘルスチェック リンクのコピーリンクがクリップボードにコピーされました!
一部のチェックはアプリケーションに自動的に登録されます。
3.69.3.1.1. Camel Context Health リンクのコピーリンクがクリップボードにコピーされました!
Camel Context のステータスを検査して、ステータスが 'Started' 以外の場合にヘルスチェックのステータスを DOWN にします。
3.69.3.1.2. Camel Route Health リンクのコピーリンクがクリップボードにコピーされました!
各ルートのステータスを検査して、いずれかのルートのステータスが 'Started' 以外の場合にヘルスチェックのステータスを DOWN にします。
3.69.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
Camel ヘルスチェックを有効にするかどうかを設定します |
|
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.70. Minio リンクのコピーリンクがクリップボードにコピーされました!
Minio SDK を使用して、Minio Storage Service からオブジェクトを保存および取得します。
3.70.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Minio コンポーネント、URI 構文:
minio:bucketName
使用方法と設定の詳細は、上記リンクを参照してください。
3.70.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-minio</artifactId>
</dependency>
3.70.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
Minio の設定によっては、このエクステンションでは接続に SSL 暗号化が必要になる場合があります。このような場合、quarkus.ssl.native=true を application.properties に追加する必要があります。Quarkus native SSL guide および Camel Quarkus ユーザーガイドの ネイティブモード セクションも参照してください。
次の 2 つの異なる設定アプローチがあります。
- Minio クライアントは、Quarkiverse Minio を利用する quarkus プロパティーを通じて定義できます (ドキュメント を参照)。Camel はクライアントを Minio コンポーネントに自動接続します。この設定では、minio クライアントを 1 つだけ定義できるため、一緒に実行される、異なる minio エンドポイントを複数定義できません。
- Camel レジストリーのクライアント (CDI プロデューサ/Bean など) を提供し、エンドポイントから参照します。
minio:foo?minioClient=#minioClient
3.71. MLLP リンクのコピーリンクがクリップボードにコピーされました!
MLLP プロトコルを使用して外部システムと通信します。
3.71.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
MLLP コンポーネント、URI 構文:
mllp:hostname:port
使用方法と設定の詳細は、上記リンクを参照してください。
3.71.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-mllp</artifactId>
</dependency>
3.71.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
-
defaultCharsetコンポーネントオプションを使用する場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
3.72. Mock リンクのコピーリンクがクリップボードにコピーされました!
モックを使用してルートおよび仲介ルールをテストします。
3.72.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Mock コンポーネント、URI 構文:
mock:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.72.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-mock</artifactId>
</dependency>
3.72.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
テストで camel-mock 機能を使用するには、MockEndpoint インスタンスへのアクセスを取得する必要があります。
CDI の注入は、インスタンスへのアクセスに使用できます (Quarkus ドキュメント を参照してください)。@Inject アノテーションを使用して camelContext をテストに注入できます。その後、Camel コンテキストを使用してモックエンドポイントを取得できます。以下の例を参照してください。
import jakarta.inject.Inject;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.jupiter.api.Test;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
public class MockJvmTest {
@Inject
CamelContext camelContext;
@Inject
ProducerTemplate producerTemplate;
@Test
public void test() throws InterruptedException {
producerTemplate.sendBody("direct:start", "Hello World");
MockEndpoint mockEndpoint = camelContext.getEndpoint("mock:result", MockEndpoint.class);
mockEndpoint.expectedBodiesReceived("Hello World");
mockEndpoint.assertIsSatisfied();
}
}
サンプルテストに使用するルート:
import jakarta.enterprise.context.ApplicationScoped;
import org.apache.camel.builder.RouteBuilder;
@ApplicationScoped
public class MockRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("direct:start").to("mock:result");
}
}
3.72.4. Camel Quarkus の制限 リンクのコピーリンクがクリップボードにコピーされました!
(使用法で説明した) CDI Bean の注入は、ネイティブモードでは機能しません。
ネイティブモードでは、テストとテスト中のアプリケーションが 2 つの異なるプロセスで実行され、それらの間でモック Bean を共有することはできません (Quarkus ドキュメント を参照)。
3.73. MongoDB リンクのコピーリンクがクリップボードにコピーされました!
MongoDB ドキュメントおよびコレクションの操作を実行します。
3.73.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
MongoDB コンポーネント、URI 構文:
mongodb:connectionBean
使用方法と設定の詳細は、上記リンクを参照してください。
3.73.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-mongodb</artifactId>
</dependency>
3.73.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
エクステンションは Quarkus MongoDB Client エクステンションを活用します。Mongo クライアントは、Quarkus MongoDB Client の 設定オプション を使用して設定できます。
Camel Quarkus MongoDB エクステンションは、camelMongoClient という名前の MongoDB クライアント Bean を自動的に登録します。これは、mongodb エンドポイント URI の connectionBean パスパラメーターで参照できます。以下に例を示します。
from("direct:start")
.to("mongodb:camelMongoClient?database=myDb&collection=myCollection&operation=findAll")
アプリケーションが複数の MongoDB サーバーと連携する必要がある場合は、Quarkus MongoDB extension client injection で説明するように、"特定の名前" のクライアントを作成し、クライアントおよび関連する設定を注入することで、ルートで参照できます。以下に例を示します。
//application.properties
quarkus.mongodb.mongoClient1.connection-string = mongodb://root:example@localhost:27017/
//Routes.java
@ApplicationScoped
public class Routes extends RouteBuilder {
@Inject
@MongoClientName("mongoClient1")
MongoClient mongoClient1;
@Override
public void configure() throws Exception {
from("direct:defaultServer")
.to("mongodb:camelMongoClient?database=myDb&collection=myCollection&operation=findAll")
from("direct:otherServer")
.to("mongodb:mongoClient1?database=myOtherDb&collection=myOtherCollection&operation=findAll");
}
}
指定されたクライアントを使用する場合、"デフォルト" の camelMongoClient Bean は引き続き生成されます。詳細は、複数の MongoDB クライアント に関する Quarkus ドキュメントを参照してください。
3.74. MyBatis リンクのコピーリンクがクリップボードにコピーされました!
MyBatis を使用して、リレーショナルデータベースでクエリー、ポーリング、挿入、更新、または削除を実行します。
3.74.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
MyBatis コンポーネント、URI 構文:
mybatis:statement -
MyBatis Bean コンポーネント、URI 構文:
mybatis- bean :beanName:methodName
使用方法と設定の詳細は、上記リンクを参照してください。
3.74.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-mybatis</artifactId>
</dependency>
3.74.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
設定は、Quarkus MyBatis を参照してください。以下のオプションを有効にする必要があります。
quarkus.mybatis.xmlconfig.enable=true
quarkus.mybatis.xmlconfig.path=SqlMapConfig.xml
quarkus.mybatis.xmlconfig.path は mybatis エンドポイントの configurationUri パラメーターと同じである必要があります。
3.75. Netty HTTP リンクのコピーリンクがクリップボードにコピーされました!
Netty HTTP エクステンションは、Netty エクステンションに加えて HTTP トランスポートを提供します。
3.75.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Netty HTTP コンポーネント、URI 構文:
netty-http:protocol://host:port/path
使用方法と設定の詳細は、上記リンクを参照してください。
3.75.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-netty-http</artifactId>
</dependency>
3.75.3. ネイティブモードの transferException オプション リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
3.75.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
- アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
3.76. Netty リンクのコピーリンクがクリップボードにコピーされました!
Netty 4.x で TCP または UDP を使用するソケットレベルのネットワーク。
3.76.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Netty コンポーネント、URI 構文:
netty:protocol://host:port
使用方法と設定の詳細は、上記リンクを参照してください。
3.76.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-netty</artifactId>
</dependency>
3.77. OpenAPI Java リンクのコピーリンクがクリップボードにコピーされました!
Camel REST DSL で定義された OpenAPI リソースを公開する
3.77.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.77.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-openapi-java</artifactId>
</dependency>
3.77.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションを使用して、REST DSL サービスを Quarkus OpenAPI に公開できます。quarkus-smallrye-openapi を使用すると、/q/openapi?format=json でアクセスできます。
詳細は、Quarkus OpenAPI ガイド を参照してください。
これは実験的な機能です。それを有効にすることができます
quarkus.camel.openapi.expose.enabled=true
@RegisterForReflection を使用してすべてのモデルクラスをリフレクションに登録するのは、ユーザーの責任です。
現在、org.apache.camel.builder.LambdaRouteBuilder で使用されている残りのサービスはサポートされていません。また、CDI が利用できない間にビルド時に残りの定義を取得するため、RouteBuilder の configure() で CDI 注入を使用することはできません。
3.78. OpenTelemetry リンクのコピーリンクがクリップボードにコピーされました!
OpenTelemetry を使用した分散トレース
3.78.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.78.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-opentelemetry</artifactId>
</dependency>
3.78.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
エクステンションは Camel OpenTelemetryTracer を自動的に作成し、それを Camel レジストリーにバインドします。
キャプチャされたトレースをトレースシステムに送信するには、以下のような application.properties 内のいくつかのプロパティーを設定する必要があります。
# Identifier for the origin of spans created by the application
quarkus.application.name=my-camel-application
# OTLP exporter endpoint
quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://localhost:4317
設定オプションの完全なリストは、Quarkus OpenTelemetry ガイド を参照してください。
application.properties で quarkus.camel.opentelemetry.exclude-patterns という名前のプロパティーを設定することで、ルートエンドポイントをトレースから除外できます。以下に例を示します。
# Exclude all direct & netty-http endpoints from tracing
quarkus.camel.opentelemetry.exclude-patterns=direct:*,netty-http:*
3.78.3.1. エクスポーター リンクのコピーリンクがクリップボードにコピーされました!
Quarkus OpenTelemetry のデフォルトは、OpenTelemetry で定義された標準の OTLP エクスポーターです。追加のエクスポーターは、Quarkiverse quarkus-opentelemetry-exporter プロジェクトで利用可能になります。
3.78.3.2. CDI Bean メソッドの実行の追跡 リンクのコピーリンクがクリップボードにコピーされました!
Camel ルートから CDI Bean メソッドの実行をインストルメント化する場合、そのようなメソッドに io.opentelemetry.extension.annotations.WithSpan のアノテーションを付ける必要があります。@WithSpan アノテーションが付けられたメソッドは、新しい Span を作成し、現在のトレースコンテキストと必要な関係を確立します。
たとえば、Camel ルートから CDI Bean をインストルメント化するには、まず適切なメソッドに @WithTrace のアノテーションが付けられていることを確認します。
@ApplicationScoped
@Named("myBean")
public class MyBean {
@WithSpan
public String greet() {
return "Hello World!";
}
}
次に、Camel ルートで Bean を使用します。
録画したスパンのシーケンスが正しいことを確認するには、短縮された .bean() EIP DSL メソッドではなく、完全な to("bean:") エンドポイント URI を使用する必要があります。
public class MyRoutes extends RouteBuilder {
@Override
public void configure() throws Exception {
from("direct:executeBean")
.to("bean:myBean?method=greet");
}
}
CDI インストルメンテーションの詳細は、Quarkus OpenTelemetry ガイドを参照してください。
3.78.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
ヘッダー名をエンコードする必要があるかどうかを設定します。OpenTelemetry プロパゲーターが、ターゲットシステムと互換性のない形式でヘッダー名の値を設定する可能性がある状況で役立ちます。たとえば、JMS の場合、仕様ではヘッダー名が有効な Java 識別子であることが義務付けられています。 |
|
|
|
指定されたコンマ区切りのパターンに一致するエンドポイント URI のトレースを無効にするかどうかを設定します。パターンは次の形式を取ることができます。 1. エンドポイント URI の完全一致。例: platform-http:/some/path 2. ワイルドカードマッチ。E.g platform-http:* 3. エンドポイント URI に一致する正規表現。例: platform-http:/prefix/.* |
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.79. Paho MQTT5 リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Paho MQTT v5 クライアントを使用して MQTT メッセージブローカーと通信します。
3.79.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Paho MQTT 5 コンポーネント、URI 構文:
paho-mqtt5:topic
使用方法と設定の詳細は、上記リンクを参照してください。
3.79.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-paho-mqtt5</artifactId>
</dependency>
3.80. Paho リンクのコピーリンクがクリップボードにコピーされました!
Eclipse Paho MQTT クライアントを使用して MQTT メッセージブローカーと通信します。
3.80.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Paho コンポーネント、URI 構文:
paho:topic
使用方法と設定の詳細は、上記リンクを参照してください。
3.80.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-paho</artifactId>
</dependency>
3.81. Platform HTTP リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションにより、HTTP リクエストを使用するために HTTP エンドポイントを作成できます。
これは、quarkus-vertx-http エクステンションによって提供される Eclipse Vert.x HTTP サーバー上にビルドされます。
3.81.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Platform HTTP コンポーネント、URI 構文:
platform-http:path
使用方法と設定の詳細は、上記リンクを参照してください。
3.81.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-platform-http</artifactId>
</dependency>
3.81.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.81.3.1. 基本的な使用方法 リンクのコピーリンクがクリップボードにコピーされました!
/hello エンドポイントですべての HTTP メソッドを提供します。
from("platform-http:/hello").setBody(simple("Hello ${header.name}"));
/hello エンドポイントで GET リクエストのみを提供します。
from("platform-http:/hello?httpMethodRestrict=GET").setBody(simple("Hello ${header.name}"));
3.81.3.2. Camel REST DSL 経由の platform-http の使用 リンクのコピーリンクがクリップボードにコピーされました!
platform-http コンポーネントで Camel REST DSL を使用できるようにするには、pom.xml に camel-quarkus-rest を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-rest</artifactId>
</dependency>
その後、Camel REST DSL を使用できます。
rest()
.get("/my-get-endpoint")
.to("direct:handleGetRequest");
.post("/my-post-endpoint")
.to("direct:handlePostRequest");
3.81.3.3. multipart/form-data ファイルのアップロードの処理 リンクのコピーリンクがクリップボードにコピーされました!
ホワイトリストに登録して、アップロードを特定のファイル拡張子に制限することができます。
from("platform-http:/upload/multipart?fileNameExtWhitelist=html,txt&httpMethodRestrict=POST")
.to("log:multipart")
.process(e -> {
final AttachmentMessage am = e.getMessage(AttachmentMessage.class);
if (am.hasAttachments()) {
am.getAttachments().forEach((fileName, dataHandler) -> {
try (InputStream in = dataHandler.getInputStream()) {
// do something with the input stream
} catch (IOException ioe) {
throw new RuntimeException(ioe);
}
});
}
});
3.81.3.4. platform-http エンドポイントのセキュリティー保護 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus は、platform-http エンドポイントのセキュリティー保護に使用できるさまざまなセキュリティーおよび認証メカニズムを提供します。詳細は、Quarkus Security のドキュメント を参照してください。
ルート内で、認証されたユーザーとその関連する SecurityIdentity および Principal を取得できます。
from("platform-http:/secure")
.process(e -> {
Message message = e.getMessage();
QuarkusHttpUser user = message.getHeader(VertxPlatformHttpConstants.AUTHENTICATED_USER, QuarkusHttpUser.class);
SecurityIdentity securityIdentity = user.getSecurityIdentity();
Principal principal = securityIdentity.getPrincipal();
// Do something useful with SecurityIdentity / Principal. E.g check user roles etc.
});
Quarkus ドキュメント で quarkus.http.body.* 設定オプション (特に次の項目) も確認してください。quarkus.http.body.handle-file-uploads、quarkus.http.body.uploads-directory および quarkus.http.body.delete-uploaded-files-on-end。
3.81.3.5. リバースプロキシーの実装 リンクのコピーリンクがクリップボードにコピーされました!
プラットフォーム HTTP コンポーネントはリバースプロキシーとして機能できます。その場合、Exchange.HTTP_URI、Exchange.HTTP_HOST ヘッダーは、HTTP 要求のリクエスト行で受信した絶対 URL から入力されます。
エクスチェンジを元のサーバーに単純にリダイレクトする HTTP プロキシーの例を次に示します。
from("platform-http:proxy")
.toD("http://"
+ "${headers." + Exchange.HTTP_HOST + "}");
3.81.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.81.4.1. プラットフォーム HTTP サーバー設定 リンクのコピーリンクがクリップボードにコピーされました!
プラットフォーム HTTP サーバーの設定は Quarkus によって管理されます。設定オプションの完全なリストは、Quarkus HTTP 設定ガイド を参照してください。
Platform HTTP サーバーの SSL を設定するには、SSL ガイドを使用した安全な接続 に従ってください。SSLContextParameters を使用した SSL 用のサーバーの設定は現在サポートされていないことに注意してください。
3.81.4.2. 文字エンコーディング リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
3.82. Quartz リンクのコピーリンクがクリップボードにコピーされました!
Quartz 2.x スケジューラーを使用してメッセージの送信をスケジュールします。
3.82.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Quartz コンポーネント、URI 構文:
quartz:groupName/triggerName
使用方法と設定の詳細は、上記リンクを参照してください。
3.82.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-quartz</artifactId>
</dependency>
3.82.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.82.3.1. クラスタリング リンクのコピーリンクがクリップボードにコピーされました!
Quartz クラスタリングのサポートは、Quarkus Quartz エクステンションによって提供されます。次の手順では、Camel で使用する Quarkus Quartz の設定方法を説明します。
Quartz クラスター化モードを有効にし、
DataSourceを永続 Quartz ジョブストアとして設定します。設定例を以下に示します。# Quartz configuration quarkus.quartz.clustered=true quarkus.quartz.store-type=jdbc-cmt quarkus.scheduler.start-mode=forced # Datasource configuration quarkus.datasource.db-kind=postgresql quarkus.datasource.username=quarkus_test quarkus.datasource.password=quarkus_test quarkus.datasource.jdbc.url=jdbc:postgresql://localhost/quarkus_test # Optional automatic creation of Quartz tables quarkus.flyway.connect-retries=10 quarkus.flyway.table=flyway_quarkus_history quarkus.flyway.migrate-at-start=true quarkus.flyway.baseline-on-migrate=true quarkus.flyway.baseline-version=1.0 quarkus.flyway.baseline-description=Quartzquarkus.datasource.db-kindの値に対応するアプリケーションに、正しい JDBC ドライバーエクステンションを追加します。上記の例ではpostgresqlが使用されるため、以下の JDBC 依存関係が必要になります。必要に応じて調整します。Agroal は、DataSourceサポートにも必要になります。<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jdbc-postgresql</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-agroal</artifactId> </dependency>Quarkus Flyway は、必要な Quartz データベーステーブルを自動的に作成できます。
quarkus-flywayをアプリケーションに追加します (オプション)。<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-flyway</artifactId> </dependency>また、選択したデータベースの種類に Quartz データベース作成スクリプトを追加します。Quartz プロジェクトは、こちら からコピーできる既製のスクリプトを提供します。SQL スクリプトを
src/main/resources/db/migration/V1.0.0__QuarkusQuartz.sqlに追加します。Quarkus Flyway は起動時にそれを検出し、Quartz データベーステーブルの作成に進みます。Quarkus Quartz スケジューラーを使用するように Camel Quartz コンポーネントを設定します。
@Produces @Singleton @Named("quartz") public QuartzComponent quartzComponent(Scheduler scheduler) { QuartzComponent component = new QuartzComponent(); component.setScheduler(scheduler); return component; }
Quartz スケジューラーの追加のカスタマイズは、さまざまな設定プロパティーで実行できます。詳細は、Quarkus Quartz Configuration ガイドを参照してください。
3.83. Ref リンクのコピーリンクがクリップボードにコピーされました!
Camel Registry で名前によって動的に検索されたエンドポイントにメッセージをルーティングします。
3.83.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Ref コンポーネント、URI 構文:
ref:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.83.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-ref</artifactId>
</dependency>
3.83.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
CDI プロデューサーメソッドを利用してエンドポイントを Camel レジストリーにバインドできるため、Camel ルートで ref URI スキームを使用してエンドポイントを解決できます。
たとえば、エンドポイント Bean を生成するには、次のようにします。
@ApplicationScoped
public class MyEndpointProducers {
@Inject
CamelContext context;
@Singleton
@Produces
@Named("endpoint1")
public Endpoint directStart() {
return context.getEndpoint("direct:start");
}
@Singleton
@Produces
@Named("endpoint2")
public Endpoint logEnd() {
return context.getEndpoint("log:end");
}
}
ref: を使用して、Camel レジストリーにバインドされた CDI Bean の名前を参照します。
public class MyRefRoutes extends RouteBuilder {
@Override
public void configure() {
// direct:start -> log:end
from("ref:endpoint1")
.to("ref:endpoint2");
}
}
3.84. REST OpenApi リンクのコピーリンクがクリップボードにコピーされました!
RestProducerFactory インターフェイスを実装するコンポーネントに委任する OpenAPI 仕様ドキュメントに基づいて REST プロデューサーを設定します。
3.84.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
REST OpenApi コンポーネント、URI 構文:
rest-openapi:specificationUri#operationId
使用方法と設定の詳細は、上記リンクを参照してください。
3.84.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-rest-openapi</artifactId>
</dependency>
3.84.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.84.3.1. 必要な依存関係 リンクのコピーリンクがクリップボードにコピーされました!
rest-openapi エクステンションを使用する場合は、RestProducerFactory 実装が使用可能である必要があります。現在知られている拡張子は次のとおりです。
- camel-quarkus-http
- camel-quarkus-netty-http
Maven ユーザーは、これらの依存関係のいずれかを pom.xml に追加する必要があります。次に例を示します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-http</artifactId>
</dependency>
OpenApi 仕様の読み込みに使用されるメカニズムによっては、追加の依存関係が必要になる場合があります。file リソースロケーターを使用する場合、org.apache.camel.quarkus:camel-quarkus-file 拡張子をプロジェクトの依存関係として追加する必要があります。ref または Bean を使用して仕様をロードする場合、org.apache.camel.quarkus:camel-quarkus-bean 依存関係を追加するだけでなく、Bean 自体に @RegisterForReflection のアノテーションを付ける必要があります。
ネイティブコードで classpath リソースロケーターを使用する場合、OpenAPI 仕様へのパスを application.properties ファイルの quarkus.native.resources.includes プロパティーで指定する必要があります。以下に例を示します。
quarkus.native.resources.includes=openapi.json
3.85. Rest リンクのコピーリンクがクリップボードにコピーされました!
REST サービスおよび OpenAPI Specification を公開するか、外部の REST サービスを呼び出します。
3.85.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
REST コンポーネント、URI 構文:
rest:method:path:uriTemplate -
REST API コンポーネント、URI 構文:
rest-api:path
使用方法と設定の詳細は、上記リンクを参照してください。
3.85.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-rest</artifactId>
</dependency>
3.85.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、Platform HTTP エクステンションに依存し、REST トランスポートを提供するコンポーネントとして設定します。
3.85.3.1. platform-http 付きの特殊文字を含むパスパラメーター リンクのコピーリンクがクリップボードにコピーされました!
platform-http REST トランスポートを使用する場合、一部の文字はパスパラメーター名内で許可されません。これには、'-' および '$' 文字が含まれます。
以下の例の REST /dashed/param ルートを正しく機能させるには、システムプロパティーを io.vertx.web.route.param.extended-pattern=true にする必要があります。
import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
@Override
public void configure() {
rest("/api")
// Dash '-' is not allowed by default
.get("/dashed/param/{my-param}")
.to("direct:greet")
// The non-dashed path parameter works by default
.get("/undashed/param/{myParam}")
.to("direct:greet");
from("direct:greet")
.setBody(constant("Hello World"));
}
}
Vert.x Web ドキュメント には、これに関するいくつかの背景があります。
3.85.3.2. 代替 REST トランスポートプロバイダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
netty-http や servlet 等の別の REST トランスポートプロバイダーを使用するには、それぞれのエクステンションを依存関係としてプロジェクトへの追加し、RouteBuilder でプロバイダーを設定する必要があります。たとえば、servlet の場合、org.apache.camel.quarkus:camel-quarkus-servlet 依存関係を追加し、プロバイダーを次のように設定する必要があります。
import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
@Override
public void configure() {
restConfiguration()
.component("servlet");
...
}
}
3.86. Salesforce リンクのコピーリンクがクリップボードにコピーされました!
Java DTO を使用して Salesforce と通信します。
3.86.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Salesforce コンポーネント、URI 構文:
salesforce:operationName:topicName
使用方法と設定の詳細は、上記リンクを参照してください。
3.86.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-salesforce</artifactId>
</dependency>
3.86.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.86.3.1. salesforce-maven-plugin を使用した Salesforce DTO の生成 リンクのコピーリンクがクリップボードにコピーされました!
テスト内容。
プロジェクトの Salesforce DTO を生成するには、salesforce-maven-plugin を使用します。以下のサンプルコードスニペットは、Account オブジェクトの単一の DTO を作成します。
<plugin>
<groupId>org.apache.camel.maven</groupId>
<artifactId>camel-salesforce-maven-plugin</artifactId>
<version>{camel-version}</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<clientId>${env.SALESFORCE_CLIENTID}</clientId>
<clientSecret>${env.SALESFORCE_CLIENTSECRET}</clientSecret>
<userName>${env.SALESFORCE_USERNAME}</userName>
<password>${env.SALESFORCE_PASSWORD}</password>
<loginUrl>https://login.salesforce.com</loginUrl>
<packageName>org.apache.camel.quarkus.component.salesforce.generated</packageName>
<outputDirectory>src/main/java</outputDirectory>
<includes>
<include>Account</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
3.86.3.2. POJO pubSubDeserializeType を使用した Pub / Sub API のネイティブモードサポート リンクのコピーリンクがクリップボードにコピーされました!
Camel Salesforce Pub / Sub API を使用し、pubSubDeserializeType が POJO として設定されている場合は、リフレクション用に pubSubPojoClass オプションで設定されたクラスを登録する必要があります。
たとえば、次のルートがあるとします。
from("salesforce:pubSubSubscribe:/event/TestEvent__e?pubSubDeserializeType=POJO&pubSubPojoClass=org.foo.TestEvent")
.log("Received Salesforce POJO topic message: ${body}");
リフレクションのためにクラス org.foo.TestEvent を登録する必要があります。
package org.foo;
import io.quarkus.runtime.annotations.RegisterForReflection;
@RegisterForReflection
public class TestEvent {
// Getters / setters etc
}
詳細は、ネイティブモード のユーザーガイドを参照してください。
3.86.4. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.87. Saga リンクのコピーリンクがクリップボードにコピーされました!
Saga EIP を使用して、ルート内でカスタムアクションを実行します。
3.87.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Saga コンポーネント、URI 構文:
saga:action
使用方法と設定の詳細は、上記リンクを参照してください。
3.87.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-saga</artifactId>
</dependency>
3.88. SAP リンクのコピーリンクがクリップボードにコピーされました!
SAP Camel コンポーネントを提供します。
3.88.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
SAP エクステンションは、10 個の異なる SAP コンポーネントで構成されるパッケージです。sRFC、tRFC、および qRFC プロトコルをサポートするリモートファンクションコール (RFC) コンポーネントがあります。また、IDoc 形式のメッセージを使用して通信を容易にする IDoc コンポーネントがあります。このコンポーネントは、SAP Java Connector (SAP JCo) ライブラリーを使用して SAP との双方向通信を促進し、SAP IDoc ライブラリーを使用してドキュメントを中間ドキュメント (IDoc) 形式で送信します。
詳細は以下を参照してください。
3.88.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-sap</artifactId>
</dependency>
3.88.2.1. SAP エクステンションの Camel Quarkus の制限事項 リンクのコピーリンクがクリップボードにコピーされました!
SAP エクステンションはパッケージタイプ uber-jar をサポートしていないため、アプリケーションが次のような実行時例外を出力します。
Caused by: java.lang.ExceptionInInitializerError: JCo initialization failed with java.lang.ExceptionInInitializerError: Illegal JCo archive "sap-1.0.0-SNAPSHOT-runner.jar". It is not allowed to rename or repackage the original archive "sapjco3.jar".
3.88.2.2. SAP コンポーネントの追加のプラットフォーム制限 リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントはサードパーティーの JCo 3 および IDoc 3 ライブラリーに依存しているため、これらのライブラリーがサポートするプラットフォームにのみインストールできます。
3.88.2.3. SAP JCo および SAP IDoc ライブラリー リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントを使用するための前提条件は、SAP Java Connector (SAP JCo) ライブラリーと SAP IDoc ライブラリーが Java ランタイムの lib/ ディレクトリーにインストールされていることです。ターゲットオペレーティングシステムに適した SAP ライブラリーのセットを SAP Service Marketplace からダウンロードしていることを確認する必要があります。
ライブラリーファイルの名前は、次に示すように、対象のオペレーティングシステムによって異なります。
| SAP コンポーネント | Linux と UNIX | Windows |
|---|---|---|
| SAP JCo 3 |
|
|
| SAP IDoc |
|
|
正しい SAP ライブラリーを取得するには、pom.xml に次の依存関係を含める必要があります。
<dependency>
<groupId>com.sap.conn.jco</groupId>
<artifactId>sapjco3</artifactId>
<version>3.1.4</version>
<scope>system</scope>
<systemPath>${basedir}/lib/sapjco3.jar</systemPath>
</dependency>
<dependency>
<groupId>com.sap.conn.idoc</groupId>
<artifactId>sapidoc3</artifactId>
<version>3.1.1</version>
<scope>system</scope>
<systemPath>${basedir}/lib/sapidoc3.jar</systemPath>
</dependency>
3.88.3. URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントによって提供されるエンドポイントには、リモートファンクションコール (RFC) エンドポイントと中間ドキュメント (IDoc) エンドポイントの 2 種類があります。
RFC エンドポイントの URI 形式は次のとおりです。
sap-srfc-destination:destinationName:rfcName
sap-trfc-destination:destinationName:rfcName
sap-qrfc-destination:destinationName:queueName:rfcName
sap-srfc-server:serverName:rfcName[?options]
sap-trfc-server:serverName:rfcName[?options]
IDoc エンドポイントの URI 形式は次のとおりです。
sap-idoc-destination:destinationName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]]
sap-idoclist-destination:destinationName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]]
sap-qidoc-destination:destinationName:queueName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]]
sap-qidoclist-destination:destinationName:queueName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]]
sap-idoclist-server:serverName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]][?options]
sap- endpointKind -destination で始まる URI 形式は、宛先エンドポイント (つまり、Camel producer エンドポイント) を定義するために使用され、destinationName は SAP インスタンスへの特定のアウトバウンド接続の名前です。アウトバウンド接続は、コンポーネントレベルで名前が付けられ、設定されます。
sap- endpointKind -server で始まる URI 形式は、サーバーエンドポイント (つまり、Camel consumer エンドポイント) を定義するために使用され、serverName は SAP インスタンスからの特定のインバウンド接続の名前です。インバウンド接続は、コンポーネントレベルで名前が付けられ、設定されます。
RFC エンドポイント URI のその他のコンポーネントは次のとおりです。
- rfcName
- (必須) 宛先エンドポイント URI では、接続された SAP インスタンスのエンドポイントによって呼び出される RFC の名前です。サーバーエンドポイント URI では、接続された SAP インスタンスから呼び出されたときにエンドポイントによって処理される RFC の名前です。
- queueName
- このエンドポイントが SAP リクエストを送信するキューを指定します。
IDoc エンドポイント URI のその他のコンポーネントは次のとおりです。
- idocType
- (必須) このエンドポイントによって生成される IDoc の基本 IDoc タイプを指定します。
- idocTypeExtension
- このエンドポイントによって生成された IDoc の IDoc タイプ拡張 (存在する場合) を指定します。
- systemRelease
- このエンドポイントによって生成された IDoc に関連付けられている SAP Basis Release がある場合は、それを指定します。
- applicationRelease
- このエンドポイントによって生成された IDoc の関連付けられたアプリケーションリリースがある場合は、それを指定します。
- queueName
- このエンドポイントが SAP リクエストを送信するキューを指定します。
3.88.3.1. RFC 宛先エンドポイントのオプション リンクのコピーリンクがクリップボードにコピーされました!
RFC 宛先エンドポイント (sap-srfc-destination、sap-trfc-destination、および sap-qrfc-destination) は、次の URI オプションをサポートしています。
| 名前 | デフォルト | 説明 |
|---|---|---|
|
|
|
|
|
|
|
|
3.88.3.2. RFC サーバーエンドポイントのオプション リンクのコピーリンクがクリップボードにコピーされました!
SAP RFC サーバーエンドポイント (sap-srfc-server および sap-trfc-server) は、次の URI オプションをサポートしています。
| 名前 | デフォルト | 説明 |
|---|---|---|
|
|
|
|
|
|
|
(sap-trfc-server エンドポイントのみ) |
3.88.3.3. IDoc List Server エンドポイントのオプション リンクのコピーリンクがクリップボードにコピーされました!
SAP IDoc List Server エンドポイント (sap-idoclist-server) は、次の URI オプションをサポートしています。
| 名前 | デフォルト | 説明 |
|---|---|---|
|
|
|
|
|
|
|
|
3.88.3.4. RFC および IDoc エンドポイントの概要 リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントパッケージは、次の RFC および IDoc エンドポイントを提供します。
sap-srfc-destinationCamel SAP Synchronous Remote Function Call Destination Camel コンポーネント。このエンドポイントは、Camel ルートが SAP システムへのリクエストと SAP システムからのレスポンスの同期配信を必要とする場合に使用する必要があります。
注記このコンポーネントで使用される sRFC プロトコルは、SAP システムとの間でリクエストとレスポンスを ベストエフォート で配信します。リクエストの送信中に通信エラーが発生した場合、受信側の SAP システムでのリモート関数呼び出しの完了ステータスは 不明 のままです。
sap-trfc-destinationCamel SAP Transactional Remote Function Call Destination Camel コンポーネント。このエンドポイントは、リクエストを受信側の SAP システムに 最大 1 回 配信する必要がある場合に使用する必要があります。これを達成するために、コンポーネントはトランザクション ID
tidを生成します。この ID は、ルートのエクスチェンジでコンポーネントを介して送信されるすべてのリクエストに付随します。受信側の SAP システムは、リクエストを配信する前に、リクエストに付随するtidを記録します。SAP システムが同じtidのリクエストを再度受信した場合、リクエストは配信されません。したがって、このコンポーネントのエンドポイントを介してリクエストを送信するときにルートで通信エラーが発生した場合、ルートは同じリクエスト内でリクエストの送信を再試行できますが、配信と実行は 1 回だけです。注記このコンポーネントで使用される tRFC プロトコルは非同期であり、レスポンスを返しません。したがって、このコンポーネントのエンドポイントはレスポンスメッセージを返しません。
注記このコンポーネントは、エンドポイントを介した一連のリクエストの順序を保証しません。これらのリクエストの配信および実行順序は、通信エラーやリクエストの再送信により、受信側の SAP システムで異なる場合があります。配送順序の保証は、Camel SAP Queued Remote Function Call Destination Camel コンポーネントを参照してください。
sap-qrfc-destinationCamel SAP Queued Remote Function Call Destination Camel コンポーネント。このコンポーネントは、Transactional Remote Function Call Destination camel コンポーネントの機能を、そのエンドポイントを介したリクエストの配信に 順番に 配信保証を追加することで拡張します。このエンドポイントは、一連のリクエストが相互に依存しており、受信側の SAP システムに 最大 1 回、順番に 配信する必要がある場合に使用する必要があります。このコンポーネントは、Camel SAP Transactional Remote Function Call Destination Camel コンポーネントと同じメカニズムを使用して、最大 1 回 の配信保証を実現します。順序の保証は、SAP システムが受信した順序でリクエストを 受信キュー にシリアル化することによって実現されます。受信キューは、SAP 内の QIN スケジューラー によって処理されます。インバウンドキューが アクティブ化される と、QIN スケジューラーはキューリクエストを順番に実行します。
注記このコンポーネントで使用される qRFC プロトコルは非同期であり、レスポンスを返しません。したがって、このコンポーネントのエンドポイントはレスポンスメッセージを返しません。
sap-srfc-server- Camel SAP Synchronous Remote Function Call Server Camel コンポーネント。このコンポーネントとそのエンドポイントは、SAP システムからの要求と SAP システムへの応答を同期的に処理するために Camel ルートが必要な場合に使用する必要があります。
sap-trfc-server-
Camel SAP Transactional Remote Function Call Server Camel コンポーネント。このエンドポイントは、送信側の SAP システムがリクエストを Camel ルートに 最大 1 回 配信する必要がある場合に使用する必要があります。これを実現するために、送信側の SAP システムは、コンポーネントのエンドポイントに送信するすべてのリクエストに付随するトランザクション ID
tidを生成します。送信側の SAP システムは、tidに関連付けられた一連のリクエストを送信する前に、コンポーネントが特定のtidを受信したかどうかを最初にチェックします。コンポーネントは、保持している受信tidのリストをチェックし、送信されたtidがそのリストにない場合は記録し、送信 SAP システムに応答して、tidがすでに記録されているかどうかを示します。送信側の SAP システムは、tidが以前に記録されていない場合にのみ、一連のリクエストを送信します。これにより、送信側の SAP システムは一連のリクエストを確実に camel ルートに 1 回送信できます。 sap-idoc-destination- Camel SAP IDoc Destination Camel コンポーネント。このエンドポイントは、Camel ルートが Intermediate Documents (IDoc) のリストを SAP システムに送信する場合に使用する必要があります。
sap-idoclist-destination- Camel SAP IDoc List Destination Camel コンポーネント。このエンドポイントは、Camel ルートが Intermediate Documents (IDoc) リストのリストを SAP システムに送信する場合に使用する必要があります。
sap-qidoc-destination- Camel SAP Queued IDoc Destination Camel コンポーネント。このコンポーネントとそのエンドポイントは、中間ドキュメント (IDoc) のリストを順番に SAP システムに送信するために Camel ルートが必要な場合に使用する必要があります。
sap-qidoclist-destination- Camel SAP Queued IDoc List Destination Camel コンポーネント。このコンポーネントとそのエンドポイントは、キャメルルートが Intermediate Documents (IDoc) リストを順番に SAP システムに送信する場合に使用されます。
sap-idoclist-server-
Camel SAP IDoc List Server Camel コンポーネント。このエンドポイントは、送信側の SAP システムが中間ドキュメントリストを Camel ルートに配信する必要がある場合に使用する必要があります。このコンポーネントは、
sap-trfc-server-standaloneクイックスタートで説明されているように、tRFC プロトコルを使用して SAP と通信します。
3.88.3.5. SAP RFC 宛先エンドポイント リンクのコピーリンクがクリップボードにコピーされました!
RFC 宛先エンドポイントは、SAP へのアウトバウンド通信をサポートします。これにより、これらのエンドポイントは、SAP の ABAP 関数モジュールへの RFC 呼び出しを行うことができます。RFC 宛先エンドポイントは、SAP インスタンスへの特定の接続を介して特定の ABAP 関数への RFC 呼び出しを行うように設定されています。RFC 宛先は、アウトバウンド接続の論理的な指定であり、一意の名前を持っています。RFC 宛先は、宛先データ と呼ばれる一連の接続パラメーターによって指定されます。
RFC 宛先エンドポイントは、受信した IN-OUT エクスチェンジの入力メッセージから RFC リクエストを抽出し、そのリクエストを関数呼び出しで SAP にディスパッチします。関数呼び出しからのレスポンスは、エクスチェンジの出力メッセージで返されます。SAP RFC 宛先エンドポイントはアウトバウンド通信のみをサポートするため、RFC 宛先エンドポイントは producer の作成のみをサポートします。
3.88.3.6. SAP RFC サーバーエンドポイント リンクのコピーリンクがクリップボードにコピーされました!
RFC サーバーエンドポイントは、SAP からのインバウンド通信をサポートします。これにより、SAP の ABAP アプリケーションがサーバーエンドポイントに対して RFC 呼び出しを行うことができます。ABAP アプリケーションは、リモート関数モジュールであるかのように RFC サーバーエンドポイントと対話します。RFC サーバーエンドポイントは、SAP インスタンスから特定の接続を介して特定の RFC 関数への RFC 呼び出しを受信するように設定されています。RFC サーバーは、インバウンド接続の論理的な指定であり、一意の名前を持っています。RFC サーバーは、サーバーデータ と呼ばれる一連の接続パラメーターによって指定されます。
RFC サーバーエンドポイントは、入力 RFC リクエストを処理し、それを IN-OUT エクスチェンジの入力メッセージとしてディスパッチします。エクスチェンジの出力メッセージは、RFC 呼び出しのレスポンスとして返されます。SAP RFC サーバーエンドポイントはインバウンド通信のみをサポートするため、RFC サーバーエンドポイントは consumer の作成のみをサポートします。
3.88.3.7. SAP IDoc および IDoc リストの宛先エンドポイント リンクのコピーリンクがクリップボードにコピーされました!
IDoc 宛先エンドポイントは、SAP へのアウトバウンド通信をサポートします。SAP は、IDoc メッセージに対してさらに処理を実行できます。IDoc ドキュメントはビジネストランザクションを表し、非 SAP システムと簡単にエクスチェンジできます。IDoc 宛先は、宛先データ と呼ばれる一連の接続パラメーターによって指定されます。
IDoc リスト宛先エンドポイントは、処理するメッセージが IDoc ドキュメントの リスト で構成されていることを除けば、IDoc 宛先エンドポイントと似ています。
3.88.3.8. SAP IDoc リストサーバーエンドポイント リンクのコピーリンクがクリップボードにコピーされました!
IDoc リストサーバーエンドポイントは、SAP からのインバウンド通信をサポートし、Camel ルートが SAP システムから IDoc ドキュメントのリストを受信できるようにします。IDoc リストサーバーは、サーバーデータ と呼ばれる一連の接続パラメーターによって指定されます。
3.88.3.9. メタデータリポジトリー リンクのコピーリンクがクリップボードにコピーされました!
メタデータリポジトリーは、次の種類のメタデータを格納するために使用されます。
- 汎用モジュールのインタフェース説明
- このメタデータは、JCo および ABAP ランタイムによって使用され、RFC 呼び出しをチェックして、それらの呼び出しをディスパッチする前に、通信パートナー間でタイプセーフなデータ転送を保証します。リポジトリーには、リポジトリーデータが取り込まれます。リポジトリーデータは、名前付き関数テンプレートのマップです。関数テンプレートには、関数モジュールとの間で渡されるすべてのパラメーターとその入力情報を記述するメタデータが含まれており、関数テンプレートが説明する関数モジュールの一意の名前が付けられています。
- IDoc タイプの説明
- このメタデータは、IDoc ランタイムによって使用され、IDoc ドキュメントが通信パートナーに送信される前に正しくフォーマットされていることを確認します。基本的な IDoc タイプは、名前、許可されたセグメントのリスト、およびセグメント間の階層関係の説明で構成されます。いくつかの追加の制約をセグメントに課すことができます。セグメントは必須またはオプションにすることができます。また、各セグメントの最小/最大範囲を指定することができます (そのセグメントの許容反復回数を定義します)。
したがって、SAP 宛先およびサーバーエンドポイントは、RFC 呼び出しを送受信し、IDoc ドキュメントを送受信するために、リポジトリーへのアクセスを必要とします。RFC 呼び出しの場合、エンドポイントによって呼び出されて処理されるすべての機能モジュールのメタデータは、リポジトリー内に存在する必要があります。IDoc エンドポイントの場合、エンドポイントによって処理されるすべての IDoc タイプおよび IDoc タイプ拡張のメタデータは、リポジトリー内に存在する必要があります。宛先およびサーバーエンドポイントによって使用されるリポジトリーの場所は、それぞれの接続の宛先データおよびサーバーデータで指定されます。
SAP 宛先エンドポイントの場合、使用するリポジトリーは通常、SAP システムに存在し、接続先の SAP システムにデフォルト設定されます。このデフォルトでは、宛先データに明示的な設定は必要ありません。さらに、宛先エンドポイントが行うリモート関数呼び出しのメタデータは、それが呼び出す既存の関数モジュールのリポジトリーにすでに存在します。したがって、宛先エンドポイントによって行われる呼び出しのメタデータは、SAP コンポーネントで設定する必要はありません。
一方、サーバーエンドポイントによって処理される関数呼び出しのメタデータは、通常、SAP システムのリポジトリーには存在せず、代わりに SAP コンポーネントに存在するリポジトリーによって提供される必要があります。SAP コンポーネントは、名前付きメタデータリポジトリーのマップを維持します。リポジトリーの名前は、メタデータを提供するサーバーの名前に対応しています。
3.88.4. 設定 リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントは、宛先データ、サーバーデータ、およびリポジトリーデータを格納する 3 つのマップを維持します。宛先データストア と サーバーデータストア は、SAP コンポーネントに自動的に注入される特別な設定オブジェクト SapConnectionConfiguration で設定されます。リポジトリーデータストア は、関連する SAP コンポーネントで直接設定する必要があります。
3.88.4.1. 設定の概要 リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントは、宛先データ、サーバーデータ、およびリポジトリーデータを格納する 3 つのマップを維持します。コンポーネントのプロパティー destinationDataStore は宛先名をキーとする宛先データを格納し、プロパティー serverDataStore はサーバー名をキーとするサーバーデータを格納し、プロパティー repositoryDataStore はリポジトリー名をキーとするリポジトリーデータを格納します。これらの設定は、初期化中にコンポーネントに渡す必要があります。
例
次の例は、サンプルの宛先データストアとサンプルのサーバーデータストアを設定する方法を示しています。sap-configuration Bean (SapConnectionConfiguration 型) は、このアプリケーションで使用される SAP コンポーネントに自動的に注入されます。
public class SAPRouteBuilder extends RouteBuilder {
@BindToRegistry("sap-configuration")
public SapConnectionConfiguration sapConfiguration() {
SapConnectionConfiguration configuration = new SapConnectionConfiguration();
configuration.setDestinationDataStore(destinationData());
configuration.setServerDataStore(serverData());
return configuration;
}
/**
* Configures an Inbound SAP Connection
* Please enter the connection property values for your environment
*/
private Map<String, ServerData> serverData() {
ServerData data = new ServerDataImpl();
data.setGwhost("example.com");
data.setGwserv("3300");
data.setProgid("QUICKSTART");
data.setRepositoryDestination("quickstartDest");
data.setConnectionCount("2");
return Map.of("quickstartServer", data);
}
/**
* Configures an Outbound SAP Connection
* Please enter the connection property values for your environment
*/
private Map<String, DestinationData> destinationData() {
DestinationData data = new DestinationDataImpl();
data.setAshost("example.com");
data.setSysnr("00");
data.setClient("000");
data.setUser("username");
data.setPasswd("password");
data.setLang("en");
return Map.of("quickstartDest", data);
}
@Override
public void configure() throws Exception {
// Routes definitions
}
}
値は、application.properties ファイルから指定できます。その場合、ハードコードされた値の代わりにプロパティー名を使用できます。
以下に例を示します。
ConfigProvider.getConfig().getValue("<property name>", String.class)
3.88.4.2. 宛先設定 リンクのコピーリンクがクリップボードにコピーされました!
宛先の設定は、SAP コンポーネントの destinationDataStore プロパティーで維持されます。このマップの各エントリーは、SAP インスタンスへの個別のアウトバウンド接続を設定します。各エントリーのキーはアウトバウンド接続の名前であり、URI 形式のセクションで説明されているように、宛先エンドポイント URI の destinationName コンポーネントで使用されます。
各エントリーの値は、アウトバウンド SAP 接続の設定を指定する宛先データ設定オブジェクト (org.fusesource.camel.component.sap.model.rfc.impl.DestinationDataImpl) です。
サンプル宛先設定
次のコードは、quickstartDest という名前のサンプルの宛先を設定する方法を示しています。
@BindToRegistry("sap-configuration")
public SapConnectionConfiguration sapConfiguration() {
SapConnectionConfiguration configuration = new SapConnectionConfiguration();
configuration.setDestinationDataStore(destinationData());
return configuration;
}
private Map<String, DestinationData> destinationData() {
DestinationData data = new DestinationDataImpl();
data.setAshost("example.com");
data.setSysnr("00");
data.setClient("000");
data.setUser("username");
data.setPasswd("password");
data.setLang("en");
return Map.of("quickstartDest", data);
}
@Override
public void configure() throws Exception {
((DefaultCamelContext) getCamelContext()).addInterceptStrategy(new CurrentProcessorDefinitionInterceptStrategy());
// Routes definitions
}
上記のように宛先を設定した後、次の URI を使用して、quickstartDest 宛先で BAPI_FLCUST_GETLIST リモート関数呼び出しを呼び出すことができます。
sap-srfc-destination:quickstartDest:BAPI_FLCUST_GETLIST
3.88.4.2.1. tRFC および qRFC 宛先のインターセプター リンクのコピーリンクがクリップボードにコピーされました!
前のサンプル宛先設定は、CurrentProcessorDefinitionInterceptStrategy オブジェクトのインスタンス化を示しています。このオブジェクトは、Camel ランタイムにインターセプターをインストールします。これにより、Camel SAP コンポーネントは、RFC トランザクションの処理中に Camel ルート内の位置を追跡できます。
このインターセプターは、トランザクション RFC 宛先エンドポイント (sap-trfc-destination や sap-qrfc-destination など) にとって非常に重要であり、アウトバウンドトランザクション RFC 通信を適切に管理するには、Camel ランタイムにインストールする必要があります。ストラテジーが実行時に見つからない場合、Destination RFC Transaction Handlers は Camel ログに警告を発行します。この状況では、アウトバウンドのトランザクション RFC 通信を適切に管理するために、Camel ランタイムを再プロビジョニングして再起動する必要があります。
3.88.4.2.2. ログオンと認証オプション リンクのコピーリンクがクリップボードにコピーされました!
次の表に、SAP 宛先データストアで宛先を設定するための ログオンオプションと認証 オプションを示します。
| 名前 | デフォルト値 | 説明 |
|
| SAP クライアント、必須ログオンパラメーター | |
|
| ログオンユーザー、パスワードベースの認証用のログオンパラメーター。 | |
|
| ログオンユーザーエイリアスは、ログオンユーザーの代わりに使用できます。 | |
|
| ABAP AS へのログオンに使用されるユーザー ID。宛先設定が認証に SSO/アサーションチケット、証明書、現在のユーザー、または SNC 環境を使用する場合、JCo ランタイムによって使用されます。ユーザーもユーザー別名も設定されていない場合、ユーザー ID は必須です。この ID は SAP バックエンドに送信されることはなく、JCo ランタイムによってローカルで使用されます。 | |
|
| ログオンパスワード、パスワードベースの認証用のログオンパラメーター。 | |
|
| ログオン言語。定義されていない場合は、デフォルトのユーザー言語が使用されます。 | |
|
| 指定された SAP Cookie バージョン 2 を、SSO ベースの認証のログオンチケットとして使用します。 | |
|
| 指定された X509 証明書を証明書ベースの認証に使用します。 | |
|
| 最初の呼び出しまで認証を延期する - 1 (有効)。特別な場合にのみ使用されます。 | |
|
| 表示または非表示の SAP GUI を使用するか、SAP GUI を使用しません。 | |
|
| ログオンパラメーターの変換に使用されるコードページを定義する追加のログオンパラメーター。特別な場合にのみ使用されます。 | |
|
| ログオン後に SSO チケットを注文すると、取得したチケットは宛先属性で使用できます。 | |
|
|
|
3.88.4.2.3. 接続オプション リンクのコピーリンクがクリップボードにコピーされました!
次の表に、SAP 宛先データストアで宛先を設定するための 接続 オプションを示します。
| 名前 | デフォルト値 | 説明 |
|
|
SAP ルーターの背後にあるシステムに接続するための SAP ルーター文字列。SAP ルーター文字列には、一連の SAP ルーターとそのポート番号が含まれており、 | |
|
| SAP ABAP アプリケーションサーバーのシステム番号、直接接続に必須。 | |
|
| SAP ABAP アプリケーションサーバー、直接接続に必須。 | |
|
| SAP メッセージサーバー、負荷分散接続の必須プロパティー。 | |
|
|
SAP メッセージサーバーポート。負荷分散接続のオプションプロパティー。サービス名 sapmsXXX を解決するために、 | |
|
| アプリケーションサーバーへの接続を確立するために使用する具体的なゲートウェイを指定できます。指定しない場合、アプリケーションサーバーのゲートウェイが使用されます。 | |
|
| gwhost を使用する場合に設定する必要があります。そのゲートウェイで使用されるポートを指定できます。指定しない場合、アプリケーションサーバーのゲートウェイのポートが使用されます。サービス名 sapgwXXX を解決するために、etc/services のルックアップがオペレーティングシステムのネットワーク層によって実行されます。シンボリックサービス名の代わりにポート番号を使用する場合、ルックアップは実行されず、追加のエントリーは必要ありません。 | |
|
| SAP システムのシステム ID。負荷分散接続の必須プロパティー。 | |
|
| SAP アプリケーションサーバーのグループ、負荷分散接続の必須プロパティー。 | |
|
|
|
パフォーマンスを最適化するには、JCo とターゲットシステム間のネットワーク品質に応じてこの値を設定します。有効な値は |
|
|
|
有効な値は、 |
3.88.4.2.4. 接続プールのオプション リンクのコピーリンクがクリップボードにコピーされました!
次の表に、SAP 宛先データストアで宛先を設定するための 接続プール オプションを示します。
| 名前 | デフォルト値 | 説明 |
|
|
|
宛先に対して同時に作成できるアクティブなアウトバウンド接続の最大数。値を |
|
|
|
宛先によって開いたままのアイドル状態のアウトバウンド接続の最大数。値 |
|
| 宛先によって内部的に保持されている空き接続を閉じることができるまでの時間 (ミリ秒)。 | |
|
| 宛先が解放された接続の有効期限をチェックするまでのミリ秒単位の期間。 | |
|
| アプリケーションによって最大許容数の接続がすでに割り当てられている場合に、接続を待機する最大時間 (ミリ秒)。 |
3.88.4.2.5. 安全なネットワーク接続オプション リンクのコピーリンクがクリップボードにコピーされました!
次の表に、SAP 宛先データストアで宛先を設定するための セキュアなネットワーク オプションを示します。
| 名前 | デフォルト値 | 説明 |
|
|
セキュアなネットワーク接続 (SNC) モード、 | |
|
|
SNC パートナー、例: | |
|
|
セキュリティーの SNC レベル、 | |
|
| 独自の SNC 名。環境設定をオーバーライドします。 | |
|
| SNC サービスを提供するライブラリーへのパス。 |
3.88.4.2.6. リポジトリーオプション リンクのコピーリンクがクリップボードにコピーされました!
次の表に、SAP 宛先データストアで宛先を設定するための リポジトリー オプションを示します。
| 名前 | デフォルト値 | 説明 |
|
| リポジトリーとして使用される宛先を指定します。 | |
|
| リポジトリーの宛先が設定されておらず、このプロパティーが設定されている場合、リポジトリー呼び出しのユーザーとして使用されます。これにより、リポジトリーの検索に別のユーザーを使用できます。 | |
|
| リポジトリーユーザーのパスワード。リポジトリーユーザーを使用する場合は必須です。 | |
|
|
(オプション) この宛先に SNC が使用されている場合、このプロパティーが | |
|
|
プロパティーが設定されていない場合、宛先は最初にリモート呼び出しを実行して、 注記: リポジトリーがすでに初期化されている場合 (たとえば、他の宛先で使用されているため)、このプロパティーは効果がありません。通常、このプロパティーは ABAP システムに関連しており、同じ ABAP システムを指すすべての宛先で同じ値を持つ必要があります。バックエンドの前提条件は、ノート 1456826 を参照してください。 |
3.88.4.2.7. トレース設定オプション リンクのコピーリンクがクリップボードにコピーされました!
次の表に、SAP 宛先データストアで宛先を設定するための トレース設定 オプションを示します。
| 名前 | デフォルト値 | 説明 |
|
|
RFC トレースを有効/無効にする ( | |
|
|
CPIC トレースを有効/無効にする |
3.88.4.3. サーバー設定 リンクのコピーリンクがクリップボードにコピーされました!
サーバーの設定は、SAP コンポーネントの serverDataStore プロパティーで維持されます。このマップの各エントリーは、SAP インスタンスからの個別のインバウンド接続を設定します。各エントリーのキーはアウトバウンド接続の名前であり、URI 形式のセクションで説明されているように、サーバーエンドポイント URI の serverName コンポーネントで使用されます。
各エントリーの値は、インバウンド SAP 接続の設定を定義する サーバーデータ設定オブジェクト、org.fusesource.camel.component.sap.model.rfc.impl.ServerDataImpl です。
サンプルサーバー設定
次のコードは、quickstartServer という名前のサンプルのサーバー設定を作成する方法を示しています。
@BindToRegistry("sap-configuration")
public SapConnectionConfiguration sapConfiguration() {
SapConnectionConfiguration configuration = new SapConnectionConfiguration();
configuration.setDestinationDataStore(destinationData());
configuration.setServerDataStore(serverData());
return configuration;
}
/**
* Configures an Inbound SAP Connection
* Please enter the connection property values for your environment
*/
private Map<String, ServerData> serverData() {
ServerData data = new ServerDataImpl();
data.setGwhost("example.com");
data.setGwserv("3300");
data.setProgid("QUICKSTART");
data.setRepositoryDestination("quickstartDest");
data.setConnectionCount("2");
return Map.of("quickstartServer", data);
}
/**
* Configures an Outbound SAP Connection
* Please enter the connection property values for your environment
*/
private Map<String, DestinationData> destinationData() {
DestinationData data = new DestinationDataImpl();
data.setAshost("example.com");
data.setSysnr("00");
data.setClient("000");
data.setUser("username");
data.setPasswd("password");
data.setLang("en");
return Map.of("quickstartDest", data);
}
この例では、サーバーがリモート SAP インスタンスからメタデータを取得するために使用する宛先接続 quickstartDest も設定します。この宛先は、repositoryDestination オプションを介してサーバーデータで設定されます。このオプションを設定しない場合は、代わりにローカルメタデータリポジトリーを作成する必要があります。
上記のように宛先を設定した後、次の URI を使用して、呼び出し元クライアントからの quickstartDest リモート関数呼び出しで BAPI_FLCUST_GETLIST リモート関数呼び出しを処理できます。
sap-srfc-server:quickstartServer:BAPI_FLCUST_GETLIST
3.88.4.3.1. 必須オプション リンクのコピーリンクがクリップボードにコピーされました!
サーバーデータ設定オブジェクトに必要なオプションは次のとおりです。
| 名前 | デフォルト値 | 説明 |
|
| サーバー接続を登録するゲートウェイホスト。 | |
|
|
登録を行うことができるポートであるゲートウェイサービス。サービス名 | |
|
| 登録が行われたプログラム ID。ゲートウェイおよび ABAP システムの宛先で ID として機能します。 | |
|
| リモート SAP サーバーでホストされているメタデータリポジトリーからメタデータを取得するためにサーバーが使用できる宛先名を指定します。 | |
|
| ゲートウェイに登録する必要がある接続の数。 |
3.88.4.3.2. 安全なネットワーク接続オプション リンクのコピーリンクがクリップボードにコピーされました!
サーバーデータ設定オブジェクトの安全なネットワーク接続オプションは次のとおりです。
| 名前 | デフォルト値 | 説明 |
|
|
セキュアなネットワーク接続 (SNC) モード、 | |
|
|
セキュリティーの SNC レベル、 | |
|
|
サーバーの SNC 名。デフォルトの SNC 名を上書きします。通常、 | |
|
|
SNC サービスを提供するライブラリーへのパス。このプロパティーが指定されていない場合は、代わりに |
3.88.4.3.3. その他のオプション リンクのコピーリンクがクリップボードにコピーされました!
サーバーデータ設定オブジェクトのその他のオプションは次のとおりです。
| 名前 | デフォルト値 | 説明 |
|
|
その ABAP システムのゲートウェイでサーバーを登録するときに、ファイアウォールによって保護されているため、SAProuter を介してのみアクセスできるシステムに使用する SAP ルーター文字列。一般的なルーター文字列は | |
|
| 失敗した場合の 2 回の起動試行間の最大時間 (秒単位)。待機時間は、起動に失敗するたびに最初の 1 秒から 2 倍になり、最大値に達するか、サーバーが正常に起動できるようになります。 | |
|
|
RFC トレースを有効/無効にする ( | |
|
|
サーバー接続で使用されるスレッドの最大数。設定されていない場合、 | |
|
|
サーバー接続で使用されるスレッドの最小数。設定されていない場合、 |
3.88.4.4. リポジトリーの設定 リンクのコピーリンクがクリップボードにコピーされました!
リポジトリーの設定は、SAP コンポーネントの repositoryDataStore プロパティーで維持されます。このマップの各エントリーは、個別のリポジトリーを設定します。各エントリーのキーはリポジトリーの名前であり、このキーはこのリポジトリーが接続されているサーバーの名前にも対応しています。
各エントリーの値は、メタデータリポジトリーのコンテンツを定義するリポジトリーデータ設定オブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RepositoryDataImpl です。リポジトリーデータオブジェクトは、機能テンプレート設定オブジェクト org.fuesource.camel.component.sap.model.rfc.impl.FunctionTemplateImpl のマップです。このマップの各エントリーは汎用モジュールのインタフェースを指定し、各エントリーのキーは指定された汎用モジュールの名前です。
リポジトリーデータの例
次のコードは、メタデータリポジトリーを設定する簡単な例を示しています。
@BindToRegistry("sap-configuration")
public SapConnectionConfiguration sapConfiguration() {
SapConnectionConfiguration configuration = new SapConnectionConfiguration();
configuration.setRepositoryDataStore(repositoryData());
return configuration;
}
private Map<String, RepositoryData> repositoryData() {
RepositoryData data = new RepositoryDataImpl();
FunctionTemplate bookFlightFunctionTemplate = new FunctionTemplateImpl();
data.setFunctionTemplates(Map.of("BOOK_FLIGHT", bookFlightFunctionTemplate));
return Map.of("nplServer", data);
}
3.88.4.4.1. 関数テンプレートのプロパティー リンクのコピーリンクがクリップボードにコピーされました!
汎用モジュールのインタフェースは、RFC コールでデータが汎用モジュールとの間でやり取りされる 4 つのパラメーターリストで構成されています。各パラメーターリストは 1 つ以上のフィールドで構成され、それぞれが RFC コールで転送される名前付きパラメーターです。次のパラメーターリストと例外リストがサポートされています。
- インポートパラメーターリスト には、RFC コールで汎用モジュールに送信されるパラメーター値が含まれています。
- エクスポートパラメーターリスト には、RFC コールで汎用モジュールによって返されるパラメーター値が含まれています。
- 変更パラメーター一覧 には、RFC コールで汎用モジュールとの間で送受信されるパラメーター値が含まれています。
- テーブルパラメーター一覧 には、RFC コールで汎用モジュールとの間で送受信される内部テーブル値が含まれています。
- 汎用モジュールのインタフェースは、モジュールが RFC コールで呼び出されたときに発生する可能性のある ABAP 例外の 例外リスト も含まれます。
関数テンプレートは、関数インターフェイスの各パラメーターリスト内のパラメーターの名前と型、および関数によって出力される ABAP 例外を記述します。関数テンプレートオブジェクトは、次の表に示すように、メタデータオブジェクトの 5 つのプロパティーリストを保持します。
| プロパティー | 説明 |
|
|
リストフィールドメタデータオブジェクトのリスト、 |
|
|
リストフィールドメタデータオブジェクトのリスト、 |
|
|
リストフィールドメタデータオブジェクトのリスト、 |
|
|
リストフィールドメタデータオブジェクトのリスト、 |
|
|
ABAP 例外メタデータオブジェクトのリスト、 |
関数テンプレートの例
次の例は、関数テンプレートを設定する方法の概要を示しています。
FunctionTemplate bookFlightFunctionTemplate = new FunctionTemplateImpl();
List<ListFieldMetaData> metaDataList = new ArrayList<>();
ListFieldMetaData metaData = new ListFieldMetaDataImpl();
// configure values
metaData.setName("example");
metaDataList.add(metaData);
bookFlightFunctionTemplate.setImportParameterList(metaDataList);
// in the same way you can configure other parameters
bookFlightFunctionTemplate.setExportParameterList(...);
bookFlightFunctionTemplate.setChangingParameterList(...);
bookFlightFunctionTemplate.setExceptionList(...);
bookFlightFunctionTemplate.setTableParameterList(...);
3.88.4.4.2. リストフィールドのメタデータプロパティー リンクのコピーリンクがクリップボードにコピーされました!
リストフィールドメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMeataDataImpl は、パラメーターリスト内のフィールドの名前とタイプを指定します。基本パラメーターフィールド (CHAR、DATE、BCD、TIME、BYTE、NUM、FLOAT、INT、INT1、INT2、DECF16、DECF34、STRING、XSTRING) の場合、リストフィールドメタデータオブジェクトに設定できる設定プロパティーを次の表に示します。
| 名前 | デフォルト値 | 説明 |
|
| - | パラメーターフィールドの名前。 |
|
| - | フィールドのパラメータータイプ。 |
|
| - | 非 Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。 |
|
| - | Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。 |
|
|
| フィールド値の 10 進数の数。パラメータータイプ BCD および FLOAT の場合は必須です。 |
|
|
|
|
すべての基本パラメーターフィールドでは、フィールドメタデータオブジェクトで name、type、byteLength、および unicodeByteLength プロパティーを指定する必要があることに注意してください。さらに、BCD、FLOAT、DECF16、および DECF34 フィールドでは、フィールドメタデータオブジェクトで decimal プロパティーを指定する必要があります。
タイプ TABLE または STRUCTURE の複雑なパラメーターフィールドの場合、次の表に、リストフィールドメタデータオブジェクトに設定できる設定プロパティーを示します。
| 名前 | デフォルト値 | 説明 |
|
| - | パラメーターフィールドの名前。 |
|
| - | フィールドのパラメータータイプ。 |
|
| - |
構造またはテーブルのメタデータ。レコードメタデータオブジェクト |
|
|
|
|
すべての複合パラメーターフィールドでは、フィールドメタデータオブジェクトで name、type、および recordMetaData プロパティーを指定する必要があります。recordMetaData プロパティーの値は、レコードフィールドメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl で あり、ネストされた構造の構造またはテーブル行の構造を指定します。
基本リストフィールドのメタデータの例
次のメタデータ設定では、オプションの TICKET_PRICE という名前の小数点以下 2 桁の 24 桁のパックされた BCD 数値パラメーターを指定します。
ListFieldMetaData metaData = new ListFieldMetaDataImpl();
metaData.setName("TICKET_PRICE");
metaData.setType(DataType.BCD);
metaData.setByteLength(12);
metaData.setUnicodeByteLength(24);
metaData.setDecimals(2);
metaData.setOptional(true);
複雑なリストフィールドのメタデータの例
次のメタデータ設定では、connectionInfo レコードメタデータオブジェクトによって行構造が指定された、CONNINFO という名前の必須の TABLE パラメーターを指定します。
ListFieldMetaData metaData = new ListFieldMetaDataImpl();
metaData.setName("CONNINFO");
metaData.setType(DataType.TABLE);
RecordMetaData connectionInfo = new RecordMetaDataImpl();
metaData.setRecordMetaData(connectionInfo);
3.88.4.4.3. レコードのメタデータのプロパティー リンクのコピーリンクがクリップボードにコピーされました!
レコードメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl は、ネストされた STRUCTURE または TABLE パラメーターの行の名前と内容を指定します。レコードメタデータオブジェクトは、レコードフィールドメタデータオブジェクトのリスト org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl を維持します。これは、ネストされた構造またはテーブル行に存在するパラメーターを指定します。
次の表に、レコードメタデータオブジェクトに設定できる設定プロパティーを示します。
| 名前 | デフォルト値 | 説明 |
|
| - | レコードの名前。 |
|
| - |
レコードフィールドメタデータオブジェクトのリスト、 |
レコードメタデータオブジェクトのすべてのプロパティーが必要です。
レコードメタデータの例
次の例は、レコードメタデータオブジェクトを設定する方法を示しています。
RecordMetaData connectionInfo = new RecordMetaDataImpl();
connectionInfo.setName("CONNECTION_INFO");
connectionInfo.setRecordFieldMetaData(...);
3.88.4.4.4. レコードフィールドのメタデータプロパティー リンクのコピーリンクがクリップボードにコピーされました!
レコードフィールドメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl は、構造体でパラメーターフィールドの名前とタイプを指定します。
レコードフィールドメタデータオブジェクトは、ネストされた構造またはテーブル行内の個々のフィールド位置のオフセットを追加で指定する必要があることを除いて、パラメーターフィールドメタデータオブジェクトに似ています。個々のフィールドの非 Unicode オフセットと Unicode オフセットは、構造体または行内の前のフィールドの非 Unicode バイト長と Unicode バイト長の合計から計算して指定する必要があります。
ネストされた構造およびテーブル行のフィールドのオフセットを適切に指定しないと、基礎となる JCo および ABAP ランタイムのパラメーターのフィールドストレージが重複し、RFC コールでの値の適切な転送が妨げられるます。
基本パラメーターフィールド (CHAR、DATE、BCD、TIME、BYTE、NUM、FLOAT、INT、INT1、INT2、DECF16、DECF34、STRING、XSTRING) の場合、レコードフィールドメタデータオブジェクトに設定できる設定プロパティーを次の表に示します。
| 名前 | デフォルト値 | 説明 |
|
| - | パラメーターフィールドの名前。 |
|
| - | フィールドのパラメータータイプ。 |
|
| - | 非 Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。 |
|
| - | Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。 |
|
| - | 非 Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。 |
|
| - | Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。 |
|
|
|
フィールド値の小数点以下の桁数。パラメータータイプ |
タイプ TABLE または STRUCTURE の複雑なパラメーターフィールドの場合、次の表に、レコードフィールドメタデータオブジェクトに設定できる設定プロパティーを示します。
| 名前 | デフォルト値 | 説明 |
|
| - | パラメーターフィールドの名前。 |
|
| - | フィールドのパラメータータイプ。 |
|
| - | 非 Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。 |
|
| - | Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。 |
|
| - |
構造またはテーブルのメタデータ。レコードメタデータオブジェクト |
基本レコードフィールドのメタデータの例
次のメタデータ設定は、ARRDATE という名前の DATE フィールドパラメーターを指定します。これは、非 Unicode レイアウトの場合は囲んでいる構造の 85 バイト、Unicode レイアウトの場合は囲んでいる構造の 170 バイトに配置されています。
FieldMetaData fieldMetaData = new FieldMetaDataImpl();
fieldMetaData.setName("FLTINFO");
fieldMetaData.setType(DataType.STRUCTURE);
fieldMetaData.setByteOffset(0);
fieldMetaData.setUnicodeByteOffset(0);
RecordMetaData flightInfo = new RecordMetaDataImpl();
fieldMetaData.setRecordMetaData(flightInfo);
複雑なレコードフィールドのメタデータの例
次のメタデータ設定は、flightInfo レコードメタデータオブジェクトによって指定された構造を持つ FLTINFO という名前の STRUCTURE フィールドパラメーターを指定します。パラメーターは、非 Unicode レイアウトと Unicode レイアウトの両方の場合に、囲んでいる構造の先頭に配置されます。
FieldMetaData fieldMetaData = new FieldMetaDataImpl();
fieldMetaData.setName("FLTINFO");
fieldMetaData.setType(DataType.STRUCTURE);
fieldMetaData.setByteOffset(0);
fieldMetaData.setUnicodeByteOffset(0);
RecordMetaData flightInfo = new RecordMetaDataImpl();
fieldMetaData.setRecordMetaData(flightInfo);
3.88.5. メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントは、次のメッセージヘッダーをサポートしています。
| ヘッダー | 説明 |
|
|
メッセージを処理する最後のエンドポイントの URI スキーム。次の値のいずれかを使用します。
|
|
| メッセージを処理する最後の宛先エンドポイントの宛先名。 |
|
| メッセージを処理する最後のサーバーエンドポイントのサーバー名。 |
|
| メッセージを処理する最後のキューエンドポイントのキュー名。 |
|
| メッセージを処理する最後の RFC エンドポイントの RFC 名。 |
|
| メッセージを処理する最後の IDoc エンドポイントの IDoc タイプ。 |
|
| メッセージを処理する最後の IDoc エンドポイントの IDoc タイプ拡張 (存在する場合)。 |
|
| メッセージを処理する最後の IDoc エンドポイントのシステムリリース (存在する場合)。 |
|
| メッセージを処理する最後の IDoc エンドポイントのアプリケーションリリース (存在する場合)。 |
3.88.6. エクスチェンジプロパティー リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントは、次のエクスチェンジプロパティーを追加します。
| プロパティー | 説明 |
|
|
エクスチェンジによって検出された各 SAP 宛先のプロパティーを含むマップ。マップは宛先名によってキー付けされ、各エントリーはその宛先の設定プロパティーを含む |
|
|
エクスチェンジによって検出された各 SAP サーバーのプロパティーを含むマップ。マップはサーバー名でキー付けされ、各エントリーはそのサーバーの設定プロパティーを含む |
3.88.7. RFC のメッセージボディー リンクのコピーリンクがクリップボードにコピーされました!
3.88.7.1. リクエストおよびレスポンスオブジェクト リンクのコピーリンクがクリップボードにコピーされました!
SAP エンドポイントは、SAP リクエストオブジェクトを含むメッセージボディーを含むメッセージを受信することを想定しており、SAP レスポンスオブジェクトを含むメッセージボディーを含むメッセージを返します。SAP のリクエストとレスポンスは、各フィールドが事前定義されたデータ型を持つ名前付きフィールドを含む固定マップデータ構造です。
SAP リクエストとレスポンスの名前付きフィールドは、SAP エンドポイントに固有であり、各エンドポイントが受け入れる SAP リクエストとレスポンスのパラメーターを定義することに注意してください。SAP エンドポイントは、それに固有のリクエストとレスポンスオブジェクトを作成するファクトリーメソッドを提供します。
public class SAPEndpoint ... {
...
public Structure getRequest() throws Exception;
public Structure getResponse() throws Exception;
...
}
3.88.7.2. 構造物オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
SAP 要求オブジェクトと応答オブジェクトは両方とも、org.fusesource.camel.component.sap.model.rfc.Structure インターフェイスをサポートする構造オブジェクトとして Java で表されます。このインターフェイスは、java.util.Map インターフェイスと org.eclipse.emf.ecore.EObject インターフェイスの両方を拡張します。
public interface Structure extends org.eclipse.emf.ecore.EObject,
java.util.Map<String, Object> {
<T> T get(Object key, Class<T> type);
}
構造体オブジェクトのフィールド値には、マップインターフェイスのフィールドの getter メソッドを介してアクセスします。さらに、構造体インターフェイスは、フィールド値を取得するための型制限されたメソッドを提供します。
構造オブジェクトは、Eclipse モデリングフレームワーク (EMF) を使用してコンポーネントランタイムに実装され、そのフレームワークの EObject インターフェイスをサポートします。構造オブジェクトのインスタンスには、それが提供するフィールドのマップの構造と内容を定義および制限するメタデータが添付されています。このメタデータには、EMF が提供する標準的な方法を使用してアクセスし、イントロスペクションすることができます。詳細は、EMF のドキュメントを参照してください。
構造体オブジェクトで定義されていないパラメーターを取得しようとすると、null が返されます。構造体で定義されていないパラメーターを設定しようとすると、例外が出力され、パラメーターの値を正しくない型で設定しようとします。
次のセクションで説明するように、構造体オブジェクトには、複合フィールド型 STRUCTURE および TABLE の値を含むフィールドを含めることができます。
これらの型のインスタンスを作成して構造体に追加する必要はありません。これらのフィールド値のインスタンスは、必要に応じて、囲んでいる構造にアクセスするときにオンデマンドで作成されます。
3.88.7.3. フィールドの種類 リンクのコピーリンクがクリップボードにコピーされました!
SAP リクエストまたはレスポンスの構造オブジェクト内に存在するフィールドは、基本 または 複合 のいずれかです。基本フィールドには単一のスカラー値が含まれますが、複合フィールドには基本タイプまたは複合タイプのフィールドが 1 つ以上含まれます。
3.88.7.3.1. 基本フィールドの種類 リンクのコピーリンクがクリップボードにコピーされました!
基本フィールドは、文字、数値、16 進数、または文字列のフィールドタイプです。次の表は、構造体オブジェクトに存在する可能性のある基本フィールドのタイプをまとめたものです。
| フィールドタイプ | 対応 Java 型 | バイト長 | Unicode バイト長 | 数 小数 桁 | 説明 |
|
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'C': 固定サイズの文字列。 |
|
|
| 8 | 16 | - | ABAP タイプ 'D': 日付 (形式: YYYYMMDD)。 |
|
|
| 1 から 16 | 1 から 16 | 0 から 14 | ABAP タイプ 'P': パックされた BCD 番号。BCD 番号には、1 バイトあたり 2 桁が含まれます。 |
|
|
| 6 | 12 | - | ABAP タイプ 'T': 時間 (形式: HHMMSS)。 |
|
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'X': 固定サイズのバイト配列。 |
|
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'N': 固定サイズの数値文字列。 |
|
|
| 8 | 8 | 0 から 15 | ABAP タイプ 'F': 浮動小数点数。 |
|
|
| 4 | 4 | - | ABAP タイプ 'I': 4 バイト整数。 |
|
|
| 2 | 2 | - | ABAP タイプ 'S': 2 バイト整数。 |
|
|
| 1 | 1 | - | ABAP タイプ 'B': 1 バイト整数。 |
|
|
| 8 | 8 | 16 | ABAP タイプ 'decfloat16': 8 バイトの 10 進浮動小数点数。 |
|
|
| 16 | 16 | 34 | ABAP タイプ 'decfloat34': 16 バイトの 10 進浮動小数点数。 |
|
|
| 8 | 8 | - | ABAP タイプ 'G': 可変長文字列。 |
|
|
| 8 | 8 | - | ABAP タイプ 'Y': 可変長バイト配列。 |
3.88.7.3.2. 文字フィールドの種類 リンクのコピーリンクがクリップボードにコピーされました!
文字フィールドには、基礎となる JCo および ABAP ランタイムで非 Unicode または Unicode 文字エンコーディングを使用できる固定サイズの文字列が含まれます。非 Unicode 文字列は、1 バイトあたり 1 文字をエンコードします。Unicode 文字列は、UTF-16 エンコーディングを使用して 2 バイトでエンコードされます。文字フィールドの値は、Java では java.lang.String オブジェクトとして表され、基礎となる JCo ランタイムが ABAP 表現への変換を担当します。
文字フィールドは、関連する byteLength および unicodeByteLength プロパティーでそのフィールド長を宣言します。これらのプロパティーは、各エンコーディングシステムでのフィールドの文字列の長さを決定します。
CHAR-
CHAR文字項目は、英数字を含むテキスト項目であり、ABAP タイプ C に対応します。 NUM-
NUM文字フィールドは、数字のみを含む数値テキストフィールドであり、ABAP タイプ N に対応します。 DATE-
DATE文字フィールドは、年、月、日がYYYYMMDDとしてフォーマットされた 8 文字の日付フィールドであり、ABAP タイプ D に対応します。 TIME-
TIME文字フィールドは、時、分、および秒がHHMMSSとしてフォーマットされた 6 文字の時間フィールドであり、ABAP タイプ T に対応します。
3.88.7.3.3. 数値フィールドの種類 リンクのコピーリンクがクリップボードにコピーされました!
数値フィールドには数値が含まれています。次の数値フィールドタイプがサポートされています。
INT-
INT数値フィールドは、基礎となる JCo および ABAP ランタイムで 4 バイトの整数値として格納される整数フィールドであり、ABAP タイプ I に対応します。INTフィールド値は、Java ではjava.lang.Integerオブジェクトとして表されます。 INT2-
INT2数値フィールドは、基礎となる JCo および ABAP ランタイムに 2 バイトの整数値として格納される整数フィールドであり、ABAP タイプ S に対応します。INT2フィールド値は、Java ではjava.lang.Integerオブジェクトとして表されます。 INT1-
INT1フィールドは、基になる JCo および ABAP ランタイム値に 1 バイトの整数値として格納される整数フィールドであり、ABAP タイプ B に対応します。INT1フィールド値は、Java ではjava.lang.Integerオブジェクトとして表されます。 FLOAT-
FLOATフィールドは、基礎となる JCo および ABAP ランタイムに 8 バイトの double 値として格納される 2 進浮動小数点数フィールドであり、ABAP タイプ F に対応します。FLOATフィールドは、フィールドの値が関連する小数プロパティー。FLOATフィールドの場合、この 10 進プロパティーは 1 ~ 15 桁の値を持つことができます。FLOATフィールド値は、Java ではjava.lang.Doubleオブジェクトとして表されます。 BCD-
BCDフィールドは、基礎となる JCo および ABAP ランタイムで 1 から 16 バイトのパック数として保管される 2 進化 10 進フィールドであり、ABAP タイプ P に対応します。パック数は、1 バイトあたり 2 桁の 10 進数を保管します。BCDフィールドは、関連するbyteLengthおよびunicodeByteLengthプロパティーでフィールド長を宣言します。BCDフィールドの場合、これらのプロパティーは 1 ~ 16 バイトの値を持つことができ、両方のプロパティーが同じ値になります。BCDフィールドは、関連付けられた decimal プロパティーで、フィールドの値に含まれる 10 進数の桁数を宣言します。BCDフィールドの場合、この 10 進プロパティーは 1 ~ 14 桁の値を持つことができます。BCDフィールド値は、Java ではjava.math.BigDecimalとして表されます。 DECF16-
DECF16フィールドは、基礎となる JCo および ABAP ランタイムで 8 バイトの IEEE 754 decimal64 浮動小数点値として格納される 10 進浮動小数点であり、ABAP タイプdecfloat16に対応します。DECF16フィールドの値は、10 進数で 16 桁です。DECF16フィールドの値は、Java ではjava.math.BigDecimalとして表されます。 DECF34-
DECF34フィールドは、基礎となる JCo および ABAP ランタイムで 16 バイトの IEEE 754 decimal128 浮動小数点値として格納される 10 進浮動小数点であり、ABAP タイプdecfloat34に対応します。DECF34フィールドの値には、34 桁の 10 進数があります。DECF34フィールドの値は、Java ではjava.math.BigDecimalとして表されます。
3.88.7.3.4. 16 進フィールドタイプ リンクのコピーリンクがクリップボードにコピーされました!
16 進数フィールドには生のバイナリーデータが含まれます。次の 16 進数フィールドタイプがサポートされています。
BYTE-
BYTEフィールドは、基礎となる JCo および ABAP ランタイムにバイト配列として格納される固定サイズのバイト文字列であり、ABAP タイプ X に対応します。BYTEフィールドは、関連するbyteLengthおよびunicodeByteLengthプロパティーでフィールド長を宣言します。BYTEフィールドの場合、これらのプロパティーは 1 ~ 65535 バイトの値を持つことができ、両方のプロパティーが同じ値になります。BYTEフィールドの値は、Java ではbyte[]オブジェクトとして表されます。
3.88.7.3.5. 文字列フィールドの種類 リンクのコピーリンクがクリップボードにコピーされました!
文字列フィールドは、可変長の文字列値を参照します。その文字列値の長さは実行時まで固定されません。文字列値のストレージは、基礎となる JCo および ABAP ランタイムで動的に作成されます。文字列フィールド自体のストレージは固定されており、文字列ヘッダーのみが含まれています。
STRING-
STRINGフィールドは、基礎となる JCo および ABAP ランタイムに 8 バイト値として格納された文字列を参照します。ABAP タイプ G に対応します。STRING項目の値は、Java ではjava.lang.Stringオブジェクトとして表されます。 XSTRING-
XSTRINGフィールドは、基礎となる JCo および ABAP ランタイムに 8 バイト値として格納されたバイト文字列を参照します。ABAP タイプ Y に対応します。STRING項目の値は、Java ではbyte[]オブジェクトとして表されます。
3.88.7.3.6. 複雑なフィールドタイプ リンクのコピーリンクがクリップボードにコピーされました!
複合フィールドは、構造体またはテーブルフィールドタイプのいずれかです。次の表は、これらの複雑なフィールドタイプをまとめたものです。
| フィールドタイプ | 対応 Java 型 | バイト長 | Unicode バイト長 | 数 小数 桁 | 説明 |
|
|
| 個々のフィールドのバイト長の合計 | 個々のフィールドの Unicode バイト長の合計 | - | ABAP タイプ 'u' および 'v': 異種構造 |
|
|
| 行構造体のバイト長 | 行構造体の Unicode バイト長 | - | ABAP タイプ 'h': テーブル |
3.88.7.3.7. 構造体フィールドタイプ リンクのコピーリンクがクリップボードにコピーされました!
STRUCTURE 項目には構造オブジェクトが含まれ、基礎となる JCo および ABAP ランタイムに ABAP 構造レコードとして格納されます。ABAP タイプ u または v のいずれかに対応します。STRUCTURE 項目の値は、Java ではインターフェイス org.fusesource.camel.component.sap.model.rfc.Structure を持つ構造オブジェクトとして表されます。
3.88.7.3.8. テーブルフィールドタイプ リンクのコピーリンクがクリップボードにコピーされました!
TABLE フィールドにはテーブルオブジェクトが含まれ、基礎となる JCo および ABAP ランタイムに ABAP 内部テーブルとして格納されます。ABAP タイプ h に対応します。フィールドの値は、インタフェース org.fusesource.camel.component.sap.model.rfc.Table を持つテーブルオブジェクトによって Java で表されます。
3.88.7.3.9. テーブルオブジェクト リンクのコピーリンクがクリップボードにコピーされました!
テーブルオブジェクトは、同じ構造を持つ構造オブジェクトの行を含む同種のリストデータ構造です。このインターフェイスは、java.util.List インターフェイスと org.eclipse.emf.ecore.EObject インターフェイスの両方を拡張します。
public interface Table<S extends Structure>
extends org.eclipse.emf.ecore.EObject,
java.util.List<S> {
/**
* Creates and adds a table row at the end of the row list
*/
S add();
/**
* Creates and adds a table row at the index in the row list
*/
S add(int index);
}
テーブルオブジェクト内の行のリストは、リストインターフェイスで定義された標準メソッドを使用してアクセスおよび管理されます。さらに、テーブルインターフェイスは、構造体オブジェクトを作成して行リストに追加するための 2 つのファクトリーメソッドを提供します。
テーブルオブジェクトは、Eclipse Modeling Framework (EMF) を使用してコンポーネントランタイムに実装され、そのフレームワークの EObject インターフェイスをサポートします。テーブルオブジェクトのインスタンスには、それが提供する行の構造と内容を定義および制限するメタデータが添付されています。このメタデータには、EMF が提供する標準的な方法を使用してアクセスし、イントロスペクションすることができます。詳細は、EMF のドキュメントを参照してください。
間違った型の行構造値を追加または設定しようとすると、例外が出力されます。
3.88.8. IDoc のメッセージ本文 リンクのコピーリンクがクリップボードにコピーされました!
3.88.8.1. IDoc メッセージタイプ リンクのコピーリンクがクリップボードにコピーされました!
IDoc Camel SAP エンドポイントの 1 つを使用する場合、メッセージ本文のタイプは、使用している特定のエンドポイントによって異なります。
sap-idoc-destination エンドポイントまたは sap-qidoc-destination エンドポイントの場合、メッセージ本文は Document タイプです。
org.fusesource.camel.component.sap.model.idoc.Document
sap-idoclist-destination エンドポイント、sap-qidoclist-destination エンドポイント、または sap-idoclist-server エンドポイントの場合、メッセージボディーは DocumentList タイプです。
org.fusesource.camel.component.sap.model.idoc.DocumentList
3.88.8.2. IDoc 文書モデル リンクのコピーリンクがクリップボードにコピーされました!
Camel SAP コンポーネントの場合、IDoc ドキュメントは、基礎となる SAP IDoc API のラッパー API を提供する Eclipse Modeling Framework (EMF) を使用してモデル化されます。このモデルで最も重要なタイプは次のとおりです。
org.fusesource.camel.component.sap.model.idoc.Document
org.fusesource.camel.component.sap.model.idoc.Segment
Document タイプは、IDoc ドキュメントインスタンスを表します。概説すると、Document インターフェイスは次のメソッドを公開します。
// Java
package org.fusesource.camel.component.sap.model.idoc;
...
public interface Document extends EObject {
// Access the field values from the IDoc control record
String getArchiveKey();
void setArchiveKey(String value);
String getClient();
void setClient(String value);
...
// Access the IDoc document contents
Segment getRootSegment();
}
次の種類のメソッドが Document インターフェイスによって公開されます。
- 制御レコードにアクセスする方法
- ほとんどのメソッドは、IDoc 制御レコードのフィールド値にアクセスまたは変更するためのものです。これらのメソッドの形式は AttributeName です。ここで、AttributeName はフィールド値の名前です。
- ドキュメントコンテンツへのアクセス方法
getRootSegmentメソッドは、ドキュメントコンテンツ (IDoc データレコード) へのアクセスを提供し、コンテンツをSegmentオブジェクトとして返します。各Segmentオブジェクトには任意の数の子セグメントを含めることができ、セグメントは任意の程度にネストできます。ただし、セグメント階層の正確なレイアウトは、文書の特定の IDoc タイプ によって定義されることに注意してください。したがって、セグメント階層を作成 (または読み取り) するときは、IDoc タイプによって定義された正確な構造に従う必要があります。
Segment タイプは、IDoc ドキュメントのデータレコードにアクセスするために使用されます。セグメントは、ドキュメントの IDoc タイプによって定義された構造に従って配置されます。概説すると、Segment インターフェイスは次のメソッドを公開します。
// Java
package org.fusesource.camel.component.sap.model.idoc;
...
public interface Segment extends EObject, java.util.Map<String, Object> {
// Returns the value of the '<em><b>Parent</b></em>' reference.
Segment getParent();
// Return an immutable list of all child segments
<S extends Segment> EList<S> getChildren();
// Returns a list of child segments of the specified segment type.
<S extends Segment> SegmentList<S> getChildren(String segmentType);
EList<String> getTypes();
Document getDocument();
String getDescription();
String getType();
String getDefinition();
int getHierarchyLevel();
String getIdocType();
String getIdocTypeExtension();
String getSystemRelease();
String getApplicationRelease();
int getNumFields();
long getMaxOccurrence();
long getMinOccurrence();
boolean isMandatory();
boolean isQualified();
int getRecordLength();
<T> T get(Object key, Class<T> type);
}
getChildren (String segmentType) メソッドは、新しい (ネストされた) 子をセグメントに追加する場合に特に便利です。次のように定義されているタイプ SegmentList のオブジェクトを返します。
// Java
package org.fusesource.camel.component.sap.model.idoc;
...
public interface SegmentList<S extends Segment> extends EObject, EList<S> {
S add();
S add(int index);
}
したがって、E1SCU_CRE タイプのデータレコードを作成するには、次のような Java コードを使用できます。
Segment rootSegment = document.getRootSegment();
Segment E1SCU_CRE_Segment = rootSegment.getChildren("E1SCU_CRE").add();
3.88.9. ドキュメント属性 リンクのコピーリンクがクリップボードにコピーされました!
IDoc ドキュメント属性の表に、Document オブジェクトに設定できる制御レコード属性を示します。
| 属性 | 長さ | SAP フィールド | 説明 |
|---|---|---|---|
|
| 70 |
| EDI アーカイブキー |
|
| 3 |
| クライアント |
|
| 8 |
| IDoc が作成された日付 |
|
| 6 |
| IDoc が作成された時間 |
|
| 1 |
| 方向 |
|
| 14 |
| メッセージ参照 |
|
| 14 |
| メッセージグループへの参照 |
|
| 6 |
| EDI メッセージタイプ |
|
| 1 |
| EDI 規格 |
|
| 6 |
| EDI 規格のバージョン |
|
| 14 |
| エクスチェンジファイルへの参照 |
|
| 8 |
| IDoc タイプ |
|
| 16 |
| IDoc 番号 |
|
| 4 |
| IDoc の SAP リリース |
|
| 30 |
| 基本 IDoc タイプの名前 |
|
| 30 |
| 拡張タイプの名前 |
|
| 3 |
| 論理メッセージコード |
|
| 3 |
| 論理メッセージ機能 |
|
| 30 |
| 論理メッセージタイプ |
|
| 1 |
| 出力モード |
|
| 10 |
| 受信者アドレス (SADR) |
|
| 70 |
| 受信者の論理アドレス |
|
| 2 |
| 受信者のパートナー機能 |
|
| 10 |
| 受信機のパートナー番号 |
|
| 2 |
| 受信者のパートナータイプ |
|
| 10 |
| 受信側ポート (SAP システム、EDI サブシステム) |
|
|
| 送信者アドレス (SADR) | |
|
| 70 |
| 送信者の論理アドレス |
|
| 2 |
| 差出人のパートナー機能 |
|
| 10 |
| 送信者のパートナー番号 |
|
| 2 |
| 送信者のパートナータイプ |
|
| 10 |
| 送信側ポート (SAP システム、EDI サブシステム) |
|
| 20 |
| EDI/ALE: シリアル化フィールド |
|
| 2 |
| IDoc のステータス |
|
| 1 |
| テストフラグ |
3.88.9.1. Java でドキュメント属性を設定する リンクのコピーリンクがクリップボードにコピーされました!
Java で制御レコード属性を設定する場合、Java Bean プロパティーの通常の規則に従います。つまり、属性値を取得および設定するために、getName および setName メソッドを介して name 属性にアクセスできます。たとえば、iDocType、iDocTypeExtension、および messageType 属性は、Document オブジェクトで次のように設定できます。
// Java
document.setIDocType("FLCUSTOMER_CREATEFROMDATA01");
document.setIDocTypeExtension("");
document.setMessageType("FLCUSTOMER_CREATEFROMDATA");
3.88.9.2. XML でドキュメント属性を設定する リンクのコピーリンクがクリップボードにコピーされました!
XML で制御レコード属性を設定する場合、idoc:Document 要素に属性を設定する必要があります。たとえば、iDocType、iDocTypeExtension および messageType 属性は次のように設定できます。
<?xml version="1.0" encoding="ASCII"?>
<idoc:Document ...
iDocType="FLCUSTOMER_CREATEFROMDATA01"
iDocTypeExtension=""
messageType="FLCUSTOMER_CREATEFROMDATA" ... >
...
</idoc:Document>
3.88.10. トランザクションサポート リンクのコピーリンクがクリップボードにコピーされました!
3.88.10.1. BAPI トランザクションモデル リンクのコピーリンクがクリップボードにコピーされました!
SAP コンポーネントは、SAP とのアウトバウンド通信用に BAPI トランザクションモデルをサポートしています。true に設定されたトランザクションオプションを含む URL を持つ宛先エンドポイントは、必要に応じて、エンドポイントのアウトバウンド接続でステートフルセッションを開始し、Camel Synchronization オブジェクトをエクスチェンジに登録します。この Synchronization オブジェクトは、BAPI サービスメソッド BAPI_TRANSACTION_COMMIT を呼び出し、メッセージエクスチェンジの処理が完了するとステートフルセッションを終了します。メッセージエクスチェンジの処理が失敗した場合、Synchronization オブジェクトは BAPI サーバーメソッド BAPI_TRANSACTION_ROLLBACK を呼び出し、ステートフルセッションを終了します。
3.88.10.2. RFC トランザクションモデル リンクのコピーリンクがクリップボードにコピーされました!
tRFC プロトコルは、一意のトランザクション識別子 (TID) で各トランザクション要求を識別することにより、AT-MOST-ONCE の配信と処理の保証を実現します。TID は、プロトコルで送信される各要求に付随します。tRFC プロトコルを使用する送信側アプリケーションは、要求を送信するときに、要求の各インスタンスを一意の TID で識別する必要があります。アプリケーションは、特定の TID を持つリクエストを複数回送信できますが、プロトコルは、リクエストが受信側システムで配信され、処理されるのは多くても 1 回であることを保証します。アプリケーションは、要求の送信時に通信エラーまたはシステムエラーが発生した場合に、指定された TID を使用してリクエストを再送信することを選択できます。したがって、そのリクエストが受信側システムで配信および処理されたかどうかは不明です。通信エラーが発生したときにリクエストを再送信することにより、tRFC プロトコルを使用するクライアントアプリケーションは、そのリクエストの配信と処理を確実に 1 回だけ保証できます。
3.88.10.3. どのトランザクションモデルを使用するか? リンクのコピーリンクがクリップボードにコピーされました!
BAPI トランザクションは、SAP データベースで BAPI メソッドまたは RFC 関数によって実行される永続的なデータ変更に ACID 保証を課すという意味で、アプリケーションレベルのトランザクションです。RFC トランザクションは、BAPI メソッドや RFC 機能への要求に対して配信保証 (AT-MOST-ONCE、EXACTLY-ONCE、EXACTLY-ONCE-IN-ORDER) を課すという意味で、通信トランザクションです。
3.88.10.4. トランザクション RFC 宛先エンドポイント リンクのコピーリンクがクリップボードにコピーされました!
次の宛先エンドポイントは、RFC トランザクションをサポートしています。
-
sap-trfc-destination -
sap-qrfc-destination
単一の Camel ルートには、複数のトランザクション RFC 宛先エンドポイントを含めることができ、複数の RFC 宛先にメッセージを送信したり、同じ RFC 宛先に複数回メッセージを送信したりすることもできます。これは、Camel SAP コンポーネントが、ルートを通過する各 Exchange オブジェクトの 多く のトランザクション ID (TID) を追跡する必要がある可能性があることを意味します。ルート処理が失敗し、再試行する必要がある場合、状況は非常に複雑になります。RFC トランザクションセマンティクスは、ルート上の各 RFC 宛先が、最初に使用されたのと 同じ TID を使用して呼び出されることを要求します (各宛先の TID が互いに異なる場合)。つまり、Camel SAP コンポーネントは、ルート上のどのポイントでどの TID が使用されたかを追跡し、この情報を記憶して、TID を正しい順序で再生できるようにする必要があります。
デフォルトでは、Camel は Exchange がルートのどこにいるかを知ることができるメカニズムを提供しません。このようなメカニズムを提供するには、CurrentProcessorDefinitionInterceptStrategy インターセプターを Camel ランタイムにインストールする必要があります。Camel SAP コンポーネントがルート内の TID を追跡するには、このインターセプターを Camel ランタイムにインストールする必要があります。
3.88.10.5. トランザクション RFC サーバーエンドポイント リンクのコピーリンクがクリップボードにコピーされました!
次のサーバーエンドポイントは、RFC トランザクションをサポートしています。
-
sap-trfc-server
トランザクションリクエストを処理する Camel エクスチェンジで処理エラーが発生すると、Camel は標準のエラー処理メカニズムを通じて処理エラーを処理します。エクスチェンジを処理する Camel ルートがエラーを呼び出し元に伝播するように設定されている場合、エクスチェンジを開始した SAP サーバーエンドポイントは失敗を記録し、送信側の SAP システムにエラーが通知されます。送信側の SAP システムは、同じ TID を持つ別のトランザクションリクエストを送信して応答し、リクエストを再度処理できます。
3.88.11. RFC の XML シリアライゼーション リンクのコピーリンクがクリップボードにコピーされました!
SAP 要求および応答オブジェクトは、これらのオブジェクトを XML ドキュメントとの間でシリアル化できるようにする XML シリアル化形式をサポートしています。
3.88.11.1. XML 名前空間 リンクのコピーリンクがクリップボードにコピーされました!
リポジトリー内の各 RFC は、リクエストオブジェクトとレスポンスオブジェクトのシリアル化された形式を設定する要素に対して、特定の XML 名前空間を定義します。この名前空間 URL の形式は次のとおりです。
http://sap.fusesource.org/rfc>/<Repository Name>/<RFC Name>
RFC 名前空間 URL には、共通の http://sap.fusesource.org/rfc 接頭辞があり、その後に RFC のメタデータが定義されているリポジトリーの名前が続きます。URL の最後のコンポーネントは、RFC 自体の名前です。
3.88.11.2. リクエストとレスポンスの XML ドキュメント リンクのコピーリンクがクリップボードにコピーされました!
SAP リクエストオブジェクトは XML ドキュメントにシリアル化され、そのドキュメントのルート要素は Request という名前で、リクエストの RFC の名前空間によってスコープが設定されます。
<?xml version="1.0" encoding="ASCII"?>
<BOOK_FLIGHT:Request
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
...
</BOOK_FLIGHT:Request>
SAP レスポンスオブジェクトは XML ドキュメントにシリアル化され、そのドキュメントのルート要素は Response という名前で、レスポンス応答の RFC の名前空間によってスコープが設定されます。
<?xml version="1.0" encoding="ASCII"?>
<BOOK_FLIGHT:Response
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
...
</BOOK_FLIGHT:Response>
3.88.11.3. 構造体フィールド リンクのコピーリンクがクリップボードにコピーされました!
パラメーターリストまたはネストされた構造体の構造体フィールドは、要素としてシリアル化されます。シリアル化された構造体の要素名は、それが含まれるパラメーターリスト、構造体、またはテーブルの行エントリー内の構造体のフィールド名に対応します。
<BOOK_FLIGHT:FLTINFO
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
...
</BOOK_FLIGHT:FLTINFO>
次の例のように、RFC 名前空間の構造要素の型名は、構造を定義するレコードメタデータオブジェクトの名前に対応することに注意してください。
<xs:schema
targetNamespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:complexType name="FLTINFO_STRUCTURE”>
...
</xs:complexType>
...
</xs:schema>
この区別は、JAXB Bean を指定して構造をマーシャリングおよびアンマーシャリングする場合に重要になります。
3.88.11.4. テーブルフィールド リンクのコピーリンクがクリップボードにコピーされました!
パラメーターリストまたはネストされた構造のテーブルフィールドは、要素としてシリアル化されます。シリアル化された構造体の要素名は、それが存在する外側のパラメーターリスト、構造体、またはテーブル行エントリー内のテーブルのフィールド名に対応します。テーブル要素には、テーブルの行エントリーのシリアル化された値を保持する一連の行要素が含まれます。
<BOOK_FLIGHT:CONNINFO
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
<row ... > ... </row>
...
<row ... > ... </row>
</BOOK_FLIGHT:CONNINFO>
RFC 名前空間の table 要素の型名は、_TABLE の接尾辞が付いたテーブルの行構造を定義するレコードメタデータオブジェクトの名前に対応することに注意してください。次の例のように、RFC 名のテーブル行要素の型名は、テーブルの行構造を定義するレコードメタデータオブジェクトの名前に対応します。
<xs:schema
targetNamespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:complextType name="CONNECTION_INFO_STRUCTURE_TABLE”>
<xs:sequence>
<xs:element
name="row”
minOccures="0”
maxOccurs="unbounded”
type="CONNECTION_INFO_STRUCTURE”/>
...
<xs:sequence>
</xs:sequence>
</xs:complexType>
<xs:complextType name="CONNECTION_INFO_STRUCTURE”>
...
</xs:complexType>
...
</xs:schema>
この区別は、JAXB Bean を指定して構造をマーシャリングおよびアンマーシャリングする場合に重要になります。
3.88.11.5. Elementary フィールド リンクのコピーリンクがクリップボードにコピーされました!
パラメーターリストまたはネストされた構造体の Elementary フィールドは、囲んでいるパラメーターリストまたは構造体の要素の属性としてシリアル化されます。シリアル化されたフィールドの属性名は、次の例のように、それが存在する囲んでいるパラメーターリスト、構造体、またはテーブル行エントリー内のフィールドのフィールド名に対応します。
<?xml version="1.0" encoding="ASCII"?>
<BOOK_FLIGHT:Request
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"
CUSTNAME="James Legrand"
PASSFORM="Mr"
PASSNAME="Travelin Joe"
PASSBIRTH="1990-03-17T00:00:00.000-0500"
FLIGHTDATE="2014-03-19T00:00:00.000-0400"
TRAVELAGENCYNUMBER="00000110"
DESTINATION_FROM="SFO"
DESTINATION_TO="FRA"/>
3.88.11.6. 日付と時刻の形式 リンクのコピーリンクがクリップボードにコピーされました!
日付と時刻のフィールドは、次の形式を使用して属性値にシリアル化されます。
yyyy-MM-dd'T'HH:mm:ss.SSSZ
日付フィールドは、年、月、日、およびタイムゾーンのコンポーネントセットのみでシリアル化されます。
DEPDATE="2014-03-19T00:00:00.000-0400"
時間フィールドは、時、分、秒、ミリ秒、およびタイムゾーンコンポーネントセットのみでシリアル化されます。
DEPTIME="1970-01-01T16:00:00.000-0500"
3.88.12. IDoc の XML シリアル化 リンクのコピーリンクがクリップボードにコピーされました!
IDoc メッセージ本文は、組み込み型コンバーターを使用して、XML 文字列形式にシリアル化できます。
3.88.12.1. XML 名前空間 リンクのコピーリンクがクリップボードにコピーされました!
シリアル化された各 IDoc は、次の一般的な形式を持つ XML 名前空間に関連付けられています。
http://sap.fusesource.org/idoc/repositoryName/idocType/idocTypeExtension/systemRelease/applicationRelease
repositoryName (リモート SAP メタデータリポジトリーの名前) と idocType (IDoc ドキュメントタイプ) の両方が必須ですが、名前空間の他のコンポーネントは空白のままにすることができます。たとえば、次のような XML 名前空間を持つことができます。
http://sap.fusesource.org/idoc/MY_REPO/FLCUSTOMER_CREATEFROMDATA01///
3.88.12.2. 組み込み型コンバーター リンクのコピーリンクがクリップボードにコピーされました!
Camel SAP コンポーネントには組み込み型コンバーターがあり、Document オブジェクトまたは DocumentList オブジェクトを String 型に変換したり、String 型から変換したりできます。
たとえば、Document オブジェクトを XML 文字列にシリアル化するには、次の行を XML DSL のルートに追加するだけです。
<convertBodyTo type="java.lang.String">;
このアプローチを使用して、シリアライズされた XML メッセージを Document オブジェクトにすることもできます。たとえば、現在のメッセージ本文がシリアル化された XML 文字列である場合、XML DSL のルートに次の行を追加することで、それを Document オブジェクトに戻すことができます。
<convertBodyTo type="org.fusesource.camel.component.sap.model.idoc.Document">
3.88.12.3. XML 形式のサンプル IDoc メッセージ本文 リンクのコピーリンクがクリップボードにコピーされました!
IDoc メッセージを String に変換すると、ルート要素が idoc:Document (単一のドキュメントの場合) または idoc:DocumentList (ドキュメントのリストの場合) のいずれかである XML ドキュメントにシリアライズされます。これは、idoc:Document 要素にシリアライズされた単一の IDoc ドキュメントであることを示しています。
例3.2 XML の IDoc メッセージボディー
<?xml version="1.0" encoding="ASCII"?>
<idoc:Document
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:FLCUSTOMER_CREATEFROMDATA01---="http://sap.fusesource.org/idoc/XXX/FLCUSTOMER_CREATEFROMDATA01///"
xmlns:idoc="http://sap.fusesource.org/idoc"
creationDate="2015-01-28T12:39:13.980-0500"
creationTime="2015-01-28T12:39:13.980-0500"
iDocType="FLCUSTOMER_CREATEFROMDATA01"
iDocTypeExtension=""
messageType="FLCUSTOMER_CREATEFROMDATA"
recipientPartnerNumber="QUICKCLNT"
recipientPartnerType="LS"
senderPartnerNumber="QUICKSTART"
senderPartnerType="LS">
<rootSegment xsi:type="FLCUSTOMER_CREATEFROMDATA01---:ROOT" document="/">
<segmentChildren parent="//@rootSegment">
<E1SCU_CRE parent="//@rootSegment" document="/">
<segmentChildren parent="//@rootSegment/@segmentChildren/@E1SCU_CRE.0">
<E1BPSCUNEW parent="//@rootSegment/@segmentChildren/@E1SCU_CRE.0"
document="/"
CUSTNAME="Fred Flintstone" FORM="Mr."
STREET="123 Rubble Lane"
POSTCODE="01234"
CITY="Bedrock"
COUNTR="US"
PHONE="800-555-1212"
EMAIL="fred@bedrock.com"
CUSTTYPE="P"
DISCOUNT="005"
LANGU="E"/>
</segmentChildren>
</E1SCU_CRE>
</segmentChildren>
</rootSegment>
</idoc:Document>
3.88.13. 例 1: SAP からのデータの読み取り リンクのコピーリンクがクリップボードにコピーされました!
この例は、SAP から FlightCustomer ビジネスオブジェクトデータを読み取るルートを示しています。ルートは、データを取得するために SAP 同期 RFC 宛先エンドポイントを使用して、FlightCustomer BAPI メソッド BAPI_FLCUST_GETLIST を呼び出します。
3.88.13.1. ルートの Java DSL リンクのコピーリンクがクリップボードにコピーされました!
サンプルルートの Java DSL は次のとおりです。
from("direct:getFlightCustomerInfo")
.to("bean:createFlightCustomerGetListRequest")
.to("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST")
.to("bean:returnFlightCustomerInfo");
3.88.13.2. ルートの XML DSL リンクのコピーリンクがクリップボードにコピーされました!
また、同じルートの Spring DSL は次のとおりです。
<route>
<from uri="direct:getFlightCustomerInfo"/>
<to uri="bean:createFlightCustomerGetListRequest"/>
<to uri="sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST"/>
<to uri="bean:returnFlightCustomerInfo"/>
</route>
3.88.13.3. createFlightCustomerGetListRequest bean リンクのコピーリンクがクリップボードにコピーされました!
createFlightCustomerGetListRequest Bean は、後続の SAP エンドポイントの RFC 呼び出しで使用される exchange メソッドで SAP 要求オブジェクトを構築するロールを果たします。次のコードスニペットは、リクエストオブジェクトを作成する一連の操作を示しています。
public void create(Exchange exchange) throws Exception {
// Get SAP Endpoint to be called from context.
SapSynchronousRfcDestinationEndpoint endpoint =
exchange.getContext().getEndpoint("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST",
SapSynchronousRfcDestinationEndpoint.class);
// Retrieve bean from message containing Flight Customer name to
// look up.
BookFlightRequest bookFlightRequest =
exchange.getIn().getBody(BookFlightRequest.class);
// Create SAP Request object from target endpoint.
Structure request = endpoint.getRequest();
// Add Customer Name to request if set
if (bookFlightRequest.getCustomerName() != null &&
bookFlightRequest.getCustomerName().length() > 0) {
request.put("CUSTOMER_NAME",
bookFlightRequest.getCustomerName());
}
} else {
throw new Exception("No Customer Name");
}
// Put request object into body of exchange message.
exchange.getIn().setBody(request);
}
3.88.13.4. returnFlightCustomerInfo bean リンクのコピーリンクがクリップボードにコピーされました!
returnFlightCustomerInfo Bean は、前の SAP エンドポイントから受け取った exchange メソッドで、SAP レスポンスオブジェクトからデータを展開するロールを果たします。次のコードスニペットは、レスポンスオブジェクトからデータを抽出する一連の操作を示しています。
public void createFlightCustomerInfo(Exchange exchange) throws Exception {
// Retrieve SAP response object from body of exchange message.
Structure flightCustomerGetListResponse =
exchange.getIn().getBody(Structure.class);
if (flightCustomerGetListResponse == null) {
throw new Exception("No Flight Customer Get List Response");
}
// Check BAPI return parameter for errors
@SuppressWarnings("unchecked")
Table<Structure> bapiReturn =
flightCustomerGetListResponse.get("RETURN", Table.class);
Structure bapiReturnEntry = bapiReturn.get(0);
if (bapiReturnEntry.get("TYPE", String.class) != "S") {
String message = bapiReturnEntry.get("MESSAGE", String.class);
throw new Exception("BAPI call failed: " + message);
}
// Get customer list table from response object.
@SuppressWarnings("unchecked")
Table<? extends Structure> customerList =
flightCustomerGetListResponse.get("CUSTOMER_LIST", Table.class);
if (customerList == null || customerList.size() == 0) {
throw new Exception("No Customer Info.");
}
// Get Flight Customer data from first row of table.
Structure customer = customerList.get(0);
// Create bean to hold Flight Customer data.
FlightCustomerInfo flightCustomerInfo = new FlightCustomerInfo();
// Get customer id from Flight Customer data and add to bean.
String customerId = customer.get("CUSTOMERID", String.class);
if (customerId != null) {
flightCustomerInfo.setCustomerNumber(customerId);
}
...
// Put bean into body of exchange message.
exchange.getIn().setHeader("flightCustomerInfo", flightCustomerInfo);
}
3.88.14. 例 2: SAP へのデータの書き込み リンクのコピーリンクがクリップボードにコピーされました!
この例は、SAP で FlightTrip ビジネスオブジェクトインスタンスを作成するルートを示しています。ルートは、FlightTrip BAPI メソッド BAPI_FLTRIP_CREATE を呼び出し、宛先エンドポイントを使用してオブジェクトを作成します。
3.88.14.1. ルートの Java DSL リンクのコピーリンクがクリップボードにコピーされました!
サンプルルートの Java DSL は次のとおりです。
from("direct:createFlightTrip")
.to("bean:createFlightTripRequest")
.to("sap-srfc-destination:nplDest:BAPI_FLTRIP_CREATE?transacted=true")
.to("bean:returnFlightTripResponse");
3.88.14.2. ルートの XML DSL リンクのコピーリンクがクリップボードにコピーされました!
また、同じルートの Spring DSL は次のとおりです。
<route>
<from uri="direct:createFlightTrip"/>
<to uri="bean:createFlightTripRequest"/>
<to uri="sap-srfc-destination:nplDest:BAPI_FLTRIP_CREATE?transacted=true"/>
<to uri="bean:returnFlightTripResponse"/>
</route>
3.88.14.3. トランザクションサポート リンクのコピーリンクがクリップボードにコピーされました!
SAP エンドポイントの URL では、transacted オプションが true に設定されていることに注意してください。このオプションを有効にすると、エンドポイントは、RFC 呼び出しを呼び出す前に SAP トランザクションセッションが開始されていることを確認します。このエンドポイントの RFC は SAP で新しいデータを作成するため、ルートの変更を SAP で永続的にするには、このオプションが必要です。
3.88.14.4. リクエストパラメーターの設定 リンクのコピーリンクがクリップボードにコピーされました!
createFlightTripRequest および returnFlightTripResponse Bean は、前の例で示したのと同じ一連の操作に従って、リクエストパラメーターを SAP リクエストに入力し、SAP レスポンスからレスポンスパラメーターをそれぞれ展開します。
3.88.15. 例 3: SAP からのリクエストの処理 リンクのコピーリンクがクリップボードにコピーされました!
この例では、SAP から BOOK_FLIGHT RFC へのリクエストを処理するルートを示します。これは、ルートによって実装されます。さらに、JAXB を使用して SAP リクエストオブジェクトとレスポンスオブジェクトをカスタム Bean にアンマーシャリングおよびマーシャリングする、コンポーネントの XML シリアライゼーションサポートを示します。
このルートは、旅行代理店 FlightCustomer に代わって FlightTrip ビジネスオブジェクトを作成します。ルートは、最初に、SAP サーバーエンドポイントによって受信された SAP リクエストオブジェクトをカスタム JAXB Bean に非整列化します。次に、このカスタム Bean はエクスチェンジで 3 つのサブルートにマルチキャストされ、フライト旅行の作成に必要な旅行代理店、フライト接続、乗客情報が収集されます。最後のサブルートは、前の例で示したように、SAP でフライトトリップオブジェクトを作成します。最後のサブルートは、SAP レスポンスオブジェクトにマーシャリングされ、サーバーエンドポイントによって返されるカスタム JAXB Bean も作成して返します。
3.88.15.1. ルートの Java DSL リンクのコピーリンクがクリップボードにコピーされました!
サンプルルートの Java DSL は次のとおりです。
DataFormat jaxb = new JaxbDataFormat("org.fusesource.sap.example.jaxb");
from("sap-srfc-server:nplserver:BOOK_FLIGHT")
.unmarshal(jaxb)
.multicast()
.to("direct:getFlightConnectionInfo",
"direct:getFlightCustomerInfo",
"direct:getPassengerInfo")
.end()
.to("direct:createFlightTrip")
.marshal(jaxb);
3.88.15.2. ルートの XML DSL リンクのコピーリンクがクリップボードにコピーされました!
同じルートの XML DSL は次のとおりです。
<route>
<from uri="sap-srfc-server:nplserver:BOOK_FLIGHT"/>
<unmarshal>
<jaxb contextPath="org.fusesource.sap.example.jaxb"/>
</unmarshal>
<multicast>
<to uri="direct:getFlightConnectionInfo"/>
<to uri="direct:getFlightCustomerInfo"/>
<to uri="direct:getPassengerInfo"/>
</multicast>
<to uri="direct:createFlightTrip"/>
<marshal>
<jaxb contextPath="org.fusesource.sap.example.jaxb"/>
</marshal>
</route>
3.88.15.3. BookFlightRequest bean リンクのコピーリンクがクリップボードにコピーされました!
次のリストは、シリアライズされた形式の SAP BOOK_FLIGHT リクエストオブジェクトからアンマーシャリングする JAXB Bean を示しています。
@XmlRootElement(name="Request", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class BookFlightRequest {
@XmlAttribute(name="CUSTNAME")
private String customerName;
@XmlAttribute(name="FLIGHTDATE")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date flightDate;
@XmlAttribute(name="TRAVELAGENCYNUMBER")
private String travelAgencyNumber;
@XmlAttribute(name="DESTINATION_FROM")
private String startAirportCode;
@XmlAttribute(name="DESTINATION_TO")
private String endAirportCode;
@XmlAttribute(name="PASSFORM")
private String passengerFormOfAddress;
@XmlAttribute(name="PASSNAME")
private String passengerName;
@XmlAttribute(name="PASSBIRTH")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date passengerDateOfBirth;
@XmlAttribute(name="CLASS")
private String flightClass;
...
}
3.88.15.4. BookFlightResponse Bean リンクのコピーリンクがクリップボードにコピーされました!
次のリストは、シリアライズされた形式の SAP BOOK_FLIGHT レスポンスオブジェクトにマーシャリングする JAXB Bean を示しています。
@XmlRootElement(name="Response", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class BookFlightResponse {
@XmlAttribute(name="TRIPNUMBER")
private String tripNumber;
@XmlAttribute(name="TICKET_PRICE")
private BigDecimal ticketPrice;
@XmlAttribute(name="TICKET_TAX")
private BigDecimal ticketTax;
@XmlAttribute(name="CURRENCY")
private String currency;
@XmlAttribute(name="PASSFORM")
private String passengerFormOfAddress;
@XmlAttribute(name="PASSNAME")
private String passengerName;
@XmlAttribute(name="PASSBIRTH")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date passengerDateOfBirth;
@XmlElement(name="FLTINFO")
private FlightInfo flightInfo;
@XmlElement(name="CONNINFO")
private ConnectionInfoTable connectionInfo;
...
}
レスポンスオブジェクトの複雑なパラメーターフィールドは、応答の子要素としてシリアル化されます。
3.88.15.5. FlightInfo ビーン リンクのコピーリンクがクリップボードにコピーされました!
次のリストは、複雑な構造体パラメーター FLTINFO のシリアル化された形式にマーシャリングする JAXB Bean を示しています。
@XmlRootElement(name="FLTINFO", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class FlightInfo {
@XmlAttribute(name="FLIGHTTIME")
private String flightTime;
@XmlAttribute(name="CITYFROM")
private String cityFrom;
@XmlAttribute(name="DEPDATE")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date departureDate;
@XmlAttribute(name="DEPTIME")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date departureTime;
@XmlAttribute(name="CITYTO")
private String cityTo;
@XmlAttribute(name="ARRDATE")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date arrivalDate;
@XmlAttribute(name="ARRTIME")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date arrivalTime;
...
}
3.88.15.6. ConnectionInfoTable Bean リンクのコピーリンクがクリップボードにコピーされました!
次のリストは、複雑なテーブルパラメーター CONNINFO のシリアル化された形式にマーシャリングする JAXB Bean を示しています。JAXB Bean のルート要素タイプの名前は、接尾辞 _TABLE が付いた行構造体タイプの名前に対応し、Bean には行要素のリストが含まれていることに注意してください。
@XmlRootElement(name="CONNINFO_TABLE", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class ConnectionInfoTable {
@XmlElement(name="row")
List<ConnectionInfo> rows;
...
}
3.88.15.7. ConnectionInfo bean リンクのコピーリンクがクリップボードにコピーされました!
次のリストは、上記のテーブルの行要素のシリアル化された形式にマーシャリングする JAXB Bean を示しています。
@XmlRootElement(name="CONNINFO", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class ConnectionInfo {
@XmlAttribute(name="CONNID")
String connectionId;
@XmlAttribute(name="AIRLINE")
String airline;
@XmlAttribute(name="PLANETYPE")
String planeType;
@XmlAttribute(name="CITYFROM")
String cityFrom;
@XmlAttribute(name="DEPDATE")
@XmlJavaTypeAdapter(DateAdapter.class)
Date departureDate;
@XmlAttribute(name="DEPTIME")
@XmlJavaTypeAdapter(DateAdapter.class)
Date departureTime;
@XmlAttribute(name="CITYTO")
String cityTo;
@XmlAttribute(name="ARRDATE")
@XmlJavaTypeAdapter(DateAdapter.class)
Date arrivalDate;
@XmlAttribute(name="ARRTIME")
@XmlJavaTypeAdapter(DateAdapter.class)
Date arrivalTime;
...
}
3.89. XQuery リンクのコピーリンクがクリップボードにコピーされました!
XQuery および Saxon を使用して XML ペイロードをクエリーまたは変換します。
3.89.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
XQuery コンポーネント、URI 構文:
xquery:resourceUri - XQuery 言語
使用方法と設定の詳細は、上記リンクを参照してください。
3.89.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-saxon</artifactId>
</dependency>
3.89.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、クラスパスから XQuery 定義をロードできます。ネイティブモードでも機能させるには、quarkus.native.resources.includes プロパティーを使用して、クエリーをネイティブ実行可能ファイルに明示的に埋め込む必要があります。
たとえば、以下の 2 つのルートは、それぞれ myxquery.txt および another-xquery.txt という名前の 2 つのクラスパスリソースから XQuery スクリプトをロードします。
from("direct:start").transform().xquery("resource:classpath:myxquery.txt", String.class);
from("direct:start").to("xquery:another-xquery.txt");
これら (.txt ファイルに保存されている可能性のある他のクエリー) をネイティブイメージに含めるには、application.properties ファイルに次のようなものを追加する必要があります。
quarkus.native.resources.includes = *.txt
3.90. Scheduler リンクのコピーリンクがクリップボードにコピーされました!
java.util.concurrent.ScheduledExecutorService を使用して、指定された間隔でメッセージを生成します。
3.90.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Scheduler コンポーネント、URI 構文:
scheduler:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.90.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-scheduler</artifactId>
</dependency>
3.91. SEDA リンクのコピーリンクがクリップボードにコピーされました!
同じ JVM の Camel コンテキストから別のエンドポイントを非同期に呼び出します。
3.91.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
SEDA コンポーネント、URI 構文:
seda:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.91.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-seda</artifactId>
</dependency>
3.92. Servlet リンクのコピーリンクがクリップボードにコピーされました!
Servlet によって HTTP リクエストを処理します。
3.92.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Servlet コンポーネント、URI 構文:
servlet:contextPath
使用方法と設定の詳細は、上記リンクを参照してください。
3.92.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-servlet</artifactId>
</dependency>
3.92.3. ネイティブモードの transferException オプション リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
3.92.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
CamelServlet にアクセスできるパスパターンのコンマ区切りリスト。パスパターンの例: |
| |
|
|
|
|
|
|
|
|
|
CamelServlet にアクセスできるパスパターンのコンマ区切りリスト。パスパターンの例: |
| |
|
|
|
|
|
|
|
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.93. Slack リンクのコピーリンクがクリップボードにコピーされました!
Slack との間でメッセージを送受信します。
3.93.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Slack コンポーネント、URI 構文:
slack:channel
使用方法と設定の詳細は、上記リンクを参照してください。
3.93.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-slack</artifactId>
</dependency>
3.93.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.94. SNMP リンクのコピーリンクがクリップボードにコピーされました!
トラップを受信し、SNMP (Simple Network Management Protocol) 対応デバイスをポーリングします。
3.94.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
SNMP コンポーネント、URI 構文:
snmp:host:port
使用方法と設定の詳細は、上記リンクを参照してください。
3.94.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-snmp</artifactId>
</dependency>
3.95. SOAP dataformat リンクのコピーリンクがクリップボードにコピーされました!
Java オブジェクトを SOAP メッセージにマーシャリングし、その逆も行います。
3.95.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.95.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-soap</artifactId>
</dependency>
3.96. Splunk リンクのコピーリンクがクリップボードにコピーされました!
Splunk でイベントを公開または検索します。
3.96.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Splunk コンポーネント、URI 構文:
splunk:name
使用方法と設定の詳細は、上記リンクを参照してください。
3.96.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-splunk</artifactId>
</dependency>
3.96.3. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.97. Splunk HEC リンクのコピーリンクがクリップボードにコピーされました!
splunk コンポーネントを使用すると、HTTP Event Collector を使用して Splunk でイベントを公開できます。
3.97.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Splunk HEC コンポーネント、URI 構文:
splunk-hec:splunkURL/token
使用方法と設定の詳細は、上記リンクを参照してください。
3.97.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-splunk-hec</artifactId>
</dependency>
3.98. SQL リンクのコピーリンクがクリップボードにコピーされました!
SQL クエリーを実行します。
3.98.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
SQL コンポーネント、URI 構文:
sql:query -
SQL Stored Procedure コンポーネント、URI 構文:
sql-stored:template
使用方法と設定の詳細は、上記リンクを参照してください。
3.98.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-sql</artifactId>
</dependency>
3.98.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.98.3.1. DataSource の設定 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、DataSource のサポートに Quarkus Agroal を活用します。DataSource の設定は、設定プロパティーを介して実行できます。
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=your-username
quarkus.datasource.password=your-password
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/your-database
quarkus.datasource.jdbc.max-size=16
Camel SQL コンポーネントは、レジストリーから DataSource Bean を自動的に解決します。複数のデータソースを設定する場合、URI オプション datasource または dataSourceRef を使用して、SQL エンドポイントで使用するデータソースを指定できます。詳細は、SQL コンポーネントのドキュメントを参照してください。
3.98.3.1.1. Quarkus Dev Services によるゼロ設定 リンクのコピーリンクがクリップボードにコピーされました!
開発モードとテストモードでは、Configuration Free Databases を利用できます。Camel SQL コンポーネントは、選択した JDBC ドライバータイプに一致するデータベースのローカルコンテナー化インスタンスを指す DataSource を使用するように自動的に設定されます。
3.98.3.2. SQL スクリプト リンクのコピーリンクがクリップボードにコピーされました!
クラスパスからスクリプトファイルを参照するために sql または sql-stored エンドポイントを設定する場合は、以下の設定プロパティーを設定して、それらがネイティブモードで利用できるようにします。
quarkus.native.resources.includes = queries.sql, sql/*.sql
3.98.3.3. ネイティブモードでの SQL 集約リポジトリー リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで JdbcAggregationRepository などの SQL 集約リポジトリーを使用するには、ネイティブのシリアライズサポートを有効化 する必要があります。
さらに、エクスチェンジボディがカスタムタイプである場合、クラス宣言に @RegisterForReflection(serialization = true) のアノテーションを付けてシリアライズ用に登録する必要があります。
3.99. Telegram リンクのコピーリンクがクリップボードにコピーされました!
Telegram Bot API として動作するメッセージを送受信します。
3.99.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Telegram コンポーネント、URI 構文:
telegram:type
使用方法と設定の詳細は、上記リンクを参照してください。
3.99.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-telegram</artifactId>
</dependency>
3.99.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.99.4. Webhook モード リンクのコピーリンクがクリップボードにコピーされました!
Telegram エクステンションは、Webhook モードでの使用をサポートしています。
webhook モードを有効化するには、アプリケーションに REST 実装を追加する必要があります。たとえば、Maven ユーザーは、pom.xml ファイルに camel-quarkus-rest エクステンションを追加できます。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-rest</artifactId>
</dependency>
3.99.4.1. Webhook リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Apache Camel for Quarkus のこのリリースでは、Webhook モードはサポートされていません。
3.99.5. ネイティブモードの SSL リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true を application.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。
3.100. Timer リンクのコピーリンクがクリップボードにコピーされました!
java.util.Timer を使用して、指定された間隔でメッセージを生成します。
3.100.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Timer コンポーネント、URI 構文:
timer:timerName
使用方法と設定の詳細は、上記リンクを参照してください。
3.100.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-timer</artifactId>
</dependency>
3.101. Validator リンクのコピーリンクがクリップボードにコピーされました!
XML スキーマと JAXP 検証を使用してペイロードを検証します。
3.101.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Validator コンポーネント、URI 構文:
validator:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.101.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-validator</artifactId>
</dependency>
3.102. Velocity リンクのコピーリンクがクリップボードにコピーされました!
Velocity テンプレートを使用してメッセージを変換します。
3.102.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Velocity コンポーネント、URI 構文:
velocity:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.102.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-velocity</artifactId>
</dependency>
3.102.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.102.3.1. ネイティブモードのドメインオブジェクトとしてのカスタムボディ リンクのコピーリンクがクリップボードにコピーされました!
カスタムオブジェクトをメッセージ本文として使用し、ネイティブモードのテンプレートでそのプロパティーを参照する場合、すべてのクラスをリフレクション用に登録する必要があります (ドキュメント を参照)。
以下に例を示します。
@RegisterForReflection
public interface CustomBody {
}
3.102.4. ネイティブモードの allowContextMapAll オプション リンクのコピーリンクがクリップボードにコピーされました!
allowContextMapAll オプションはネイティブモードではサポートされていません。これは、CamelContext や Exchange などのセキュリティーに敏感な Camel コアクラスへのリフレクティブアクセスが必要なためです。これはセキュリティーリスクとみなされるため、この機能へのアクセスはデフォルトでは提供されません。
3.102.5. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
通常、このコンポーネントはクラスパスから Velocity テンプレートをロードします。ネイティブモードでも機能させるには、quarkus.native.resources.includes プロパティーを使用して、テンプレートをネイティブ実行可能ファイルに明示的に埋め込む必要があります。
たとえば、以下のルートは、template/simple.vm という名前のクラスパスリソースから Velocity テンプレートをロードします。
from("direct:start").to("velocity://template/simple.vm");
これ (template ディレクトリーの .vm ファイルに保存されている可能性のある他のテンプレート) をネイティブイメージに含めるには、次のようなものを application.properties ファイルに追加する必要があります。
quarkus.native.resources.includes = template/*.vm
3.103. Vert.x HTTP クライアント リンクのコピーリンクがクリップボードにコピーされました!
Vert.x による Camel HTTP クライアントのサポート
3.103.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Vert.x HTTP Client コンポーネント、URI 構文:
vertx-http:httpUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.103.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-vertx-http</artifactId>
</dependency>
3.103.3. ネイティブモードの transferException オプション リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
3.103.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.103.5. ネイティブモードの allowJavaSerializedObject オプション リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで allowJavaSerializedObject オプションを使用する場合、シリアル化のサポートを有効にする必要がある場合があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
3.103.5.1. 文字エンコーディング リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが予想される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
3.104. Vert.x WebSocket リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションを使用すると、WebSocket サーバーとして、または既存の WebSocket に接続するクライアントとして機能する WebSocket エンドポイントを作成できます。
これは、quarkus-vertx-http エクステンションによって提供される Eclipse Vert.x HTTP サーバー上にビルドされます。
3.104.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
Vert.x WebSocket コンポーネント、URI 構文:
vertx-websocket:host:port/path
使用方法と設定の詳細は、上記リンクを参照してください。
3.104.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-vertx-websocket</artifactId>
</dependency>
3.104.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.104.3.1. Vert.x WebSocket コンシューマー リンクのコピーリンクがクリップボードにコピーされました!
Vert.x WebSocket コンシューマーを (from ("vertx-websocket") などを使用して) 作成する場合、WebSocket は常に Quarkus HTTP サーバー上でホストされるため、URI 内のホストとポートの設定が冗長になります。
コンシューマーの設定は、簡素化して WebSocket のリソースパスだけを含めることができます。以下に例を示します。
from("vertx-websocket:/my-websocket-path")
.setBody().constant("Hello World");
vertx-websocket コンシューマーでホスト/ポートを明示的に設定する必要はありません。設定する場合、ホストとポートが、quarkus.http.host および quarkus.http.port の Quarkus HTTP サーバー設定値の値と正確に一致する必要があります。一致しないと、実行時に例外が出力されます。
3.104.3.2. Vert.x WebSocket プロデューサー リンクのコピーリンクがクリップボードにコピーされました!
上記と同様に、内部 Vert.x WebSocket コンシューマーへのメッセージを生成する場合は、エンドポイント URI からホストとポートを省略できます。
from("vertx-websocket:/my-websocket-path")
.log("Got body: ${body}");
from("direct:sendToWebSocket")
.log("vertx-websocket:/my-websocket-path");
あるいは、Quarkus HTTP サーバーのホストとポートの完全な設定を参照することもできます。
from("direct:sendToWebSocket")
.log("vertx-websocket:{{quarkus.http.host}}:{{quarkus.http.port}}/my-websocket-path");
外部 WebSocket サーバーへのメッセージを生成する場合は、常にホスト名とポート (必要な場合) を指定する必要があります。
3.104.4. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.104.4.1. Vert.x WebSocket サーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Vert.x WebSocket サーバーの設定は Quarkus によって管理されます。設定オプションの完全なリストは、Quarkus HTTP 設定ガイド を参照してください。
Vert.x WebSocket サーバーの SSL を設定するには、SSL によるセキュアな接続に関するガイド に従ってください。SSLContextParameters を使用した SSL 用のサーバーの設定は現在サポートされていないことに注意してください。
3.104.4.2. 文字エンコーディング リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
3.105. XJ リンクのコピーリンクがクリップボードにコピーされました!
XSLT を使用して、JSON および XML メッセージを変換します。
3.105.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
XJ コンポーネント、URI 構文:
xj:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.105.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-xj</artifactId>
</dependency>
3.106. XML IO DSL リンクのコピーリンクがクリップボードにコピーされました!
XML ルート定義を解析するための XML スタック
3.106.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.106.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-xml-io-dsl</artifactId>
</dependency>
3.106.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
3.106.3.1. XML ファイルのエンコーディング リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、一部の XML ファイルエンコーディングはそのままではネイティブモードで機能しない場合があります。修正方法は、文字エンコーディング のセクションを確認してください。
3.107. XML JAXP リンクのコピーリンクがクリップボードにコピーされました!
XML JAXP タイプコンバーターおよびパーサー
3.107.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-xml-jaxp</artifactId>
</dependency>
3.108. XPath リンクのコピーリンクがクリップボードにコピーされました!
XML ペイロードに対して XPath 式を評価します。
3.108.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.108.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-xpath</artifactId>
</dependency>
3.108.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、クラスパスリソースから xpath 式をロードできます。ネイティブモードでも機能させるには、quarkus.native.resources.includes プロパティーを使用して、式ファイルをネイティブ実行可能ファイルに明示的に埋め込む必要があります。
たとえば、以下のルートは、myxpath.txt という名前のクラスパスリソースから XPath 表現を読み込みます。
from("direct:start").transform().xpath("resource:classpath:myxpath.txt");
これら (.txt ファイルに保存されている可能性のある他の式) をネイティブイメージに含めるには、application.properties ファイルに次のようなものを追加する必要があります。
quarkus.native.resources.includes = *.txt
3.109. XSLT Saxon リンクのコピーリンクがクリップボードにコピーされました!
Saxon を使用した XSLT テンプレートを使用して XML ペイロードを変換します。
3.109.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
XSLT Saxon コンポーネント、URI 構文:
xslt-saxon:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.109.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-xslt-saxon</artifactId>
</dependency>
3.110. XSLT リンクのコピーリンクがクリップボードにコピーされました!
XSLT テンプレートを使用して XML ペイロードを変換します。
3.110.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
XSLT コンポーネント、URI 構文:
xslt:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
3.110.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-xslt</artifactId>
</dependency>
3.110.3. 追加の Camel Quarkus 設定 リンクのコピーリンクがクリップボードにコピーされました!
XSLT 処理を最適化するには、ビルド時に XSLT テンプレートの場所をエクステンションが認識している必要があります。XSLT ソース URI は、quarkus.camel.xslt.sources プロパティーを介して渡す必要があります。複数の URI はコンマで区切ることができます。
quarkus.camel.xslt.sources = transform.xsl, classpath:path/to/my/file.xsl
スキームのない URI は classpath: URI として解釈されます。
classpath: のみ: URI は Quarkus ネイティブモードでサポートされます。file:、http:、およびその他の種類の URI は、JVM モードでのみ使用できます。
<xsl:include> および <xsl:messaging> XSLT 要素も、現在 JVM モードでのみサポートされています。
aggregate DSL を使用する場合は、次のように XsltSaxonAggregationStrategy を使用する必要があります。
from("file:src/test/resources?noop=true&sortBy=file:name&antInclude=*.xml")
.routeId("aggregate").noAutoStartup()
.aggregate(new XsltSaxonAggregationStrategy("xslt/aggregate.xsl"))
.constant(true)
.completionFromBatchConsumer()
.log("after aggregate body: ${body}")
.to("mock:transformed");
また、JVM モードでのみサポートされています。
3.110.3.1. 設定 リンクのコピーリンクがクリップボードにコピーされました!
TransformerFactory 機能は、次のプロパティーを使用して設定できます。
quarkus.camel.xslt.features."http\://javax.xml.XMLConstants/feature/secure-processing"=false
3.110.3.2. エクステンション機能のサポート リンクのコピーリンクがクリップボードにコピーされました!
Xalan のエクステンション機能 は、次の場合にのみ正しく機能します。
- 安全な処理が無効になっています
- 関数は別の jar で定義されています
- 関数は、ネイティブビルドフェーズ中に拡張されます。たとえば、リフレクション用に登録できます。
@RegisterForReflection(targets = { my.Functions.class })
public class FunctionsConfiguration {
}
XSLT ソース URI のコンテンツは、ビルド時に解析され、Java クラスにコンパイルされます。これらの Java クラスは、実行時の XSLT 情報の唯一のソースです。XSLT ソースファイルは、アプリケーションアーカイブにまったく含まれていない場合があります。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
コンパイルするテンプレートのコンマ区切りリスト。 |
| |
|
生成されたクラスのパッケージ名。 |
|
|
|
TransformerFactory の機能。 |
|
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
3.111. YAML DSL リンクのコピーリンクがクリップボードにコピーされました!
YAML ルート定義を解析するための YAML スタック
3.111.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.111.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-yaml-dsl</artifactId>
</dependency>
3.111.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
3.111.3.1. ネイティブモード リンクのコピーリンクがクリップボードにコピーされました!
以下の構造を Camel YAML DSL マークアップ内で定義する場合は、リフレクション用のクラスを登録する必要があります。詳細は、ネイティブモード のガイドを参照してください。
3.111.3.1.1. Bean 定義 リンクのコピーリンクがクリップボードにコピーされました!
YAML DSL は、次のように Bean を定義する機能を提供します。
- beans:
- name: "greetingBean"
type: "org.acme.GreetingBean"
properties:
greeting: "Hello World!"
- route:
id: "my-yaml-route"
from:
uri: "timer:from-yaml?period=1000"
steps:
- to: "bean:greetingBean"
この例では、GreetingBean クラスをリフレクション用に登録する必要があります。これは、YAML ルートの beans キーで参照するすべての型に適用されます。
@RegisterForReflection
public class GreetingBean {
}
3.111.3.1.2. 例外処理 リンクのコピーリンクがクリップボードにコピーされました!
Camel は、例外を処理するさまざまな方法を提供します。これらの一部では、DSL 定義で参照されている例外クラスがリフレクション用に登録されていることが必要です。
on-exception
- on-exception:
handled:
constant: "true"
exception:
- "org.acme.MyHandledException"
steps:
- transform:
constant: "Sorry something went wrong"
@RegisterForReflection
public class MyHandledException {
}
throw-exception
- route:
id: "my-yaml-route"
from:
uri: "direct:start"
steps:
- choice:
when:
- simple: "${body} == 'bad value'"
steps:
- throw-exception:
exception-type: "org.acme.ForcedException"
message: "Forced exception"
otherwise:
steps:
- to: "log:end"
@RegisterForReflection
public class ForcedException {
}
do-catch
- route:
id: "my-yaml-route2"
from:
uri: "direct:tryCatch"
steps:
- do-try:
steps:
- to: "direct:readFile"
do-catch:
- exception:
- "java.io.FileNotFoundException"
steps:
- transform:
constant: "do-catch caught an exception"
@RegisterForReflection(targets = FileNotFoundException.class)
public class MyClass {
}
3.112. Zip デフレート圧縮 リンクのコピーリンクがクリップボードにコピーされました!
java.util.zip.Deflater、java.util.zip.Inflater、または java.util.zip.GZIPStream を使用して、ストリームを圧縮および解凍します。
3.112.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.112.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-zip-deflater</artifactId>
</dependency>
3.113. Zip ファイル リンクのコピーリンクがクリップボードにコピーされました!
java.util.zip.ZipStream を使用して、ストリームを圧縮および圧縮解除します。
3.113.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
使用方法と設定の詳細は、上記リンクを参照してください。
3.113.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-zipfile</artifactId>
</dependency>
第4章 Quarkus CXF の概要 リンクのコピーリンクがクリップボードにコピーされました!
この章では、Quarkus CXF でサポートされる Quarkus CXF エクステンション、CXF モジュール、および CXF アノテーション に関する情報を提供します。
4.1. Quarkus CXF リンクのコピーリンクがクリップボードにコピーされました!
以下は、このプロジェクトによって作成されたエクステンションのリストです。エクステンションの使用方法、設定、既知の制限事項は、エクステンション名の下のリンクを参照してください。
| Quarkus CXF エクステンション | サポートレベル | 最小バージョン | サポートされる標準 |
|---|---|---|---|
|
Quarkus CXF | Stable | 0.1.0 | |
|
Quarkus CXF Metrics Feature | Stable | 0.14.0 | |
|
Quarkus CXF OpenTelemetry | Stable | 2.7.0 | |
|
Quarkus CXF WS-Security | Stable | 0.14.0 | |
|
Quarkus CXF WS-ReliableMessaging | Stable | 1.5.3 | |
|
Quarkus CXF セキュリティートークンサービス (STS) | Stable | 1.5.3 | |
|
Quarkus CXF HTTP 非同期トランスポート | Stable | 1.1.0 | |
|
Quarkus CXF XJC Plugins | Stable | 1.5.11 |
4.2. サポート対象の CXF モジュール リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF でサポートされている CXF モジュールのリストを以下に示します。通常は、これらに直接依存するのではなく、上記にリストされているエクステンションのいくつかを使用する必要があります。エクステンションは、特定の CXF モジュールを推移的な依存関係として提供します。
4.2.1. フロントエンド リンクのコピーリンクがクリップボードにコピーされました!
quarkus-cxf によって完全にサポートされる CXF フロントエンド は JAX-WS フロントエンド のみです。
Simple front end は JVM モードで動作する可能性がありますが、適切にテストされていません。使用しないことを推奨します。
4.2.2. データバインディング リンクのコピーリンクがクリップボードにコピーされました!
サポート対象の CXF データバインディング は以下のみです。
4.2.3. トランスポート リンクのコピーリンクがクリップボードにコピーされました!
サポート対象の CXF トランスポート は以下のみです。
-
quarkus-cxfは、SOAP エンドポイントを提供するために、Quarkus と Vert.x に基づき独自のカスタムトランスポートを実装します。 以下を含む、
quarkus-cxf経由の HTTP クライアント。-
quarkus-cxf-rt-transports-http-hc5経由の 非同期クライアント HTTP トランスポート
4.2.4. ツール リンクのコピーリンクがクリップボードにコピーされました!
-
wsdl2Java- ユーザーガイドの WSDL からモデルクラスを生成する セクションを参照してください。 -
java2ws- ユーザーガイドの Java から WSDL を生成する セクションを参照してください。
4.2.5. サポート対象の SOAP バインディング リンクのコピーリンクがクリップボードにコピーされました!
すべての CXF WSDL バインディング がサポートされます。SOAP 1.2 に切り替える場合、または MTOM を追加する場合は、quarkus.cxf.[client|endpoint]."name".soap-binding を次のいずれかの値に設定します。
| バインディング | プロパティー値 |
|---|---|
| SOAP 1.1 (デフォルト) | |
| SOAP 1.2 | |
| MTOM を備えた SOAP 1.1 | |
| MTOM を備えた SOAP 1.2 |
4.3. サポート対象外の CXF モジュール リンクのコピーリンクがクリップボードにコピーされました!
以下は、Quarkus CXF で現在サポートされていない CXF モジュールのリストと、考えられる代替手段、および特定のモジュールがサポートされていない理由です。
| CXF モジュール | 代替モジュール |
|---|---|
|
JAX-RS | |
| JAXB および JAX-WS を使用する | |
|
DOSGI | |
| JiBX | JAXB および JAX-WS を使用する |
|
ローカルトランスポート | HTTP トランスポートを使用する |
|
JMS トランスポート | HTTP トランスポートを使用する |
|
JBI | HTTP トランスポートの使用は CXF では非推奨となっています |
|
UDP トランスポート | HTTP トランスポートを使用する |
| HTTP トランスポートを使用する | |
|
WebSocket トランスポート | HTTP トランスポートを使用する |
|
クラスタリング | |
|
CORBA | JAX-WS を使用する |
|
SDO databinding | |
| CXF では非推奨となっています | |
| JAX-WS を使用する | |
| HTTP トランスポートを使用する | |
|
WS-Transfer ランタイム | |
|
スロットル調整 | ロードバランサーを使用する |
4.4. サポート対象の CXF アノテーション リンクのコピーリンクがクリップボードにコピーされました!
以下は、Quarkus の CXF アノテーション のステータスです。特に明記されていない限り、io.quarkiverse.cxf:quarkus-cxf 経由でサポートされています。
| アノテーション | ステータス |
|---|---|
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
|
|
デフォルト値 |
|
| サポート対象 |
|
| サポート対象 |
|
|
|
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
|
| サポート対象 |
第5章 Quarkus CXF エクステンションリファレンス リンクのコピーリンクがクリップボードにコピーされました!
この章では、Quarkus CXF エクステンションに関するリファレンス情報を提供します。
5.1. Quarkus CXF リンクのコピーリンクがクリップボードにコピーされました!
SOAP クライアントと JAX-WS サービスを実装するためのコア機能。
5.1.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com で quarkus-cxf を使用して新規プロジェクト を作成するか、既存プロジェクトに次の座標を追加します。
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf</artifactId>
</dependency>
5.1.2. サポートされる標準 リンクのコピーリンクがクリップボードにコピーされました!
5.1.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーガイド には、このエクステンションの使用方法を説明する章がいくつかあります。
5.1.4. 設定 リンクのコピーリンクがクリップボードにコピーされました!
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
|
| |
|
環境変数: | ||
|
| ||
|
例:
ファイル拡張子
このオプションにはデフォルト値がないため、
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
| 生成されたファイルが書き込まれるディレクトリー。現在の Maven または Gradle モジュールディレクトリーに対する絶対ディレクトリーまたは相対ディレクトリーです。
デフォルト値はビルドツールに依存します。Maven の場合、通常は Quarkus ツールでは、指定されたビルドツールのソースフォルダーとしてデフォルト値を設定することしかできません。これをカスタムパスに設定する場合、ユーザーが責任を持って、ビルドツールがパスをソースフォルダーとして認識していることを確認してください。
また、Maven の
これはオプション
環境変数: | ||
|
| ||
| トークンのコンマ区切りリスト。各トークンは次のいずれかになります。
これはオプション
環境変数: | ||
|
| ||
| Java コードを生成するときに無視する WSDL スキーマ名前空間 URI のコンマ区切りリスト。
これはオプション
環境変数: | ||
|
| ||
| 生成されたコードに使用する WSDL サービス名。
これはオプション
環境変数: | ||
|
| ||
| JAXWS または JAXB バインディングファイルまたは XMLBeans コンテキストファイルを指すパスのリスト。現在の Maven または Gradle モジュールに対する絶対パスまたは相対パス。
これはオプション
環境変数: | ||
|
|
| |
|
これはオプション
環境変数: | ||
|
| ||
|
これはオプション
環境変数: | ||
|
| ||
|
有効にする XJC 拡張機能のコンマ区切りリスト。以下のエクステンションは、
これらの値は、
環境変数: | ||
|
|
| |
|
これはオプション
環境変数: | ||
|
| ||
|
非同期兄弟メソッドを生成する SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの
これはオプション
環境変数: | ||
|
| ||
|
ラッパースタイルの兄弟メソッドを生成する SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの
これはオプション
環境変数: | ||
|
| ||
|
これはオプション
環境変数: | ||
|
| ||
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
| ||
|
例:
アプリケーションに そのような場合:
このオプションにはデフォルト値がないため、
生成された WSDL ファイルをネイティブイメージに含める場合は、
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
サポートされているオプション 現在、Java からの WSDL の生成に関連するオプションのみがサポートされています。
環境変数: | ||
|
|
| |
| 生成される WSDL ファイルの名前のテンプレート。 テンプレートで使用できるプレースホルダーは 4 つあります。
環境変数: | ||
|
|
| |
| CXF リソースのデフォルトパス。 以前のバージョン
Quarkus CXF バージョン 2.0.0 より前のデフォルト値は
環境変数: | ||
|
|
| |
| データの書き込み時に割り当てられるメモリーチャンクのサイズ (バイト単位)。 これは非常に高度な設定であり、アプリケーションの出力 IO 操作にどのように影響するかを正確に理解している場合に限り設定してください。
環境変数: | ||
|
|
| |
| 出力ストリームレスポンスバッファーのサイズ (バイト単位)。レスポンスがこれより大きく、content-length が指定されていない場合、レスポンスはチャンク化されます。 この値を大きくすると、メモリー使用量は増えますが、レスポンスが大きい場合のパフォーマンスがわずかに向上する可能性があります。
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
HTTP ハンドラー内から WS クライアントを呼び出す場合は、このオプションは指定せず、代わりに
Environment variable: | ||
|
|
| |
|
メッセージロギングを有効にする対象 (クライアント、サービス、両方、該当なし) を指定します。この設定は
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
ログ内で切り捨てられるメッセージの長さ (バイト単位)。この設定は
環境変数: | ||
|
|
| |
|
ディスクに書き込まれるメッセージの長さ (バイト単位)。
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
ログでマスクされる機密情報を含む XML 要素のコンマ区切りリスト。この設定は
環境変数: | ||
|
| ||
|
ログでマスクされる機密情報を含むプロトコルヘッダーのコンマ区切りリスト。この設定は
環境変数: | ||
|
|
| |
|
例:
ファイル拡張子
このオプションにはデフォルト値がないため、
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
| 生成されたファイルが書き込まれるディレクトリー。現在の Maven または Gradle モジュールディレクトリーに対する絶対ディレクトリーまたは相対ディレクトリーです。
デフォルト値はビルドツールに依存します。Maven の場合、通常は Quarkus ツールでは、指定されたビルドツールのソースフォルダーとしてデフォルト値を設定することしかできません。これをカスタムパスに設定する場合、ユーザーが責任を持って、ビルドツールがパスをソースフォルダーとして認識していることを確認してください。
また、Maven の
これはオプション
環境変数: | ||
|
|
| |
| トークンのコンマ区切りリスト。各トークンは次のいずれかになります。
これはオプション
環境変数: | ||
|
|
| |
| Java コードを生成するときに無視する WSDL スキーマ名前空間 URI のコンマ区切りリスト。
これはオプション
環境変数: | ||
|
|
| |
| 生成されたコードに使用する WSDL サービス名。
これはオプション
環境変数: | ||
|
|
| |
| JAXWS または JAXB バインディングファイルまたは XMLBeans コンテキストファイルを指すパスのリスト。現在の Maven または Gradle モジュールに対する絶対パスまたは相対パス。
これはオプション
環境変数: | ||
|
|
|
|
|
これはオプション
環境変数: | ||
|
|
| |
|
これはオプション
環境変数: | ||
|
| ||
|
有効にする XJC 拡張機能のコンマ区切りリスト。以下のエクステンションは、
これらの値は、
環境変数: | ||
|
|
|
|
|
これはオプション
環境変数: | ||
|
|
| |
|
非同期兄弟メソッドを生成する SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの
これはオプション
環境変数: | ||
|
|
| |
|
ラッパースタイルの兄弟メソッドを生成する SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの
これはオプション
環境変数: | ||
|
|
| |
|
これはオプション
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
| ||
|
例:
アプリケーションに そのような場合:
このオプションにはデフォルト値がないため、
生成された WSDL ファイルをネイティブイメージに含める場合は、
環境変数: | ||
|
| ||
|
環境変数: | ||
|
|
| |
|
サポートされているオプション 現在、Java からの WSDL の生成に関連するオプションのみがサポートされています。
環境変数: | ||
|
|
|
|
| 生成される WSDL ファイルの名前のテンプレート。 テンプレートで使用できるプレースホルダーは 4 つあります。
環境変数: | ||
|
| ||
| クライアントサービスインターフェイスクラス名
環境変数: | ||
|
|
| |
|
これが代替プロキシークライアント設定であるかどうかを示します。true の場合、アノテーション
環境変数: | ||
|
|
| |
|
サービスエンドポイントインターフェイスがメソッドシグネチャー内で実行時に初期化されるクラスを参照する場合は、これを
環境変数: | ||
|
| ||
| サービスエンドポイント実装クラス
環境変数: | ||
|
| ||
| サービスエンドポイント WSDL パス
環境変数: | ||
|
| ||
| SOAP バインディングの URL は、次の 4 つの値のいずれかになります。
環境変数: | ||
|
|
| |
| 公開されたサービスエンドポイント URL
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
ログ内で切り捨てられるメッセージの長さ (バイト単位)。デフォルトは
環境変数: | ||
|
|
| |
|
ディスクに書き込まれるメッセージの長さ (バイト単位)。
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
ログでマスクされる機密情報を含む XML 要素のコンマ区切りリスト。デフォルトは
環境変数: | ||
|
|
| |
|
ログでマスクされる機密情報を含むプロトコルヘッダーのコンマ区切りリスト。デフォルトは
環境変数: | ||
|
| ||
| 完全修飾 CXF Feature クラス名または名前付き CDI Bean のコンマ区切りリスト。 例:
2 番目の場合、
環境変数: | ||
|
| ||
| Handler クラスのコンマ区切りリスト
環境変数: | ||
|
| ||
| InInterceptor クラスのコンマ区切りリスト
環境変数: | ||
|
| ||
| OutInterceptor クラスのコンマ区切りリスト
環境変数: | ||
|
|
| |
| OutFaultInterceptor クラスのコンマ区切りリスト
環境変数: | ||
|
| ||
| InFaultInterceptor クラスのコンマ区切りリスト
環境変数: | ||
|
|
| |
|
XML スキーマ検証を有効にするメッセージを選択します。指定されていない場合、
環境変数: | ||
|
| ||
| このクライアントのサービスプロキシーを生成する際に使用する WSDL ドキュメントを指す URL、リソースパス、またはローカルファイルシステムパス。
環境変数: | ||
|
| ||
| SOAP バインディングの URL は、次の 4 つの値のいずれかになります。
環境変数: | ||
|
| ||
| クライアントエンドポイント URL
環境変数: | ||
|
| ||
| クライアントエンドポイントの namespace
環境変数: | ||
|
| ||
| クライアントエンドポイントの名前
環境変数: | ||
|
| ||
| HTTP Basic 認証のユーザー名
環境変数: | ||
|
| ||
| HTTP Basic 認証のパスワード
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
ログ内で切り捨てられるメッセージの長さ (バイト単位)。デフォルトは
環境変数: | ||
|
| ||
|
ディスクに書き込まれるメッセージの長さ (バイト単位)。
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
ログでマスクされる機密情報を含む XML 要素のコンマ区切りリスト。デフォルトは
環境変数: | ||
|
|
| |
|
ログでマスクされる機密情報を含むプロトコルヘッダーのコンマ区切りリスト。デフォルトは
環境変数: | ||
|
| ||
| 完全修飾 CXF Feature クラス名のコンマ区切りリスト。 以下に例を示します。
環境変数: | ||
|
| ||
| Handler クラスのコンマ区切りリスト
環境変数: | ||
|
| ||
| InInterceptor クラスのコンマ区切りリスト
環境変数: | ||
|
| ||
| OutInterceptor クラスのコンマ区切りリスト
環境変数: | ||
|
| ||
| OutFaultInterceptor クラスのコンマ区切りリスト
環境変数: | ||
|
| ||
| InFaultInterceptor クラスのコンマ区切りリスト
環境変数: | ||
|
|
| |
| タイムアウトするまでにコンシューマーが接続の確立を試みる期間 (ミリ秒単位) を指定します。0 は無限を意味します。
環境変数: | ||
|
|
| |
| コンシューマーがタイムアウトするまでの応答を待つ期間 (ミリ秒単位) を指定します。0 は無限を意味します。
環境変数: | ||
|
|
| |
| Connection Manager からの接続を要求する場合に使用する時間 (ミリ秒単位) を指定します (該当する場合)。0 は無限を意味します。
環境変数: | ||
|
|
| |
| コンシューマーが、サーバーが発行するリダイレクトに自動的に従うかどうかを指定します (名前は標準の一部ではありません)。
環境変数: | ||
|
|
| |
| リダイレクトに許可される再送信の最大回数を指定します。再送信回数には、認証のための再送信も含まれます。各リダイレクトにより、UNAUTHORIZED 応答コード (つまり 401) の再送信が発生する可能性があります。負の数値は再送信回数が無制限であることを示します。ただし、ループ保護が提供されます。デフォルトは無制限です (名前は標準の一部ではありません)。
環境変数: | ||
|
|
| |
| true の場合、クライアントは必要に応じてチャンクストリームを自由に使用できますが、必ずしもチャンクストリームを使用する必要はありません。false の場合、クライアントは必ず通常のチャンク化されていないリクエストを使用する必要があります。
環境変数: | ||
|
|
| |
| AllowChunking が true の場合、メッセージのチャンク化が開始されるしきい値が設定されます。この制限を下回るメッセージはチャンク化されません。
環境変数: | ||
|
|
| |
| HttpURLConnection のチャンク長を指定します。この値は、java.net.HttpURLConnection.setChunkedStreamingMode (int chunklen) で使用されます。chunklen は、各チャンクに書き込むバイト数を示します。chunklen が 0 以下の場合、デフォルト値が使用されます。
環境変数: | ||
|
| ||
| クライアントが処理できる MIME タイプを指定します (例: HTML、JPEG、GIF など)
環境変数: | ||
|
| ||
| クライアントが希望する言語を指定します (例: English、French など)
環境変数: | ||
|
| ||
| クライアントが処理できるエンコーディングを指定します (例: gzip)
環境変数: | ||
|
| ||
| POST リクエストで送信されるストリームのコンテンツタイプを指定します。(Web サービスの場合は text/xml にする必要がありますが、クライアントがフォームデータを送信する場合は application/x-www-form-urlencoded に設定できます。)
環境変数: | ||
|
| ||
| 要求が呼び出されるリソースのインターネットホストおよびポート番号を指定します。デフォルトでは、これが URL に基づき送信されます。特定の DNS シナリオまたはアプリケーション設計では、これを設定するように要求される場合がありますが、通常は必要ありません。
環境変数: | ||
|
|
| |
| 接続の処理。close の場合は、各要求/応答ダイアログの後にサーバーへの接続が閉じられます。Keep-Alive の場合、クライアントはサーバーに対して接続を開いたままにするように要求し、サーバーがその keep alive 要求を受け入れると、接続が再利用されます。多くのサーバーとプロキシーは keep-alive 要求を受け入れません。
環境変数: | ||
|
| ||
| no-cache を指定するために使用されることがほとんどですが、要求に対して 12 個程度のキャッシュ関連のディレクティブが標準でサポートしされています。
環境変数: | ||
|
|
| |
|
接続に使用される HTTP バージョン。デフォルト値
一部の
環境変数: | ||
|
| ||
|
環境変数: | ||
|
| ||
|
別のプロバイダー → コンシューマー接続を介して応答を受信するための URI パス (
環境変数: | ||
|
| ||
| プロキシーサーバーが使用されている場合は、そのアドレスを指定します。
環境変数: | ||
|
| ||
| プロキシーサーバーが使用するポート番号を指定します。
環境変数: | ||
|
| ||
| プロキシー設定を使用しないホスト名のリストを指定します。例:
環境変数: | ||
|
|
| |
| プロキシーサーバーのタイプを指定します。HTTP または SOCKS を使用できます。
環境変数: | ||
|
| ||
| プロキシー認証のユーザー名
環境変数: | ||
|
| ||
| プロキシー認証のパスワード
環境変数: | ||
|
| ||
|
このクライアントの
環境変数: | ||
|
| ||
| このクライアントのキーストアの場所です。リソースは最初にクラスパスで検索され、次にファイルシステムで検索されます。
環境変数: | ||
|
| ||
| キーストアのパスワード
環境変数: | ||
|
|
| |
| キーストアのタイプ。
環境変数: | ||
|
| ||
| キーのパスワード。
環境変数: | ||
|
| ||
| このクライアントのトラストストアの場所です。リソースは最初にクラスパスで検索され、次にファイルシステムで検索されます。
環境変数: | ||
|
| ||
| トラストストアのパスワード。
環境変数: | ||
|
|
| |
| トラストストアのタイプ。
環境変数: | ||
|
| ||
| 次のいずれかです。
環境変数: | ||
|
|
| |
|
XML スキーマ検証を有効にするメッセージを選択します。指定されていない場合、
環境変数: | ||
5.2. メトリクス機能 リンクのコピーリンクがクリップボードにコピーされました!
Micrometer を使用してメトリクスを収集します。
CXF Metrics 機能 とは異なり、この Quarkus CXF エクステンションは Dropwizard Metrics をサポートしません。Micrometer のみサポートされます。
5.2.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com で quarkus-cxf-rt-features-metrics を使用して新規プロジェクト を作成するか、既存プロジェクトに次の座標を追加します。
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-rt-features-metrics</artifactId>
</dependency>
5.2.2. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
CXF の Quarkus Micrometer エコシステムへの統合は、io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature を使用して実装されます。アプリケーションが quarkus-cxf-rt-features-metrics に依存している限り、QuarkusCxfMetricsFeature のインスタンスが内部的に作成され、Quarkus CXF によって作成されたすべてのクライアントとサービスエンドポイントに対してデフォルトで有効になります。以下に記載されている quarkus.cxf.metrics.enabled-for、quarkus.cxf.client."client-name".metrics.enabled および quarkus.cxf.endpoint."/endpoint-path".metrics.enabled プロパティーを使用して無効にできます。
5.2.2.1. 実行可能な例 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF ソースツリーには、Micrometer Metrics を対象とする integration test があります。
当然のことながら、これは quarkus-cxf-rt-features-metrics に依存します。
pom.xml
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-rt-features-metrics</artifactId>
</dependency>
quarkus-micrometer-registry-prometheus エクステンションを使用して、メトリクスを JSON 形式でエクスポートします。Prometheus の場合は次のとおりとなります。
pom.xml
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer-registry-prometheus</artifactId>
</dependency>
REST エンドポイント経由で収集されたメトリクスを検査するには、次の設定が必要です。
application.properties
quarkus.micrometer.export.json.enabled = true
quarkus.micrometer.export.json.path = metrics/json
quarkus.micrometer.export.prometheus.path = metrics/prometheus
上記をすべて完了すると、アプリケーションを開発モードで起動できます。
$ mvn quarkus:dev
ここで、HelloService に要求を送信します。
$ curl \
-d '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:helloResponse xmlns:ns2="http://it.server.metrics.cxf.quarkiverse.io/"><return>Hello Joe!</return></ns2:helloResponse></soap:Body></soap:Envelope>' \
-H 'Content-Type: text/xml' \
-X POST \
http://localhost:8080/metrics/client/hello
その後、上記で設定したエンドポイントの出力の cxf.server.requests の下にいくつかのメトリクスが表示されます。
$ curl http://localhost:8080/q/metrics/json
metrics: {
...
"cxf.server.requests": {
"count;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soap/hello": 2,
"elapsedTime;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soap/hello": 64.0
},
...
}
5.2.3. 設定 リンクのコピーリンクがクリップボードにコピーされました!
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
|
| |
|
メトリクス収集を有効にする対象 (クライアント、サービス、両方、該当なし) を指定します。このグローバル設定は
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
5.3. OpenTelemetry リンクのコピーリンクがクリップボードにコピーされました!
OpenTelemetry トレース を生成します。
OpenTelemetry Metrics とロギングは、Quarkus 側でも CXF 側でもまだサポートされていないため、Quarkus CXF でもサポートできません。したがって、このエクステンションでサポートされる OpenTelemetry 機能はトレースのみです。
5.3.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com で quarkus-cxf-integration-tracing-opentelemetry を使用して新規プロジェクト を作成するか、既存プロジェクトに次の座標を追加します。
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-integration-tracing-opentelemetry</artifactId>
</dependency>
5.3.2. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションは、org.apache.cxf.tracing.opentelemetry.OpenTelemetryFeature (サービスエンドポイント用) および org.apache.cxf.tracing.opentelemetry.OpenTelemetryClientFeature (クライアント用) 上にビルドされています。これらのインスタンスは、Quarkus OpenTelemetry によって提供される io.opentelemetry.api.OpenTelemetry のインスタンスを使用して、内部的に作成および設定されます。
quarkus.cxf.otel.enabled-for、quarkus.cxf.client."client-name".otel.enabled、または quarkus.cxf.endpoint."/endpoint-path".otel.enabled で明示的に無効にしない限り、Quarkus CXF によって作成されたすべてのクライアントとサービスエンドポイントに対してトレースがデフォルトで有効になります。
5.3.2.1. 実行可能な例 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF ソースツリーには、OpenTelemetry を対象とする integration test があります。これは io.opentelemetry:opentelemetry-sdk-testing の InMemorySpanExporter を使用しているため、テストからスパンを簡単に検査できます。サポートされているその他のスパンエクスポーターとコレクターの詳細は、Quarkus OpenTelemetry guide を参照してください。
5.3.3. 設定 リンクのコピーリンクがクリップボードにコピーされました!
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
|
| |
|
OpenTelemetry トレーシングを有効にする対象 (クライアント、サービス、両方、該当なし) を指定します。このグローバル設定は
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
5.4. WS-Security リンクのコピーリンクがクリップボードにコピーされました!
CXF フレームワークの WS-Security 実装を提供します。これにより、以下が可能になります。
- サービス間で認証トークンを渡します。
- メッセージまたはメッセージの一部を暗号化します。
- メッセージに署名します。
- メッセージにタイムスタンプを付けます。
5.4.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com で quarkus-cxf-rt-ws-security を使用して新規プロジェクト を作成するか、既存プロジェクトに次の座標を追加します。
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-rt-ws-security</artifactId>
</dependency>
5.4.2. サポートされる標準 リンクのコピーリンクがクリップボードにコピーされました!
5.4.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
CXF フレームワークの WS-Security (WSS) 実装は、WSS4J をベースにしています。これは、2 つの方法でアクティブ化できます。
- WS-SecurityPolicy を使用します。
- クライアントとサービスエンドポイントに WSS4J インターセプターを追加します。
この場合、セキュリティー要件が WSDL コントラクトの一部となるため、WS-SecurityPolicy が推奨されます。その結果、クライアントとサービスエンドポイントの実装だけでなく、ベンダー間の相互運用性も大幅に単純化されます。
ただし、WS-SecurityPolicy を活用すると、CXF が内部で WSS4J インターセプターを設定します。
ここでは、WSS4J インターセプターを使用した手動アプローチを詳しく説明しませんが、その例として WS-Security integration test を参照してください。
5.4.3.1. WS-SecurityPolicy 経由の WS-Security リンクのコピーリンクがクリップボードにコピーされました!
このセクションで使用されているサンプルコードは、Quarkus CXF のソースツリーにある WS-WS-SecurityPolicy integration test からの抜粋です。
ここでの目標は、クライアントとサービス間の通信の気密性が (暗号化を通じて) 保たれ、メッセージが (デジタル署名を通じて) 改ざんされないことだとします。また、X.509 証明書によりクライアント自身を認証することで、クライアントが本人であることを確認する必要があります。
これらすべての要件を、単一の {link-quarkus-cxf-source-tree-base}/integration-tests/ws-security-policy/src/main/resources/encrypt-sign-policy.xml[WS-SecurityPolicy ドキュメント] で表現できます。
encrypt-sign-policy.xml
<?xml version="1.0" encoding="UTF-8" ?>
<wsp:Policy wsu:Id="SecurityServiceEncryptThenSignPolicy"
xmlns:wsp="http://www.w3.org/ns/ws-policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:ExactlyOne>
<wsp:All>
<sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:InitiatorToken>
<wsp:Policy>
<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssX509V3Token11/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:InitiatorToken>
<sp:RecipientToken>
<wsp:Policy>
<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
<wsp:Policy>
<sp:WssX509V3Token11/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:RecipientToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
<sp:ProtectTokens/>
<sp:OnlySignEntireHeadersAndBody/>
<sp:EncryptBeforeSigning/>
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<sp:Body/>
</sp:SignedParts>
<sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<sp:Body/>
</sp:EncryptedParts>
<sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:MustSupportRefIssuerSerial/>
</wsp:Policy>
</sp:Wss10>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
このポリシーは、@org.apache.cxf.annotations.Policy アノテーションを使用して、サービスエンドポイントインターフェイス (SEI) {link-quarkus-cxf-source-tree-base}/integration-tests/ws-security-policy/src/main/java/io/quarkiverse/cxf/it/security/policy/EncryptSignPolicyHelloService.java#L11[EncryptSignPolicyHelloService] に設定します。
EncryptSignPolicyHelloService.java
@WebService(serviceName = "EncryptSignPolicyHelloService")
@Policy(placement = Policy.Placement.BINDING, uri = "encrypt-sign-policy.xml")
public interface EncryptSignPolicyHelloService extends AbstractHelloService {
...
}
一見しただけで、SEI にポリシーを設定するだけで、サービスと、SEI から生成されたすべてのクライアント、またはサービスにより提供された WSDL から生成されたすべてのクライアントに、ポリシーを適用できることがわかります。しかし、それだけではありません。セキュリティーキー、ユーザー名、パスワード、その他の機密情報は、パブリックポリシーにより公開できません。
これらは設定で対応する必要があります。まずはサービスで行います。
application.properties
# A service with encrypt-sign-policy.xml set
quarkus.cxf.endpoint."/helloEncryptSign".implementor = io.quarkiverse.cxf.it.security.policy.EncryptSignPolicyHelloServiceImpl
# can be jks or pkcs12 - set from Maven profiles in this test
keystore.type = ${keystore.type}
# Signature settings
quarkus.cxf.endpoint."/helloEncryptSign".security.signature.username = bob
quarkus.cxf.endpoint."/helloEncryptSign".security.signature.password = bob-keystore-password
quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.type" = ${keystore.type}
quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = bob-keystore-password
quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = bob
quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.merlin.file" = bob-keystore.${keystore.type}
# Encryption settings
quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.username = alice
quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.type" = ${keystore.type}
quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = bob-keystore-password
quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = bob
quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.merlin.file" = bob-keystore.${keystore.type}
クライアント側でも同様の設定が必要です。
application.properties
# A client with encrypt-sign-policy.xml set
quarkus.cxf.client.helloEncryptSign.client-endpoint-url = https://localhost:${quarkus.http.test-ssl-port}/services/helloEncryptSign
quarkus.cxf.client.helloEncryptSign.service-interface = io.quarkiverse.cxf.it.security.policy.EncryptSignPolicyHelloService
quarkus.cxf.client.helloEncryptSign.features = #messageCollector
# The client-endpoint-url above is HTTPS, so we have to setup the server's SSL certificates
quarkus.cxf.client.helloEncryptSign.trust-store = client-truststore.${keystore.type}
quarkus.cxf.client.helloEncryptSign.trust-store-password = client-truststore-password
# Signature settings
quarkus.cxf.client.helloEncryptSign.security.signature.username = alice
quarkus.cxf.client.helloEncryptSign.security.signature.password = alice-keystore-password
quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = alice-keystore-password
quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = alice
quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.merlin.file" = alice-keystore.${keystore.type}
# Encryption settings
quarkus.cxf.client.helloEncryptSign.security.encryption.username = bob
quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = alice-keystore-password
quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = alice
quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.merlin.file" = alice-keystore.${keystore.type}
メッセージのフローを検査するには、次のように EncryptSignPolicyTest を実行します。
# Clone the repository
$ git clone https://github.com/quarkiverse/quarkus-cxf.git -o upstream
$ cd quarkus-cxf
# Build the whole source tree
$ mvn clean install -DskipTests -Dquarkus.build.skip
# Run the test
$ cd integration-tests/ws-security-policy
$ mvn clean test -Dtest=EncryptSignPolicyTest
コンソール出力に、Signature 要素と暗号化された本文を含むいくつかのメッセージが表示されます。
5.4.4. 設定 リンクのコピーリンクがクリップボードにコピーされました!
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
| ||
| ユーザーの名前。以下のように使用します。
環境変数: | ||
|
| ||
|
環境変数: | ||
|
|
| |
|
署名用のユーザーの名前。署名用にユーザーの証明書および秘密鍵を取得するための、キーストアのエイリアス名として使用されます。これが定義されていない場合は、代わりに
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
暗号化用のユーザーの名前。暗号化用のユーザーの公開鍵を取得するために、キーストア内のエイリアス名として使用されます。これが定義されていない場合は、代わりに
WS-Security Web サービスプロバイダーの場合、
環境変数: | ||
|
| ||
|
送信要求と受信要求の両方でパスワードを取得するために使用される
環境変数: | ||
|
|
| |
|
SAML アサーションの構築に使用される
環境変数: | ||
|
|
| |
|
例
環境変数: | ||
|
|
| |
|
例
環境変数: | ||
|
| ||
|
署名に使用される
環境変数: | ||
|
| ||
|
暗号化に使用される
環境変数: | ||
|
|
| |
|
暗号化に使用するために準備された X509 証明書のメッセージプロパティー。これが定義されていない場合、証明書はキーストアの これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
署名 "unsigned" というラベルは、内部署名を指します。トークンが ("sender-vouches" 要件に沿って) 外部署名によって署名されている場合でも、トークンを使用してセキュリティーコンテキストを設定する場合は、このブール値を設定する必要があります。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
ロール情報が保存される SAML これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
証明書に関連付けられた証明書チェーンの信頼性の検証後、署名検証に使用される証明書のサブジェクト DN に適用される正規表現の文字列 ( これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
| ||
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
キャッシュ
キャッシュは、
環境変数: | ||
|
|
| |
|
キャッシュ
キャッシュは、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
|
|
|
デプロイメントに関する情報の漏洩や、攻撃に使用できる "オラクル" の提供が発生することがあるため、"実際" のセキュリティーエラーは実稼働環境にあるクライアントに返されるべきではありません。
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
| ||
|
キャッシュは、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
| アタッチメントにバイト (CipherData または BinarySecurityToken) を保存するかどうかを指定します。MTOM が有効な場合、デフォルトは true です。バイトを BASE-64 でエンコードし、代わりにメッセージ内に "インライン化する" には、これを false に設定します。これを true に設定すると、BASE-64 でのエンコードを省略できるため、効率性が向上します。これは DOM WS-Security スタックにのみ適用されます。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
一部のフレームワークは これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
方のサーバーでは、SSL ハンドシェイクの開始時にクライアント証明書を検証しない場合があります。そのため、ポリシー検証においてクライアント証明書が WS-Security 層で使用できない可能性があります。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
受信 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
受信 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
受信した これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
受信 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
SPNEGO に使用する これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
SAML2 トークン識別子文字列をキャッシュするために使用される これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
| ||
|
このプロパティーを設定して、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
セキュリティートークンのキャッシュに使用する これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
| ||
|
TokenStore で使用するキャッシュ識別子。CXF は、
デフォルトの これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
| ||
|
使用するサブジェクトロール分類子。いずれかの WSS4J バリデーターが検証から JAAS サブジェクトを返した場合、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
使用するサブジェクトロール分類子タイプ。いずれかの WSS4J バリデーターが検証から JAAS サブジェクトを返した場合、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
| 現在、WS-SecurityPolicy 仕様では他のアルゴリズムの使用が許可されていませんが、ユーザーはこの設定タグを使用して、WS-SecurityPolicy で使用するデフォルトの非対称署名アルゴリズム (RSA-SHA1) をオーバーライドできます。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
| 現在、WS-SecurityPolicy 仕様では他のアルゴリズムの使用が許可されていませんが、ユーザーはこの設定タグを使用して、WS-SecurityPolicy で使用するデフォルトの対称署名アルゴリズム (HMAC-SHA1) をオーバーライドできます。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
Merlin Crypto 実装 (または任意のカスタム Crypto 実装) でパスワードを暗号化または復号化するために使用される
デフォルトでは、WSS4J は 暗号化されたパスワードは、"ENC (エンコードされた暗号化パスワード)" の形式で保存する必要があります。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
WS-Security に使用する Kerberos これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
WSS4J 処理結果のセットから CXF SecurityContext を作成するために使用される これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
| セキュリティートークンの有効期間値 (ミリ秒単位)。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
| Kerberos で使用する JAAS コンテキスト名。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
| ||
| 使用する Kerberos サービスプロバイダー名 (spn)。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
| ||
|
サービスチケットを取得するために使用される これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
| ||
|
STS と通信するための、完全に設定された
ヒント: WS-Trust の詳細は、Security Token Service (STS) エクステンションページを確認してください。
環境変数: | ||
|
| ||
| STS クライアントのサービスプロキシーを生成する際に使用する WSDL ドキュメントを指す URL、リソースパス、またはローカルファイルシステムパス。
環境変数: | ||
|
|
| |
| STS サービスの完全修飾名。一般的な値は次のとおりです。
環境変数: | ||
|
|
| |
| STS エンドポイント名の完全修飾名。一般的な値は次のとおりです。
環境変数: | ||
|
|
| |
| STS に対して認証するときに使用するユーザー名。以下のように使用します。
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
暗号化用のユーザーの名前。暗号化用のユーザーの公開鍵を取得するために、キーストア内のエイリアス名として使用されます。これが定義されていない場合は、代わりに
WS-Security Web サービスプロバイダーの場合、
環境変数: | ||
|
|
| |
|
例
環境変数: | ||
|
|
| |
|
暗号化に使用される
環境変数: | ||
|
|
| |
|
STS に使用される WCF のトラストサーバーは、メッセージの完全なセキュリティーに加えて、応答内のトークンを暗号化することがあります。これらのプロパティーは、STS クライアントが応答内の EncryptedData 要素を復号化する方法を制御します。
環境変数: | ||
|
|
| |
|
例
環境変数: | ||
|
|
| |
| PublicKey KeyType の場合に、STS に送信するユーザーの公開鍵を取得するために使用するキーストア内のエイリアス名。
環境変数: | ||
|
|
|
|
| UseKey/KeyInfo に X509Certificate 構造を書き出すかどうか、または KeyValue 構造を書き出すかどうかを指定します。
環境変数: | ||
|
|
|
|
|
環境変数: | ||
|
| ||
| ユーザーの名前。以下のように使用します。
環境変数: | ||
|
| ||
|
環境変数: | ||
|
|
| |
|
署名用のユーザーの名前。署名用にユーザーの証明書および秘密鍵を取得するための、キーストアのエイリアス名として使用されます。これが定義されていない場合は、代わりに
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
暗号化用のユーザーの名前。暗号化用のユーザーの公開鍵を取得するために、キーストア内のエイリアス名として使用されます。これが定義されていない場合は、代わりに
WS-Security Web サービスプロバイダーの場合、
環境変数: | ||
|
|
| |
|
送信要求と受信要求の両方でパスワードを取得するために使用される
環境変数: | ||
|
|
| |
|
SAML アサーションの構築に使用される
環境変数: | ||
|
|
| |
|
例
環境変数: | ||
|
|
| |
|
例
環境変数: | ||
|
|
| |
|
署名に使用される
環境変数: | ||
|
|
| |
|
暗号化に使用される
環境変数: | ||
|
|
| |
|
暗号化に使用するために準備された X509 証明書のメッセージプロパティー。これが定義されていない場合、証明書はキーストアの これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
署名 "unsigned" というラベルは、内部署名を指します。トークンが ("sender-vouches" 要件に沿って) 外部署名によって署名されている場合でも、トークンを使用してセキュリティーコンテキストを設定する場合は、このブール値を設定する必要があります。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
ロール情報が保存される SAML これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
証明書に関連付けられた証明書チェーンの信頼性の検証後、署名検証に使用される証明書のサブジェクト DN に適用される正規表現の文字列 ( これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
| ||
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
キャッシュ
キャッシュは、
環境変数: | ||
|
|
| |
|
キャッシュ
キャッシュは、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
環境変数: | ||
|
|
|
|
|
デプロイメントに関する情報の漏洩や、攻撃に使用できる "オラクル" の提供が発生することがあるため、"実際" のセキュリティーエラーは実稼働環境にあるクライアントに返されるべきではありません。
環境変数: | ||
|
|
|
|
|
環境変数: | ||
|
|
| |
|
キャッシュは、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
| アタッチメントにバイト (CipherData または BinarySecurityToken) を保存するかどうかを指定します。MTOM が有効な場合、デフォルトは true です。バイトを BASE-64 でエンコードし、代わりにメッセージ内に "インライン化する" には、これを false に設定します。これを true に設定すると、BASE-64 でのエンコードを省略できるため、効率性が向上します。これは DOM WS-Security スタックにのみ適用されます。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
一部のフレームワークは これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
方のサーバーでは、SSL ハンドシェイクの開始時にクライアント証明書を検証しない場合があります。そのため、ポリシー検証においてクライアント証明書が WS-Security 層で使用できない可能性があります。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
受信 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
受信 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
受信した これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
受信 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
SPNEGO に使用する これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
SAML2 トークン識別子文字列をキャッシュするために使用される これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
このプロパティーを設定して、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
セキュリティートークンのキャッシュに使用する これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
TokenStore で使用するキャッシュ識別子。CXF は、
デフォルトの これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
使用するサブジェクトロール分類子。いずれかの WSS4J バリデーターが検証から JAAS サブジェクトを返した場合、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
使用するサブジェクトロール分類子タイプ。いずれかの WSS4J バリデーターが検証から JAAS サブジェクトを返した場合、 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
| 現在、WS-SecurityPolicy 仕様では他のアルゴリズムの使用が許可されていませんが、ユーザーはこの設定タグを使用して、WS-SecurityPolicy で使用するデフォルトの非対称署名アルゴリズム (RSA-SHA1) をオーバーライドできます。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
| 現在、WS-SecurityPolicy 仕様では他のアルゴリズムの使用が許可されていませんが、ユーザーはこの設定タグを使用して、WS-SecurityPolicy で使用するデフォルトの対称署名アルゴリズム (HMAC-SHA1) をオーバーライドできます。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
Merlin Crypto 実装 (または任意のカスタム Crypto 実装) でパスワードを暗号化または復号化するために使用される
デフォルトでは、WSS4J は 暗号化されたパスワードは、"ENC (エンコードされた暗号化パスワード)" の形式で保存する必要があります。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
WS-Security に使用する Kerberos これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
WSS4J 処理結果のセットから CXF SecurityContext を作成するために使用される これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
| セキュリティートークンの有効期間値 (ミリ秒単位)。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
|
|
|
これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
| Kerberos で使用する JAAS コンテキスト名。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
| ||
| 使用する Kerberos サービスプロバイダー名 (spn)。 これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
サービスチケットを取得するために使用される これは、テストでカバーされていない ため、実験段階のオプションです。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
| |
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
|
|
|
|
|
アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。
環境変数: | ||
5.5. WS-ReliableMessaging リンクのコピーリンクがクリップボードにコピーされました!
WS-ReliableMessaging (WS-RM) は、ソフトウェア、システム、またはネットワークの障害が発生した場合でも、信頼できるメッセージ配信を分散環境で確実に提供するためのプロトコルです。
このエクステンションは、CXF フレームワークの WS-ReliableMessaging 実装を提供します。
5.5.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com で quarkus-cxf-rt-ws-rm を使用して新規プロジェクト を作成するか、既存プロジェクトに次の座標を追加します。
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-rt-ws-rm</artifactId>
</dependency>
5.5.2. サポートされる標準 リンクのコピーリンクがクリップボードにコピーされました!
5.5.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションが quarkus-cxf-rt-ws-rm に依存すると、application.properties で定義されているすべてのクライアントとサービスエンドポイントに対して WS-RM が有効になります。これは、quarkus.cxf.client."client-name".rm.enabled プロパティー と quarkus.cxf.endpoint."/endpoint-path".rm.enabled プロパティーがデフォルトで true になっているためです。
クライアントまたはサービスエンドポイントに対して WS-RM を有効にすると、指定されたクライアントまたはエンドポイントに WS-RM インターセプター が追加されます。
さらに、以下に 記載されているオプションや、次の WS-Addressing オプションを設定することもできます。
5.5.3.1. 実行可能な例 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF ソースツリーには、分離されたエンドポイントを持つ WS-RM をカバーする結合テストがあります。
これは、相互に通信する 2 つのアプリケーションに分割されます。
実行するには、まずローカルの Maven リポジトリーにサーバーをインストールする必要があります。
$ cd test-util-parent/test-ws-rm-server-jvm
$ mvn clean install
そして、クライアントモジュールに実装されている {link-quarkus-cxf-source-tree-base}/integration-tests/ws-rm-client/src/test/java/io/quarkiverse/cxf/it/ws/rm/client/WsReliableMessagingTest.java#L28[テストシナリオ] を実行できます。
$ cd ../../integration-tests/ws-rm-client
$ mvn clean test
コンソールでは、クライアント、サーバー、分離されたエンドポイント間の SOAP メッセージの交換を確認できます。
5.5.4. 設定 リンクのコピーリンクがクリップボードにコピーされました!
ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
| 設定プロパティー | 型 | デフォルト |
|---|---|---|
|
| ||
|
WS-RM バージョン namespace:
環境変数: | ||
|
| ||
|
WS-Addressing バージョン namespace:
環境変数: | ||
|
| ||
| 送信者と受信者の間でメッセージ (確認応答やその他の制御メッセージを含む) が交換されなかった場合に関連付けられたシーケンスが閉じられる期間 (ミリ秒単位)。設定されていない場合、非アクティブであることが原因で関連付けられたシーケンスが閉じられることはありません。
環境変数: | ||
|
|
| |
| 受信者によって確認されないメッセージを再送信する試行間隔 (ミリ秒単位)。
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
| ||
| 受信したメッセージの確認応答が、その期間内に RM 宛先から送信されると予想される間隔 (ミリ秒単位)。指定しない場合は、確認応答が直ちに送信されます。
環境変数: | ||
|
| ||
|
ソースおよび宛先シーケンスとメッセージ参照を保存するために使用される
環境変数: | ||
|
|
| |
|
値が
環境変数: | ||
|
|
| |
|
環境変数: | ||
|
|
| |
|
環境変数: | ||
5.6. セキュリティートークンサービス (STS) リンクのコピーリンクがクリップボードにコピーされました!
WS-Trust のコンテキストでセキュリティートークンを発行、更新、検証します。
5.6.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com で quarkus-cxf-services-sts を使用して新規プロジェクト を作成するか、既存プロジェクトに次の座標を追加します。
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-services-sts</artifactId>
</dependency>
5.6.2. サポートされる標準 リンクのコピーリンクがクリップボードにコピーされました!
5.6.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
基本的な WS-Trust シナリオの重要な部分は次のとおりです。
-
WS-SecurityPolicy - トランスポートプロトコル、暗号化、署名などのセキュリティー要件の定義以外に、
<IssuedToken>アサーションを含めることもできます。これは、クライアントがサービスにアクセスする際に準拠する必要があるセキュリティートークンの要件と制約を指定します。 - Security Token Service (STS) - 要求に応じてセキュリティートークンを発行、検証、更新します。クライアントを認証し、クライアントのアイデンティティーと権限を証明するトークンを発行する信頼済み機関として機能します。
- クライアント - Web サービスにアクセスするために STS からトークンを要求します。STS に対して自身を認証し、必要なトークンの種類に関する詳細を提供する必要があります。
- サービス - クライアントを認証し、トークンを検証するために STS に依存します。
5.6.3.1. 実行可能な例 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF ソースツリーには、WS-Trust をカバーする 結合テスト があります。その詳細と、個々の部分がどのように連動するか見てみましょう。
5.6.3.1.1. WS-SecurityPolicy リンクのコピーリンクがクリップボードにコピーされました!
ポリシーは asymmetric-saml2-policy.xml ファイルにあります。重要な部分は、SAML 2.0 トークンを必要とする <IssuedToken> アサーションです。
asymmetric-saml2-policy.xml
<sp:IssuedToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<sp:RequestSecurityTokenTemplate>
<t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
<t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/PublicKey</t:KeyType>
</sp:RequestSecurityTokenTemplate>
<wsp:Policy>
<sp:RequireInternalReference />
</wsp:Policy>
<sp:Issuer>
<wsaws:Address>http://localhost:8081/services/sts</wsaws:Address>
<wsaws:Metadata xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
wsdli:wsdlLocation="http://localhost:8081/services/sts?wsdl">
<wsaw:ServiceName xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:stsns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"
EndpointName="UT_Port">stsns:SecurityTokenService</wsaw:ServiceName>
</wsaws:Metadata>
</sp:Issuer>
</sp:IssuedToken>
5.6.3.1.2. セキュリティートークンサービス (STS) リンクのコピーリンクがクリップボードにコピーされました!
STS は、Sts.java に実装されています。
Sts.java
@WebServiceProvider(serviceName = "SecurityTokenService", portName = "UT_Port", targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/", wsdlLocation = "ws-trust-1.4-service.wsdl")
public class Sts extends SecurityTokenServiceProvider {
public Sts() throws Exception {
super();
StaticSTSProperties props = new StaticSTSProperties();
props.setSignatureCryptoProperties("stsKeystore.properties");
props.setSignatureUsername("sts");
props.setCallbackHandlerClass(StsCallbackHandler.class.getName());
props.setIssuer("SampleSTSIssuer");
List<ServiceMBean> services = new LinkedList<ServiceMBean>();
StaticService service = new StaticService();
final Config config = ConfigProvider.getConfig();
final int port = LaunchMode.current().equals(LaunchMode.TEST) ? config.getValue("quarkus.http.test-port", Integer.class)
: config.getValue("quarkus.http.port", Integer.class);
service.setEndpoints(Arrays.asList(
"http://localhost:" + port + "/services/hello-ws-trust",
"http://localhost:" + port + "/services/hello-ws-trust-actas",
"http://localhost:" + port + "/services/hello-ws-trust-onbehalfof"));
services.add(service);
TokenIssueOperation issueOperation = new TokenIssueOperation();
issueOperation.setServices(services);
issueOperation.getTokenProviders().add(new SAMLTokenProvider());
// required for OnBehalfOf
issueOperation.getTokenValidators().add(new UsernameTokenValidator());
// added for OnBehalfOf and ActAs
issueOperation.getDelegationHandlers().add(new UsernameTokenDelegationHandler());
issueOperation.setStsProperties(props);
TokenValidateOperation validateOperation = new TokenValidateOperation();
validateOperation.getTokenValidators().add(new SAMLTokenValidator());
validateOperation.setStsProperties(props);
this.setIssueOperation(issueOperation);
this.setValidateOperation(validateOperation);
}
}
また、application.properties で設定されています。
application.properties
quarkus.cxf.endpoint."/sts".implementor = io.quarkiverse.cxf.it.ws.trust.sts.Sts
quarkus.cxf.endpoint."/sts".logging.enabled = pretty
quarkus.cxf.endpoint."/sts".security.signature.username = sts
quarkus.cxf.endpoint."/sts".security.signature.password = password
quarkus.cxf.endpoint."/sts".security.validate.token = false
quarkus.cxf.endpoint."/sts".security.signature.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.endpoint."/sts".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
quarkus.cxf.endpoint."/sts".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
quarkus.cxf.endpoint."/sts".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.file" = sts.pkcs12
5.6.3.1.3. サービス リンクのコピーリンクがクリップボードにコピーされました!
このサービスは、TrustHelloServiceImpl.java に実装されています。
TrustHelloServiceImpl.java
@WebService(portName = "TrustHelloServicePort", serviceName = "TrustHelloService", targetNamespace = "https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/test/ws-trust", endpointInterface = "io.quarkiverse.cxf.it.ws.trust.server.TrustHelloService")
public class TrustHelloServiceImpl implements TrustHelloService {
@WebMethod
@Override
public String hello(String person) {
return "Hello " + person + "!";
}
}
上記の asymmetric-saml2-policy.xml は、サービスエンドポイントインターフェイス TrustHelloService.java に設定されています。
TrustHelloServiceImpl.java
@WebService(targetNamespace = "https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/test/ws-trust")
@Policy(placement = Policy.Placement.BINDING, uri = "classpath:/asymmetric-saml2-policy.xml")
public interface TrustHelloService {
@WebMethod
@Policies({
@Policy(placement = Policy.Placement.BINDING_OPERATION_INPUT, uri = "classpath:/io-policy.xml"),
@Policy(placement = Policy.Placement.BINDING_OPERATION_OUTPUT, uri = "classpath:/io-policy.xml")
})
String hello(String person);
}
サービスエンドポイントは、application.properties で設定されます。
application.properties
quarkus.cxf.endpoint."/hello-ws-trust".implementor = io.quarkiverse.cxf.it.ws.trust.server.TrustHelloServiceImpl
quarkus.cxf.endpoint."/hello-ws-trust".logging.enabled = pretty
quarkus.cxf.endpoint."/hello-ws-trust".security.signature.username = service
quarkus.cxf.endpoint."/hello-ws-trust".security.signature.password = password
quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = service
quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.merlin.file" = service.pkcs12
quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = service
quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.merlin.file" = service.pkcs12
5.6.3.1.4. クライアント リンクのコピーリンクがクリップボードにコピーされました!
最後に、SOAP クライアントがサービスと通信できるようにするには、STSClient を設定する必要があります。これは application.properties で行えます。
application.properties
quarkus.cxf.client.hello-ws-trust.security.sts.client.wsdl = http://localhost:${quarkus.http.test-port}/services/sts?wsdl
quarkus.cxf.client.hello-ws-trust.security.sts.client.service-name = {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}SecurityTokenService
quarkus.cxf.client.hello-ws-trust.security.sts.client.endpoint-name = {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}UT_Port
quarkus.cxf.client.hello-ws-trust.security.sts.client.username = client
quarkus.cxf.client.hello-ws-trust.security.sts.client.password = password
quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.username = sts
quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = client
quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.file" = client.pkcs12
quarkus.cxf.client.hello-ws-trust.security.sts.client.token.username = client
quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = client
quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.merlin.keystore.file" = client.pkcs12
quarkus.cxf.client.hello-ws-trust.security.sts.client.token.usecert = true
STS クライアントを設定するためのプロパティーは io.quarkiverse.cxf:quarkus-cxf-rt-ws-security エクステンションによって提供され、quarkus-cxf-rt-ws-security リファレンスページ に記載されています。
クライアントを Bean 参照として設定することもできます。
application.properties
quarkus.cxf.client.hello-ws-trust-bean.security.sts.client = #stsClientBean
その場合、@Named Bean は、たとえば @jakarta.enterprise.inject.Produces を使用してプログラムで生成する必要があります。
BeanProducers.java
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Named;
import org.apache.cxf.ws.security.SecurityConstants;
import io.quarkiverse.cxf.ws.security.sts.client.STSClientBean;
public class BeanProducers {
/**
* Create and configure an STSClient for use by the TrustHelloService client.
*/
@Produces
@ApplicationScoped
@Named("stsClientBean")
STSClientBean createSTSClient() {
/*
* We cannot use org.apache.cxf.ws.security.trust.STSClient as a return type of this bean producer method
* because it does not have a no-args constructor. STSClientBean is a subclass of STSClient having one.
*/
STSClientBean stsClient = STSClientBean.create();
stsClient.setWsdlLocation("http://localhost:8081/services/sts?wsdl");
stsClient.setServiceQName(new QName("http://docs.oasis-open.org/ws-sx/ws-trust/200512/", "SecurityTokenService"));
stsClient.setEndpointQName(new QName("http://docs.oasis-open.org/ws-sx/ws-trust/200512/", "UT_Port"));
Map<String, Object> props = stsClient.getProperties();
props.put(SecurityConstants.USERNAME, "client");
props.put(SecurityConstants.PASSWORD, "password");
props.put(SecurityConstants.ENCRYPT_PROPERTIES,
Thread.currentThread().getContextClassLoader().getResource("clientKeystore.properties"));
props.put(SecurityConstants.ENCRYPT_USERNAME, "sts");
props.put(SecurityConstants.STS_TOKEN_USERNAME, "client");
props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
Thread.currentThread().getContextClassLoader().getResource("clientKeystore.properties"));
props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
return stsClient;
}
}
5.7. HTTP 非同期トランスポート リンクのコピーリンクがクリップボードにコピーされました!
Apache HttpComponents HttpClient 5 を使用して非同期 SOAP クライアントを実装します。
5.7.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com で quarkus-cxf-rt-transports-http-hc5 を使用し新規プロジェクト を作成するか、既存のプロジェクトに次の座標を追加します。
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-rt-transports-http-hc5</artifactId>
</dependency>
5.7.2. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
quarkus-cxf-rt-transports-http-hc5 依存関係がクラスパスで使用可能になると、CXF は非同期呼び出しに HttpAsyncClient を使用し、同期呼び出しには引き続き HttpURLConnection を使用します。
5.7.2.1. 非同期メソッドの生成 リンクのコピーリンクがクリップボードにコピーされました!
非同期クライアント呼び出しには、サービスエンドポイントインターフェイスにいくつかの追加メソッドが必要です。そのコードはデフォルトでは生成されません。
これを有効にするには、enableAsyncMapping を true に設定した JAX-WS バインディングファイルを作成する必要があります。
このセクションで使用されているサンプルコードは、Quarkus CXF のソースツリーにある HC5 integration test からの抜粋です。
src/main/resources/wsdl/async-binding.xml
<?xml version="1.0"?>
<bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="https://jakarta.ee/xml/ns/jaxws"
wsdlLocation="CalculatorService.wsdl">
<bindings node="wsdl:definitions">
<enableAsyncMapping>true</enableAsyncMapping>
</bindings>
</bindings>
その後、additional-params プロパティーを介してこのファイルを wsdl2java に渡す必要があります。
application.properties
quarkus.cxf.codegen.wsdl2java.includes = wsdl/*.wsdl
quarkus.cxf.codegen.wsdl2java.additional-params = -b,src/main/resources/wsdl/async-binding.xml
5.7.2.2. 非同期クライアントと Mutiny リンクのコピーリンクがクリップボードにコピーされました!
非同期スタブが利用可能になると、次のように io.smallrye.mutiny.Uni でクライアント呼び出しをラップできるようになります。
package io.quarkiverse.cxf.hc5.it;
import java.util.concurrent.Future;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;
import org.jboss.eap.quickstarts.wscalculator.calculator.AddResponse;
import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;
import io.quarkiverse.cxf.annotation.CXFClient;
import io.smallrye.mutiny.Uni;
@Path("/hc5")
public class Hc5Resource {
@Inject
@CXFClient("myCalculator") // name used in application.properties
CalculatorService myCalculator;
@SuppressWarnings("unchecked")
@Path("/add-async")
@GET
@Produces(MediaType.TEXT_PLAIN)
public Uni<Integer> addAsync(@QueryParam("a") int a, @QueryParam("b") int b) {
return Uni.createFrom()
.future(
(Future<AddResponse>) myCalculator
.addAsync(a, b, res -> {
}))
.map(addResponse -> addResponse.getReturn());
}
}
5.7.2.3. スレッドプール リンクのコピーリンクがクリップボードにコピーされました!
このエクステンションによって配信される非同期クライアントは、Quarkus が提供するスレッドプールを備えた ManagedExecutor を活用します。スレッドプールは、オプション の quarkus.thread-pool.* ファミリーを使用して設定できます。その場合、org.apache.cxf.transports.http.configuration.HTTPClientPolicy のエグゼキューターおよびスレッドプール関連の属性は、Quarkus 上の非同期クライアントで考慮されません。
CXF 非同期クライアントの詳細と、その調整方法は、CXF ドキュメント を参照してください。
5.8. XJC プラグイン リンクのコピーリンクがクリップボードにコピーされました!
wsdl2java コード生成用の XJC プラグイン。quarkus.cxf.codegen.wsdl2java.additional-params で次のいずれかを使用する場合は、このエクステンションを追加する必要があります。
-
-xjc-Xbg- ブールフィールドに対してisFoo()accessor メソッドの代わりにgetFoo()を生成します。 -
-xjc-Xdv- フィールドが明示的に設定されていない限り、生成された getter メソッドはスキーマで定義されたデフォルト値を返します。 -
-xjc-Xjavadoc- スキーマ内に存在するxs:documentationに基づき JavaDoc を生成します。 -
-xjc-Xproperty-listener- 生成された Bean にPropertyChangeListenerのサポートを追加します。 -
-xjc-Xts- モデルクラスにtoString()メソッドを生成します。 -
-xjc-Xwsdlextension- WSDL のエクステンサーとして WSDL4J で直接使用できる Bean を生成します。
wsdl2java の詳細は、ユーザーガイドの wsdl2java セクションを参照してください。
5.8.1. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com で quarkus-cxf-xjc-plugins を使用して新規プロジェクト を作成するか、既存プロジェクトに次の座標を追加します。
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-xjc-plugins</artifactId>
</dependency>
第6章 Quarkus CXF ユーザーガイド リンクのコピーリンクがクリップボードにコピーされました!
この章では、Quarkus CXF の使用と設定を説明します。
6.1. ユーザーガイド リンクのコピーリンクがクリップボードにコピーされました!
このユーザーガイドでは、Quarkus CXF の一般的なユースケースを説明します。
以下のトピックから始めるとよいでしょう。
6.2. 新しいプロジェクトを作成する リンクのコピーリンクがクリップボードにコピーされました!
このガイドでは、CXF クライアントまたはサーバー、あるいはその両方をホストする Quarkus アプリケーションの新規プロジェクトを設定する方法を説明します。
6.2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus スタートガイドの 前提条件セクション を読了した。
さらに以下が必要な場合があります。
-
native-imageコマンドがインストールされ、GRAALVM_HOME環境変数が設定された GraalVM。Quarkus ドキュメントの Building a native executable セクションを参照してください。 -
Linux を使用している場合は、
dockerなどのコンテナーランタイムでネイティブモードにも対応できます。このオプションを選択する場合は、-Pnativeではなく-Pnative -Dquarkus.native.container-build=trueを使用してください。
6.2.2. Create project リンクのコピーリンクがクリップボードにコピーされました!
新しいプロジェクトスケルトンは、code.quarkus.redhat.com を使用して生成できます。
- ここで、使用するエクステンションを選択できます。
-
シンプルな Hello world Web サービスまたはクライアントの場合、
quarkus-cxfエクステンションで十分です。 -
基本的なスケルトンプロジェクトをダウンロードするには、青色の
Generate your applicationボタンをクリックします。 - zip ファイルを展開し、プロジェクトをお気に入りの IDE にインポートします。
6.2.3. 依存関係の管理 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus Platform バージョン 3.1.0.Final 以降では、Quarkus CXF は Quarkus Platform に含まれています。これは、code.quarkus.redhat.com やその他の Quarkus 開発ツール が適切な依存関係管理を備えたプロジェクトを生成することを意味します。
<project ...>
...
<properties>
...
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version><!-- Check the latest https://repo1.maven.org/maven2/io/quarkus/platform/quarkus-cxf-bom/ --></quarkus.platform.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-cxf-bom</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
...
必ず同じバージョンの io.quarkus.platform:quarkus-bom と io.quarkus.platform:quarkus-cxf-bom をプロジェクトにインポートするように注意してください。これは、Quarkus、CXF、Quarkus CXF およびそれらすべての推移的依存関係に対して互換性のあるバージョンを取得するための最も信頼性の高い方法です。
6.2.4. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
次に示す章のいずれかに進むことが推奨されます。
- 最初の SOAP Web サービス
- ug_first-soap-client [初めての SOAP クライアント]
6.3. Quarkus 上での最初の SOAP Web サービス リンクのコピーリンクがクリップボードにコピーされました!
このガイドでは、シンプルな SOAP Web サービスを公開する Quarkus アプリケーションの作成方法を説明します。
ここに進む前に、プロジェクト作成 ガイドに従ってください。
6.3.1. Hello world!Web サービス リンクのコピーリンクがクリップボードにコピーされました!
pom.xml が配置されていれば、シンプルな Hello world! Web サービスを src/main/java 内に追加できます。
このセクションで使用されているサンプルコードは、Quarkus CXF のソースツリーにある server integration test からの抜粋です。
まずサービスインターフェイスを追加します。
HelloService.java
package io.quarkiverse.cxf.it.server;
import jakarta.jws.WebMethod;
import jakarta.jws.WebService;
/**
* The simplest Hello service.
*/
@WebService(name = "HelloService", serviceName = "HelloService")
public interface HelloService {
@WebMethod
String hello(String text);
}
実装は次のようになります。
HelloServiceImpl.java
package io.quarkiverse.cxf.it.server;
import jakarta.jws.WebMethod;
import jakarta.jws.WebService;
/**
* The simplest Hello service implementation.
*/
@WebService(serviceName = "HelloService", portName = "HelloServicePort")
public class HelloServiceImpl implements HelloService {
@WebMethod
@Override
public String hello(String text) {
return "Hello " + text + "!";
}
}
実装を特定のパスで公開するには、application.properties に次の設定を追加する必要があります。
# The context path under which all services will be available
quarkus.cxf.path = /soap
# Publish "HelloService" under the context path /${quarkus.cxf.path}/hello
quarkus.cxf.endpoint."/hello".implementor = io.quarkiverse.cxf.it.server.HelloServiceImpl
quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
すべての設定プロパティーは、設定プロパティー リファレンスに記載されています。
これらのファイルが配置されると、Quarkus を dev モード で起動できます。
$ mvn quarkus:dev
これにより、プロジェクトがコンパイルされ、アプリケーションがバックグラウンドで起動します。
curl またはその他の SOAP クライアントを使用して、サービスをテストできます。
まず、http://localhost:8080/soap/hello?wsdl に自動生成された WSDL を見てみましょう。
$ curl http://localhost:8080/soap/hello?wsdl
<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.it.cxf.quarkiverse.io/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
name="HelloService" targetNamespace="http://server.it.cxf.quarkiverse.io/">
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://server.it.cxf.quarkiverse.io/" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://server.it.cxf.quarkiverse.io/">
<xsd:element name="hello" type="tns:hello"/>
<xsd:complexType name="hello">
<xsd:sequence>
<xsd:element minOccurs="0" name="arg0" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="helloResponse" type="tns:helloResponse"/>
<xsd:complexType name="helloResponse">
<xsd:sequence>
<xsd:element minOccurs="0" name="return" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="helloResponse">
<wsdl:part element="tns:helloResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="hello">
<wsdl:part element="tns:hello" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="HelloService">
<wsdl:operation name="hello">
<wsdl:input message="tns:hello" name="hello">
</wsdl:input>
<wsdl:output message="tns:helloResponse" name="helloResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="HelloServiceSoapBinding" type="tns:HelloService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="hello">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="hello">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="helloResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HelloService">
<wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloServicePort">
<soap:address location="http://localhost:8080/soap/hello"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
次に、サービスに SOAP リクエストを送信します。
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
-d \
'<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body><ns2:hello xmlns:ns2="http://server.it.cxf.quarkiverse.io/"><arg0>World</arg0></ns2:hello></soap:Body>
</soap:Envelope>' \
http://localhost:8080/soap/hello
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:helloResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
<return>Hello World!</return>
</ns1:helloResponse>
</soap:Body>
</soap:Envelope>
SOAP レスポンスに、期待通り <return>Hello World!</return> が表示されます。
6.3.2. 開発モードの実行中にログ機能を追加する リンクのコピーリンクがクリップボードにコピーされました!
サーバーまたはクライアントによって送受信された SOAP メッセージを検査できると便利な場合があります。これは、quarkus-cxf-rt-features-logging エクステンションを pom.xml に追加することで簡単に可能になります。
Quarkus 開発モードの実行中に以下を試してください。ソースツリーに変更を保存すると、アプリケーションが再コンパイルされ、再デプロイされることがわかります。
これを pom.xml に追加します
<dependency>
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-rt-features-logging</artifactId>
</dependency>
application.properties で SOAP ペイロードのログ記録を有効にします
quarkus.cxf.endpoint."/hello".features=org.apache.cxf.ext.logging.LoggingFeature
その後、新しい SOAP リクエストを送信し、アプリケーションコンソールでいくつかの SOAP ペイロードを確認できます。
2023-01-11 22:12:21,315 INFO [org.apa.cxf.ser.Hel.REQ_IN] (vert.x-worker-thread-0) REQ_IN
Address: http://localhost:8080/soap/hello
HttpMethod: POST
Content-Type: text/xml;charset=UTF-8
ExchangeId: af10747a-8477-4c17-bf5f-2a4a3a95d61c
ServiceName: HelloService
PortName: HelloServicePort
PortTypeName: HelloService
Headers: {Accept=*/*, User-Agent=curl/7.79.1, content-type=text/xml;charset=UTF-8, Host=localhost:8080, Content-Length=203, x-quarkus-hot-deployment-done=true}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body><ns2:hello xmlns:ns2="http://server.it.cxf.quarkiverse.io/"><arg0>World</arg0></ns2:hello></soap:Body>
</soap:Envelope>
2023-01-11 22:12:21,327 INFO [org.apa.cxf.ser.Hel.RESP_OUT] (vert.x-worker-thread-0) RESP_OUT
Address: http://localhost:8080/soap/hello
Content-Type: text/xml
ResponseCode: 200
ExchangeId: af10747a-8477-4c17-bf5f-2a4a3a95d61c
ServiceName: HelloService
PortName: HelloServicePort
PortTypeName: HelloService
Headers: {}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:helloResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/"><return>Hello World!</return></ns1:helloResponse></soap:Body></soap:Envelope>
6.3.3. その他のステップ リンクのコピーリンクがクリップボードにコピーされました!
JVM 上またはネイティブで実行するためのアプリケーションのパッケージ化 に進む必要がある場合があります。
6.4. Quarkus の最初の SOAP クライアント リンクのコピーリンクがクリップボードにコピーされました!
このガイドでは、リモート Web サービスのクライアントとして機能するシンプルな Quarkus アプリケーションの作成方法を説明します。
ここに進む前に、プロジェクト作成 ガイドに従ってください。
6.4.1. テスト用のリモート Web サービス リンクのコピーリンクがクリップボードにコピーされました!
まず、接続先となるリモート Web サービスが必要です。ここでは、コンテナー内で実行されるシンプルな Calculator Web サービス を使用します。
$ docker run -p 8082:8080 quay.io/l2x6/calculator-ws:1.0
コンテナーが起動したら、WSDL の検査を実行できます。
$ curl -s http://localhost:8082/calculator-ws/CalculatorService?wsdl
<?xml version="1.0" ?>
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="CalculatorService" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
...
<wsdl:binding name="CalculatorServiceSoapBinding" type="tns:CalculatorService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
<wsdl:operation name="add">
<soap:operation soapAction="" style="document"></soap:operation>
<wsdl:input name="add">
<soap:body use="literal"></soap:body>
</wsdl:input>
<wsdl:output name="addResponse">
<soap:body use="literal"></soap:body>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="subtract">
<soap:operation soapAction="" style="document"></soap:operation>
<wsdl:input name="subtract">
<soap:body use="literal"></soap:body>
</wsdl:input>
<wsdl:output name="subtractResponse">
<soap:body use="literal"></soap:body>
</wsdl:output>
</wsdl:operation>
...
</wsdl:binding>
...
</wsdl:definitions>
WSDL を見るとわかるように、このサービスでは、add や subtract などの基本的な算術演算がいくつか提供されています。
curl でテストしてみましょう。
$ curl -s \
-X POST \
-H "Content-Type: text/xml;charset=UTF-8" \
-d \
'<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<add xmlns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
<arg0 xmlns="">7</arg0>
<arg1 xmlns="">4</arg1>
</add>
</Body>
</Envelope>' \
http://localhost:8082/calculator-ws/CalculatorService
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:addResponse xmlns:ns2="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
<return>11</return>
</ns2:addResponse>
</soap:Body>
</soap:Envelope>
6.4.2. SOAP クライアント リンクのコピーリンクがクリップボードにコピーされました!
それでは、Quarkus アプリケーション内でクライアントを取得する方法を見てみましょう。
まず、サービスエンドポイントインターフェイス (SEI) と、それに必要なその他のすべてのモデルクラスが必要です。
入手方法はいくつかあります。
- 手動で記述する。
- Web サービスプロジェクトで Java で書かれている場合、そこからコピーする。
- モデルクラスを含む Maven アーティファクトを使用する (Service プロジェクトによって提供されている可能性があります)。
- WSDL からモデルクラスを生成する。
最後のオプションは、クライアントアプリケーションにとって最も簡単で柔軟性が高い傾向があります。
この方法を使用する場合は、まず WSDL から Java を生成する セクションに従って作業を行ってから次の手順に進みます。
6.4.3. SEI をクライアントとして使用する リンクのコピーリンクがクリップボードにコピーされました!
この場合、サービスエンドポイントインターフェイス (SEI) は org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService です。
通常どおり Quarkus では、CDI 経由でそのインスタンスを取得できます。
簡単にテストできるようにするために、REST サービスでラップします。
CxfClientResource.java
package io.quarkiverse.cxf.client.it;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;
import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;
import io.quarkiverse.cxf.annotation.CXFClient;
@Path("/cxf/calculator-client")
public class CxfClientRestResource {
@CXFClient("myCalculator")
CalculatorService myCalculator;
@GET
@Path("/add")
@Produces(MediaType.TEXT_PLAIN)
public int add(@QueryParam("a") int a, @QueryParam("b") int b) {
return myCalculator.add(a, b);
}
}
クライアントが動作するために必要なのはこれだけですか? - いいえ。上記以外にも、application.properties の CXF Quarkus エクステンションに対して行うべきことがいくつかあります。
application.properties
cxf.it.calculator.baseUri=http://localhost:8082
quarkus.cxf.client.myCalculator.wsdl = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService?wsdl
quarkus.cxf.client.myCalculator.client-endpoint-url = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService
quarkus.cxf.client.myCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
すべてのクライアント設定プロパティーは、設定プロパティー リファレンスに記載されています。
上記のファイルがすべて揃った時点で、Quarkus dev モード でアプリケーションを起動できるはずです。
$ mvn quarkus:dev
...
INFO [io.quarkus] (Quarkus Main Thread) ... Listening on: http://localhost:8080
その後、いくつかのリクエストを送信してテストします。
$ curl -s 'http://localhost:8080/cxf/calculator-client/add?a=5&b=6'
11
この場合の 11 は、5 と 6 を足した正しい結果です。
6.4.4. その他のステップ リンクのコピーリンクがクリップボードにコピーされました!
次に、以下に進む必要がある場合があります。
6.5. 設定 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF は、多数の設定オプションを公開します。各エクステンションのオプションは、リファレンスページ の下部に記載されています。
設定オプションは、application.properties ファイルで、または環境変数を介して設定できます。詳細は Quarkus configuration reference を参照してください。
6.5.1. Bean 参照 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF のいくつかの設定オプションを使用すると、Quarkus CDI コンテナー内に存在する Bean を参照できます。機能とインターセプター は、その典型的な例です。
設定では、タイプまたは Bean 名を使用する 2 種類の方法で Bean 参照を設定できます。
6.5.1.1. タイプによる Bean 参照 リンクのコピーリンクがクリップボードにコピーされました!
以下に例を示します。
application.properties
# bean reference by type
quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
タイプ名による参照を使用する場合、解決は次のように進行します。
- まず、Quarkus CDI コンテナーでタイプに基づき Bean が検索されます。
- その Bean が使用可能な場合、それが使用されます。
- 指定されたタイプに複数の Bean を割り当てることができる場合は、例外がスローされます。
- 一致する Bean がない場合、クラスがロードされ、デフォルトのコンストラクターを使用したインスタンス化が試行されます。
6.5.1.2. Bean 名による Bean 参照 リンクのコピーリンクがクリップボードにコピーされました!
以下に例を示します。
application.properties
# bean reference by bean name
quarkus.cxf.endpoint."/fruit".features = #myCustomLoggingFeature
Bean 名による参照を使用する場合、当然のことながら、Bean は Quarkus CDI コンテナー内で名前に基づき検索されます。myCustomLoggingFeature という名前付き Bean は次のように定義できます。
import org.apache.cxf.ext.logging.LoggingFeature;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
class Producers {
@Produces
@ApplicationScoped
@Named("myCustomLoggingFeature")
LoggingFeature myCustomLoggingFeature() {
LoggingFeature loggingFeature = new LoggingFeature();
loggingFeature.setPrettyLogging(true);
return loggingFeature;
}
}
6.6. JVM 上またはネイティブで実行するためのパッケージ リンクのコピーリンクがクリップボードにコピーされました!
この章では、Quarkus CXF アプリケーションを JVM 上で実行するため、またはネイティブで実行するためにパッケージ化する方法を説明します。
6.6.1. JVM モード リンクのコピーリンクがクリップボードにコピーされました!
SOAP クライアントと SOAP サービスの入門ガイドでは、Quarkus dev モードでのみ作業しました。Quarkus ツールはバックグラウンドで実行され、ワークスペースの変更を監視し、必要に応じてアプリケーションを再コンパイルして再ロードしました。
開発完了後に JVM 上でアプリケーションを実行する方法
まず、Maven でパッケージ化する必要があります。
$ mvn package
JVM 上でアプリケーションを実行するために必要なライブラリーは、target/quarkus-app ディレクトリーにあります。
$ ls -lh target/quarkus-app
drwxr-xr-x. 2 ppalaga ppalaga 4.0K Jan 12 22:29 app
drwxr-xr-x. 4 ppalaga ppalaga 4.0K Jan 12 22:29 lib
drwxr-xr-x. 2 ppalaga ppalaga 4.0K Jan 12 22:29 quarkus
-rw-r-r--. 1 ppalaga ppalaga 6.1K Jan 12 22:29 quarkus-app-dependencies.txt
-rw-r-r--. 1 ppalaga ppalaga 678 Jan 12 22:29 quarkus-run.jar
アプリケーションは次のように起動できます。
$ java -jar target/quarkus-app/quarkus-run.jar
アプリケーションが動作することを確認するために、curl を使用していくつかの SOAP リクエストを送信できます。
6.6.2. ネイティブモード リンクのコピーリンクがクリップボードにコピーされました!
Quarkus は、GraalVM ネイティブイメージの構築に対して第一級のサポートを提供しており、Quarkus CXF もその約束を完全に守っています。
GraalVM ネイティブイメージは、JVM なしで直接実行できるプラットフォーム固有の実行可能ファイルです。同じアプリケーションを JVM モードで実行するのと比べて、起動が速くなり、メモリーの消費量も少なくなります。
code.quarkus.redhat.com によって生成された pom.xml ファイルには、ネイティブイメージの構築に必要な native プロファイルが含まれています。
<profile>
<id>native</id>
<activation>
<property>
<name>native</name>
</property>
</activation>
<properties>
<skipITs>false</skipITs>
<quarkus.package.type>native</quarkus.package.type>
</properties>
</profile>
さらに、「Create project」セクションでは、GraalVM ネイティブイメージ ツールが必要です。
ローカルにインストールして GRAALVM_HOME 環境変数を適切に設定するか、Linux ネイティブ実行可能ファイルのみを作成する必要がある場合は docker を使用できます。
GraalVM のローカルインストールの使用
# Make sure $GRAALVM_HOME is set properly
$ echo $GRAALVM_HOME
/home/{user}/.sdkman/candidates/java/{major}.{minor}.r{java-version}-grl
# Produce the native executable
mvn package -Pnative
Quarkus は GraalVM のバージョンについて非常に厳格です。ローカルインストールを使用する場合は、必ず Quarkus が推奨するバージョンを使用してください。そのためには、pom.xml にインポートされた quarkus-bom を開き、そこで graalvm を検索します。Docker を使用する場合、Quarkus が適切なバージョンを取得します。
docker を使用する場合
# Produce the native executable
mvn package -Pnative -Dquarkus.native.container-build=true
シンプルなアプリケーションの場合、約 1 分かかります。
ビルドが完了すると、ネイティブ実行ファイルが target ディレクトリーで使用できるようになります。
$ ls -l target
...
-rwxr-xr-x. 1 ppalaga ppalaga 71M Jan 11 22:42 quarkus-cxf-integration-test-server-1.8.0-SNAPSHOT-runner
...
ご覧のとおり、サイズはわずか 71 MB で、実行可能です。
これは、以下のように実行できます。
$ target/*-runner
...
INFO [io.quarkus] (main) quarkus-cxf-integration-test-server 1.8.0-SNAPSHOT native (powered by Quarkus
2.15.2.Final) started in 0.042s. Listening on: http://0.0.0.0:8080
...
ここでも、curl を使用していくつかの SOAP リクエストを送信し、ネイティブ実行ファイルが機能することを確認できます。
メモリー使用量、最初のリクエストまでの時間、その他のパフォーマンスメトリクスを以前使用したスタックと比較し、結果を共有することを忘れないでください。
6.6.3. ネイティブイメージ: 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
ネイティブイメージの操作方法に関するヒントが記載されている以下のリンクも参照してください。
6.6.4. コンテナーイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus Container image ガイドを参照してください。
6.7. ロギング リンクのコピーリンクがクリップボードにコピーされました!
Quarkus でのロギングに関する基本的な情報は、Quarkus Logging guide を参照してください。
6.7.1. ペイロードのロギング リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF 2.6.0 以降では、ペイロードロギング機能は io.quarkiverse.cxf:quarkus-cxf エクステンションを介して利用できます。2.6.0 より前は、別のエクステンション io.quarkiverse.cxf:quarkus-cxf-rt-features-logging を介して使用できましたが、現在これは非推奨となっており、今後削除される予定です。
ペイロードロギング機能は、主に org.apache.cxf.ext.logging.LoggingFeature クラスを通じて実装されます。
この機能は、いくつかの方法でクライアントまたはサービスエンドポイント上に設定できます。
6.7.2. 設定プロパティーを使用してペイロードロギングを設定する リンクのコピーリンクがクリップボードにコピーされました!
6.7.2.1. グローバル設定 リンクのコピーリンクがクリップボードにコピーされました!
グローバルロギングオプションは、Quarkus CXF 2.6.0 以降に存在します。quarkus.cxf.logging.enabled-for を使用して有効にする必要があります。利用可能な値は 4 つあります。
-
none(デフォルト) - グローバルログ機能はクライアントでもサービスエンドポイントでも有効化されません -
clients- アプリケーション内のすべてのクライアントに対してグローバルログ機能が有効になります -
services- アプリケーション内のすべてのサービスエンドポイントに対してグローバルログ機能が有効になります -
both- アプリケーション内のすべてのクライアントとサービスエンドポイントに対してグローバルログ機能が有効になります
グローバル設定は、クライアントまたはサービスエンドポイントレベルで オーバーライド できます。
application.properties
# Global settings
quarkus.cxf.logging.enabled-for = both
quarkus.cxf.logging.pretty = true
quarkus-cxf リファレンスページには、すべてのロギング設定オプションがリストされています。
このページに記載されているすべてのロギングプロパティーは、ランタイム 設定オプションです。したがって、アプリケーションの起動時に再構築せずに渡すことができます。これは、コマンドラインでシステムプロパティー (例: -Dquarkus.cxf.logging.enabled-for=both) を渡すか、環境変数 (例: export QUARKUS_CXF_LOGGING_ENABLED_FOR=both) を設定することによって実行できます。
6.7.2.2. クライアントごとおよびサービスごとのエンドポイント設定 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF 2.5.0 以降では、application.properties で適切なオプションを設定することで、LoggingFeature を宣言的に設定し、クライアントまたはサービスエンドポイントにアタッチできます。
application.properties
# For a service:
quarkus.cxf.endpoint."/hello".logging.enabled = true
quarkus.cxf.endpoint."/hello".logging.pretty = true
# For a client:
quarkus.cxf.client.hello.logging.enabled = true
quarkus.cxf.client.hello.logging.pretty = true
すべてのロギング設定オプションは、quarkus-cxf リファレンスページに記載されています。
6.7.3. クライアントまたはサービスに LoggingFeature を追加する別の方法 リンクのコピーリンクがクリップボードにコピーされました!
デフォルト設定でインスタンスをアタッチするには、次のいずれかを実行します。
application.propertiesを使用する場合:# For a service: quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature # For a client: quarkus.cxf.client."myClient".features = org.apache.cxf.ext.logging.LoggingFeatureヒントユーザーガイドの 最初の SOAP Web サービス の章に例が記載されています。
もしくは、次の方法を使用します。
CXF の
@Featuresアノテーションを使用する場合:@org.apache.cxf.feature.Features (features = {"org.apache.cxf.ext.logging.LoggingFeature"}) @WebService(endpointInterface = "org.acme.SayHi", targetNamespace = "uri:org.acme") public class SayHiImplementation implements SayHi { public long sayHi(long arg) { return arg; } //... }
6.7.3.1. カスタム LoggingFeature Bean の生成 リンクのコピーリンクがクリップボードにコピーされました!
LoggingFeature を設定するためのカスタムロジックが必要な場合は、名前付き LoggingFeature Bean を生成できます。
import org.apache.cxf.ext.logging.LoggingFeature;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
class Producers {
@Produces
@ApplicationScoped
@Named("limitedLoggingFeature") // "limitedLoggingFeature" is redundant if the name of the method is the same
LoggingFeature limitedLoggingFeature() {
LoggingFeature loggingFeature = new LoggingFeature();
loggingFeature.setPrettyLogging(true);
loggingFeature.setLimit(1024);
return loggingFeature;
}
}
その後、application.properties で # を接頭辞として付けた名前で参照します。
# For a service:
quarkus.cxf.endpoint."/hello".features = #limitedLoggingFeature
# For a client:
quarkus.cxf.client.hello.features = #limitedLoggingFeature
6.8. JAXB を使用する複雑な SOAP ペイロード リンクのコピーリンクがクリップボードにコピーされました!
Quarkus ug_first-soap-client[SOAP クライアント] と SOAP サービス の入門ガイドでは、整数や文字列などのプリミティブパラメーターと戻り値のみを持つサービスを扱いました。ここでは、より複雑なオブジェクトの送受信を見てみましょう。
例として、果物 (Fruit) を管理するアプリケーションを作成します。
このセクションで使用されているサンプルコードは、Quarkus CXF のソースツリーにある server integration test からの抜粋です。
果物の表現は複雑になることが予想されるため、いくつかの属性を持つ Java Bean としてモデル化します。
package io.quarkiverse.cxf.it.server;
import java.util.Objects;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;
@XmlType(name = "Fruit")
@XmlRootElement
public class Fruit {
private String name;
private String description;
public Fruit() {
}
public Fruit(String name, String description) {
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
@XmlElement
public void setDescription(String description) {
this.description = description;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Fruit)) {
return false;
}
Fruit other = (Fruit) obj;
return Objects.equals(other.getName(), this.getName());
}
@Override
public int hashCode() {
return Objects.hash(this.getName());
}
}
お気付きのとおり、@XmlElement、@XmlRootElement、@XmlType などの JAXB アノテーションをいくつか使用しています。これは、Bean の XML からのシリアル化と XML への逆シリアル化を制御するためのものです。
6.8.1. リフレクションの自動登録 リンクのコピーリンクがクリップボードにコピーされました!
JAXB は、リフレクションベースのシリアル化フレームワークです。GraalVM ネイティブイメージを学ぶ場合、ビルド時にリフレクションのクラス、フィールド、メソッドを登録する必要があるということを最初に耳にします。プレーン GraalVM では、reflection-config.json を通じてこれを手動で実行する必要があります。少なくとも自分で書いたクラスについてはそれが必要です。しかし、Quarkus では異なります。quarkus-jaxb エクステンション (quarkus-cxf の依存先) は、アプリケーションのクラスパスをスキャンして JAXB アノテーションが付けられたクラスを探し、リフレクションのためにそれらを自動的に登録できます。
したがって、Quarkus における複雑なペイロードの操作は、ストック CXF と変わりません。JAXB のシリアル化とデシリアル化は、追加の設定なしですぐに使用できます。
6.8.2. SEI と実装 リンクのコピーリンクがクリップボードにコピーされました!
果物を管理するためのサービスエンドポイントインターフェイス (SEI) は次のようになります。
package io.quarkiverse.cxf.it.server;
import java.util.Set;
import jakarta.jws.WebMethod;
import jakarta.jws.WebService;
@WebService
public interface FruitService {
@WebMethod
Set<Fruit> list();
@WebMethod
Set<Fruit> add(Fruit fruit);
@WebMethod
Set<Fruit> delete(Fruit fruit);
}
SEI は、可能な限りシンプルに実装できます。
package io.quarkiverse.cxf.it.server;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import jakarta.jws.WebService;
@WebService(serviceName = "FruitService")
public class FruitServiceImpl implements FruitService {
private Set<Fruit> fruits = Collections.synchronizedSet(new LinkedHashSet<>());
public FruitServiceImpl() {
fruits.add(new Fruit("Apple", "Winter fruit"));
fruits.add(new Fruit("Pineapple", "Tropical fruit"));
}
@Override
public Set<Fruit> list() {
return fruits;
}
@Override
public Set<Fruit> add(Fruit fruit) {
fruits.add(fruit);
return fruits;
}
@Override
public Set<Fruit> delete(Fruit fruit) {
fruits.remove(fruit);
return fruits;
}
}
6.8.3. application.properties リンクのコピーリンクがクリップボードにコピーされました!
実装は簡単で、必要な作業は application.properties を使用してエンドポイントを定義することだけです。
quarkus.cxf.endpoint."/fruits".implementor = io.quarkiverse.cxf.it.server.FruitServiceImpl
quarkus.cxf.endpoint."/fruits".features = org.apache.cxf.ext.logging.LoggingFeature
6.8.4. Quarkus dev モードと curl のテスト リンクのコピーリンクがクリップボードにコピーされました!
上記のファイルを配置したら、Quarkus ツールを dev モード で起動できます。
$ mvn quarkus:dev
...
INFO [io.quarkus] (Quarkus Main Thread) ... Listening on: http://localhost:8080
次に、list 操作を呼び出して、サービスが動作しているか確認します。
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
-d \
'<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
<soapenv:Body>
<ns1:list/>
</soapenv:Body>
</soapenv:Envelope>' \
http://localhost:8080/soap/fruits
...
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:listResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
<return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
<description>Winter fruit</description>
<name>Apple</name>
</return>
<return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
<description>Tropical fruit</description>
<name>Pineapple</name>
</return>
</ns1:listResponse>
</soap:Body>
</soap:Envelope>
ご覧のとおり、エンドポイントはデフォルトで利用可能な 2 つの果物 (Apple と Pineapple) を返しました。
ここで別の果物、たとえば Orange を追加します。
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
-d \
'<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:add xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
<arg0>
<description>Mediterranean fruit</description>
<name>Orange</name>
</arg0>
</ns2:add>
</soap:Body></soap:Envelope>' \
http://localhost:8080/soap/fruits
...
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:addResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
<return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
<description>Winter fruit</description>
<name>Apple</name>
</return>
<return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
<description>Tropical fruit</description>
<name>Pineapple</name>
</return>
<return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
<description>Mediterranean fruit</description>
<name>Orange</name>
</return>
</ns1:addResponse>
</soap:Body>
</soap:Envelope>
期待どおり、返されたリストに Orange が追加されています。
6.8.5. その他のステップ リンクのコピーリンクがクリップボードにコピーされました!
JVM 上またはネイティブで実行するためのアプリケーションのパッケージ化 に進む必要がある場合があります。
6.9. SSL、TLS、および HTTPS リンクのコピーリンクがクリップボードにコピーされました!
この章では、SSL、TLS、HTTPS に関連するさまざまなユースケースを説明します。
このセクションで使用されているサンプルコードは、Quarkus CXF のソースツリーにある WS-WS-SecurityPolicy integration test からの抜粋です。
6.9.1. クライアント SSL 設定 リンクのコピーリンクがクリップボードにコピーされました!
クライアントが、クライアントのオペレーティングシステムによって SSL 証明書が信頼されていないサーバーと通信する場合は、クライアント用にカスタムトラストストアを設定する必要があります。
トラストストアの作成と維持には、openssl や Java keytool などのツールがよく使用されます。
Quarkus CXF ソースツリーには、両方のツールの例があります。
- {link-quarkus-cxf-source-tree-base}/integration-tests/ws-security-policy/pom.xml#L127-L440[Java 'keytool' を使用してトラストストアを作成する (Maven プラグインでラップ)]
-
{link-quarkus-cxf-source-tree-base}/integration-tests/ws-security-policy/generate-certs.sh[
opensslを使用してトラストストアを作成する]
トラストストアを準備したら、それを使用するようにクライアントを設定する必要があります。
6.9.1.1. application.properties にクライアントトラストストアを設定する リンクのコピーリンクがクリップボードにコピーされました!
これは、最も簡単にクライアントトラストストアを設定できる方法です。次のプロパティーには、重要な役割があります。
以下に例を示します。
application.properties
keystore.type = jks
quarkus.cxf.client.hello.client-endpoint-url = https://localhost:${quarkus.http.test-ssl-port}/services/hello
quarkus.cxf.client.hello.service-interface = io.quarkiverse.cxf.it.security.policy.HelloService
quarkus.cxf.client.hello.trust-store-type = ${keystore.type}
quarkus.cxf.client.hello.trust-store = client-truststore.${keystore.type}
quarkus.cxf.client.hello.trust-store-password = client-truststore-password
6.9.2. サーバー SSL 設定 リンクのコピーリンクがクリップボードにコピーされました!
HTTPS プロトコル経由でサービスを利用できるようにするには、まずサーバーキーストアを設定する必要があります。サーバーの SSL 設定は、Quarkus の HTTP レイヤーである Vert.x によって実行されます。Quarkus HTTP ガイド では、設定オプションに関する情報が提供されています。
以下に基本的な例を示します。
application.properties
quarkus.http.ssl.certificate.key-store-file = localhost-keystore.${keystore.type}
quarkus.http.ssl.certificate.key-store-password = localhost-keystore-password
quarkus.http.ssl.certificate.key-store-key-alias = localhost
quarkus.http.ssl.certificate.key-store-key-password = localhost-keystore-password
- 1
- 参照される
localhost.jksファイルは、src/main/resourcesディレクトリーで使用可能である必要があります。
6.9.3. 相互 TLS (mTLS) 認証 リンクのコピーリンクがクリップボードにコピーされました!
これまでは、サーバーのみが SSL 証明書を通じてアイデンティティーを証明し、クライアントがその証明書を信頼するように設定する必要がある単純なケース、つまり片側だけのケースを説明しました。相互 TLS 認証では、クライアントにも同じ公開鍵暗号化手段を使用してアイデンティティーを証明させます。
したがって、相互 TLS (mTLS) 認証の場合、上記のようにサーバーキーストアとクライアントトラストストアを設定することに加えて、クライアント側でキーストアを設定し、サーバー側でトラストストアを設定する必要があります。
ストアを作成および維持するためのツールは同じであり、使用する設定プロパティーは Simple TLS の場合に使用されるものとほぼ類似しています。
Quarkus CXF ソースツリーの mTLS 統合テスト は、スタートポイントとして適切です。
キーストアとトラストストアは {link-quarkus-cxf-source-tree-base}/integration-tests/mtls/generate-certs.sh[openssl] (または Java {link-quarkus-cxf-source-tree-base}/integration-tests/mtls/pom.xml#L109-L377[Java keytool ]) を使用して作成されます。
application.properties ファイルは次のとおりです。
application.properties
# The store type could also be jks
keystore.type = pkcs12
# Server keystore for Simple TLS
quarkus.http.ssl.certificate.key-store-file = localhost-keystore.${keystore.type}
quarkus.http.ssl.certificate.key-store-password = localhost-keystore-password
quarkus.http.ssl.certificate.key-store-key-alias = localhost
quarkus.http.ssl.certificate.key-store-key-password = localhost-keystore-password
# Server truststore for Mutual TLS
quarkus.http.ssl.certificate.trust-store-file = localhost-truststore.${keystore.type}
quarkus.http.ssl.certificate.trust-store-password = localhost-truststore-password
# Do not allow any clients which do not prove their indentity through an SSL certificate
quarkus.http.ssl.client-auth = required
# CXF service
quarkus.cxf.endpoint."/mTls".implementor = io.quarkiverse.cxf.it.auth.mtls.MTlsHelloServiceImpl
# CXF client with a properly set certificate for mTLS
quarkus.cxf.client.mTls.client-endpoint-url = https://localhost:${quarkus.http.test-ssl-port}/services/mTls
quarkus.cxf.client.mTls.service-interface = io.quarkiverse.cxf.it.security.policy.HelloService
quarkus.cxf.client.mTls.key-store = target/classes/client-keystore.${keystore.type}
quarkus.cxf.client.mTls.key-store-type = ${keystore.type}
quarkus.cxf.client.mTls.key-store-password = client-keystore-password
quarkus.cxf.client.mTls.key-password = client-keystore-password
quarkus.cxf.client.mTls.trust-store = target/classes/client-truststore.${keystore.type}
quarkus.cxf.client.mTls.trust-store-type = ${keystore.type}
quarkus.cxf.client.mTls.trust-store-password = client-truststore-password
# Include the keystores in the native executable
quarkus.native.resources.includes = *.pkcs12,*.jks
6.9.4. WS-SecurityPolicy を通じて SSL を強制する リンクのコピーリンクがクリップボードにコピーされました!
クライアントが HTTPS 経由で接続するための要件は、ポリシーで定義できます。
この機能は、quarkus-cxf-rt-ws-security エクステンションにより提供されます。
以下は、ポリシーファイルの例です。
https-policy.xml
<?xml version="1.0" encoding="UTF-8"?>
<wsp:Policy wsp:Id="HttpsSecurityServicePolicy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding>
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false" />
</wsp:Policy>
</sp:TransportToken>
<sp:IncludeTimestamp />
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic128 />
</wsp:Policy>
</sp:AlgorithmSuite>
</wsp:Policy>
</sp:TransportBinding>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
ポリシーは、サービスエンドポイントインターフェイス (SEI) から参照される必要があります。
HttpsPolicyHelloService.java
package io.quarkiverse.cxf.it.security.policy;
import jakarta.jws.WebMethod;
import jakarta.jws.WebService;
import org.apache.cxf.annotations.Policy;
/**
* A service implementation with a transport policy set
*/
@WebService(serviceName = "HttpsPolicyHelloService")
@Policy(placement = Policy.Placement.BINDING, uri = "https-policy.xml")
public interface HttpsPolicyHelloService extends AbstractHelloService {
@WebMethod
@Override
public String hello(String text);
}
このセットアップを行うと、HTTP 経由で配信されるすべてのリクエストは PolicyVerificationInInterceptor によって拒否されます。
ERROR [org.apa.cxf.ws.pol.PolicyVerificationInInterceptor] Inbound policy verification failed: These policy alternatives can not be satisfied:
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}TransportBinding: TLS is not enabled
...
6.10. 認証および認可 リンクのコピーリンクがクリップボードにコピーされました!
このセクションに示されているサンプルコードは、Quarkus CXF のソースツリーにある Client and server integration test からの抜粋です。これは、実行可能な例として使用できます。
6.10.1. クライアント HTTP Basic 認証 リンクのコピーリンクがクリップボードにコピーされました!
quarkus-cxf エクステンションによって提供される次のクライアント設定オプションを使用して、HTTP Basic 認証のユーザー名とパスワードを渡します。
以下に例を示します。
application.properties
quarkus.cxf.client.basicAuth.wsdl = http://localhost:${quarkus.http.test-port}/soap/basicAuth?wsdl
quarkus.cxf.client.basicAuth.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/basicAuth
quarkus.cxf.client.basicAuth.username = bob
quarkus.cxf.client.basicAuth.password = bob234
6.10.1.1. Basic 認証で保護された WSDL へのアクセス リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、quarkus.cxf.client."client-name".secure-wsdl-access を true に設定しない限り、Quarkus CXF によって作成されたクライアントは Authorization ヘッダーを送信しません。
application.properties
quarkus.cxf.client.basicAuthSecureWsdl.wsdl = http://localhost:${quarkus.http.test-port}/soap/basicAuth?wsdl
quarkus.cxf.client.basicAuthSecureWsdl.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/basicAuthSecureWsdl
quarkus.cxf.client.basicAuthSecureWsdl.username = bob
quarkus.cxf.client.basicAuthSecureWsdl.password = ${client-server.bob.password}
quarkus.cxf.client.basicAuthSecureWsdl.secure-wsdl-access = true
6.10.2. 相互 TLS (mTLS) 認証 リンクのコピーリンクがクリップボードにコピーされました!
SSL、TLS、HTTPS ガイドの 相互 TLS (mTLS) 認証 セクションを参照してください。
6.10.3. サービスエンドポイントの保護 リンクのコピーリンクがクリップボードにコピーされました!
以下を含め、サーバー側の認証と認可は Quarkus Security が実行します。
具体的な例は、Client and server integration test を参照してください。主に以下が含まれます。
-
アイデンティティープロバイダーとしての
io.quarkus:quarkus-elytron-security-properties-file依存関係 Basic 認証の有効化と、
application.propertiesでロールが設定されているユーザー。application.properties
quarkus.http.auth.basic = true quarkus.security.users.embedded.enabled = true quarkus.security.users.embedded.plain-text = true quarkus.security.users.embedded.users.alice = alice123 quarkus.security.users.embedded.roles.alice = admin quarkus.security.users.embedded.users.bob = bob234 quarkus.security.users.embedded.roles.bob = app-user-
@RolesAllowedアノテーションによって強制されるロールベースのアクセス制御。
BasicAuthHelloServiceImpl.java
package io.quarkiverse.cxf.it.auth.basic;
import jakarta.annotation.security.RolesAllowed;
import jakarta.jws.WebService;
import io.quarkiverse.cxf.it.HelloService;
@WebService(serviceName = "HelloService", targetNamespace = HelloService.NS)
@RolesAllowed("app-user")
public class BasicAuthHelloServiceImpl implements HelloService {
@Override
public String hello(String person) {
return "Hello " + person + "!";
}
}
6.11. SOAP クライアントの高度なトピック リンクのコピーリンクがクリップボードにコピーされました!
6.11.1. client-endpoint-url のデフォルト リンクのコピーリンクがクリップボードにコピーされました!
application.properties で client-endpoint-url プロパティーを省略すると、CXF Quarkus エクステンションは、サービスが http://localhost:8080/{service-path} で公開されていると想定します。この場合の {service-path} は、以下から導出されます。
-
設定プロパティー
quarkus.cxf.path(指定されている場合)、および - 小文字で表記された SEI のクラス名
quarkus.cxf.path =/ws の場合、CalculatorService のデフォルトの有効な client-endpoint-url は http://localhost:8080/ws/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice になります。
quarkus.cxf.path が指定されていない場合、client-endpoint-url は http://localhost:8080/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice になります。
6.11.2. 複数のクライアントを設定する リンクのコピーリンクがクリップボードにコピーされました!
上記の例では、myCalculator という単一クライアントのみを設定しました。もちろん、異なる URL を指す複数のクライアントを設定することも、複数の識別子を使用して異なる SEI を実装することも可能です。
application.properties
cxf.it.calculator.baseUri = http://localhost:8082
quarkus.cxf.client.myCalculator.wsdl = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService?wsdl
quarkus.cxf.client.myCalculator.client-endpoint-url = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService
quarkus.cxf.client.myCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
# another client
quarkus.cxf.client.anotherCalculator.wsdl = https://acme.com/ws/WeatherService?wsdl
quarkus.cxf.client.anotherCalculator.client-endpoint-url = https://acme.com/ws/WeatherService
quarkus.cxf.client.anotherCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
6.11.3. 高度なクライアント設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション内のすべてのクライアントをグローバルに設定するには、以下のサンプルスニペットを使用して HttpConduit を設定します。これにより、クライアントに対して HTTPClientPolicy、AuthorizationPolicy、ProxyAuthorizationPolicy、さらには TLSClientParameters を設定できます。
void onStart(@Observes StartupEvent ev) {
HTTPConduitConfigurer httpConduitConfigurer = new HTTPConduitConfigurer() {
public void configure(String name, String address, HTTPConduit c) {
AsyncHTTPConduit conduit = (AsyncHTTPConduit)c;
// use setter to configure client
conduit.getHttpAsyncClient().getCredentialsProvider().setCredentials( AuthScope.ANY,
new NTCredentials( USER,PWD, "", DOM ) );
conduit.getClient().setAllowChunking( false );
conduit.getClient().setAutoRedirect( true );
}
};
final Bus bus = BusFactory.getDefaultBus();
bus.setExtension(httpConduitConfigurer, HTTPConduitConfigurer.class);
}
6.11.4. ピュアクライアントアプリケーション リンクのコピーリンクがクリップボードにコピーされました!
Quarkus バッチ (定期的にスケジュールされるものなど) またはコマンドラインアプリケーションでは、HTTP サーバーがなくても実行できます。起動時に HTTP サーバーが起動しないようにするには、以下のプロパティーを使用します。
quarkus.http.host-enabled = false
6.11.5. リソース漏洩の防止 リンクのコピーリンクがクリップボードにコピーされました!
CXF クライアントプロキシーは、java.io.Closeable を実装します。そのため、クライアントが不要になった場合は、((Closeable) proxy).close() を呼び出してスレッドなどの関連するすべてのシステムリソースを解放することが重要です。
Quarkus CXF は、@io.quarkiverse.cxf.annotation.CXFClient 経由で注入されたクライアントが CDI コンテナーによって破棄されると、すぐにそれを閉じるように自動的に処理します。
手動で作成されたクライアントプロキシーの場合、((Closeable) proxy).close() を呼び出すかどうかはユーザーが決定します。
import java.net.URL;
import javax.xml.namespace.QName;
import jakarta.xml.ws.Service;
import java.io.Closeable;
final URL serviceUrl = new URL("http://localhost/myService?wsdl");
final QName qName = new QName("http://acme.org/myNamespace", "MyService");
final Service service = jakarta.xml.ws.Service.create(serviceUrl, qName);
final MyService proxy = service.getPort(MyService.class);
try {
proxy.doSomething();
} finally {
((Closeable) proxy).close();
}
6.12. リバースプロキシーの背後での実行 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus 上で実行されているサービスに向けた SOAP リクエストは、プロキシーサーバーのクライアント側からの情報が変更または失われないように、追加のヘッダー (例: X-Forwarded-Host) を生成するプロキシーを介してルーティングできます。このようなシナリオでは、Quarkus は、これらのヘッダーの値を反映して、プロトコル、ホスト、ポート、URI などの情報を自動的に更新するように設定できます。
詳細は、Quarkus HTTP reference を参照してください。
さまざまな X-Forwarded ヘッダーに対する Quarkus CXF サポートは、Quarkus 設定に沿って動作します。
この機能を有効にすると、サーバーがいくつかのセキュリティー問題 (情報の偽装など) にさらされます。リバースプロキシーの背後で実行している場合にのみアクティブ化することを検討してください。
以下は、関連する Quarkus プロパティーと、それらが Quarkus CXF に与える影響を示しています。
quarkus.http.proxy.proxy-address-forwarding- リクエストの宛先部分の書き換えを有効にするメインスイッチ。- 有効にすると、CXF サーバースタック全体でリクエストフィールドの書き換えが有効になります。
-
有効にすると、
X-Forwarded-ProtoヘッダーとX-Forwarded-Portヘッダーを介して渡された値が、それぞれjakarta.servlet.http.HttpServletRequest.getRequestURL()によって返される URL のプロトコル部分とポート部分の設定に使用されます。 -
有効にすると、
X-Forwarded-For経由で渡された値がjakarta.servlet.ServletRequest.getRemoteAddr()によって返されます。
-
quarkus.http.proxy.enable-forwarded-host-jakarta.servlet.http.HttpServletRequest.getRequestURL()によって返される URL のホスト部分の書き換えを有効にします。実際のホスト名は、quarkus.http.proxy.forwarded-host-headerで設定されたヘッダーから取得されます (デフォルトはX-Forwarded-Hostです)。 -
quarkus.http.proxy.enable-forwarded-prefix-jakarta.servlet.http.HttpServletRequest.getRequestURL()によって返される URL のパス部分と、jakarta.servlet.http.HttpServletRequest.getRequestURI()によって返される URI のパス部分の書き換えを有効にします。実際のパス接頭辞は、quarkus.http.proxy.forwarded-prefix-headerで設定されたヘッダーから取得されます (デフォルトはX-Forwarded-Prefixです)。
以下は、application.properties にコピーする最も一般的なスニペットです。
quarkus.http.proxy.proxy-address-forwarding = true
quarkus.http.proxy.enable-forwarded-host = true
quarkus.http.proxy.enable-forwarded-prefix = true
これらの設定の目に見える効果の 1 つとして、http://localhost:8080/services/my-service?wsdl で提供される WSDL の場所の値が変更されます。たとえば、リクエストに次のヘッダーが含まれているとします。
X-Forwarded-Proto: https
X-Forwarded-Host: api.example.com
X-Forwarded-Port: 443
X-Forwarded-Prefix: /my-prefix
その場合、http://localhost:8080/services/my-service?wsdl で提供される WSDL には、次の location が含まれます。
...
<soap:address location="https://api.example.com:443/my-prefix/services/my-service"/>
...
6.13. コントラクトファーストとコードファーストのアプローチ リンクのコピーリンクがクリップボードにコピーされました!
Quarkus CXF では、コントラクトファーストとコードファーストの両方の開発モードが完全にサポートされています。
6.13.1. コントラクトファーストクライアント リンクのコピーリンクがクリップボードにコピーされました!
SOAP サービスは WSDL によって記述されます。これは、操作、そのパラメーター、戻り値などを定義するコントラクトです。WSDL は、完全なクライアントのコードを生成するために使用できます。CXF は、そのための wsdl2java ユーティリティーを提供します。
Quarkus CXF は、quarkus-cxf エクステンションで wsdl2java をラップするため、これを直接使用する必要はありません。
使用方法の詳細は、ユーザーガイドの WSDL からモデルクラスを生成する セクションを参照してください。
全般の概要として、CXF の Developing a Consumer も参照してください。
6.13.2. コントラクトファーストサービス リンクのコピーリンクがクリップボードにコピーされました!
サービスの実装時には、WSDL からの Java コードの生成 が役立つ場合があります。wsdl2java は、モデルクラス (JAXB アノテーション付き) とサービスインターフェイス (JAX-WS アノテーション付き) を生成します。その後、ユーザーがそれらのインターフェイスの実装を提供します。
基礎となる概念をより深く理解するには、CXF ドキュメントの WSDL First Service Development セクションを参照してください。
6.13.3. コードファーストサービス リンクのコピーリンクがクリップボードにコピーされました!
利用できるもう 1 つの有効なオプションは、JAX-WS と JAXB を使用して Java でサービスを記述することです。その後の WSDL コントラクトの取得に関しては、2 つのオプションがあります。
- サービスを開始し、クライアントは http://your-host/your-service?wsdl を指すようにします。
- ビルド時に、Java クラスから WSDL ドキュメントを生成 します。
詳細は、CXF ドキュメントの Code first development セクションを参照してください。
6.14. WSDL からモデルクラスを生成する リンクのコピーリンクがクリップボードにコピーされました!
quarkus-cxf エクステンションは、Quarkus コード生成フェーズにおける、WSDL から Java クラスの生成をサポートします。
このセクションに示されているコードは、Quarkus CXF のソースツリー内の client integration test からの抜粋です。実行可能な例として確認してみてください。
CXF コード生成が機能するには、いくつかのセットアップが必要です。
-
プロジェクトに
io.quarkiverse.cxf:quarkus-cxf依存関係があること。 Maven プロジェクトの場合、
quarkus-maven-pluginの設定にgenerate-codeゴールが存在すること。pom.xml
<plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> </goals> </execution> </executions> </plugin>-
Gradle プロジェクトの場合、
io.quarkusプラグインの追加設定は必要ありません。 -
WSDL ファイルを
src/main/resourcesまたはsrc/test/resources、もしくはそのサブディレクトリーの下に配置します。 -
WSDL ファイル名は
.wsdlで終わる必要があります quarkus.cxf.codegen.wsdl2java.includes設定プロパティー を、処理する WSDL ファイルに一致するパターンに設定します。src/main/resources/wsdlまたはsrc/test/resources/wsdl配下の WSDL ファイルをすべて処理する場合は、次のように設定します。application.properties
quarkus.cxf.codegen.wsdl2java.includes = wsdl/*.wsdl
これにより、target/generated-sources/wsdl2java または target/generated-test-sources/wsdl2java ディレクトリーに Java クラスが生成されます。これらは、コンパイラープラグインによって自動的に選択されます。したがって、アプリケーションやテストコードから自由に参照できます。
quarkus-cxf コード生成では、内部で CXF の wsdl2Java ユーティリティーが使用されることに注意してください。wsdl2Java は、includes と excludes で選択された各 WSDL ファイルに対して個別に呼び出されます。
カスタムパラメーターは、quarkus.cxf.codegen.wsdl2java.additional-params 設定パラメーターを通じて wsdl2java に渡すことができます。
各 WSDL ファイルに異なる additional-params が必要な場合は、それぞれに個別の名前付きパラメーターセットを定義する必要があります。以下に例を示します。
application.properties
# Parameters for foo.wsdl
quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl
quarkus.cxf.codegen.wsdl2java.foo-params.wsdl-location = wsdl/foo.wsdl
# Parameters for bar.wsdl
quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl
quarkus.cxf.codegen.wsdl2java.bar-params.wsdl-location = wsdl/bar.wsdl
quarkus.cxf.codegen.wsdl2java.bar-params.xjc = ts
-xjc-Xbg、-xjc-Xdv、-xjc-Xjavadoc、-xjc-Xproperty-listener、-xjc-Xts、-xjc-Xwsdlextension wsdl2java パラメーターの使用を可能にするには、プロジェクトに io.quarkiverse.cxf:quarkus-cxf-xjc-plugins 依存関係を追加します。
6.15. Java から WSDL ドキュメントを生成する リンクのコピーリンクがクリップボードにコピーされました!
たとえば、Maven アーティファクトとして配布したいなどの理由から、サービスにより http://your-host/your-service?wsdl で提供される WSDL が不十分な場合は、java2ws を使用してビルド時に WSDL ドキュメントを生成できます。
CXF が提供する java2ws ツールを直接呼び出す必要はなく、cxf-java2ws-plugin を使用する必要もありません。
quarkus-cxf は java2ws をラップするため、アプリケーションの他の側面と同様に application.properties で設定できます。
以下に例を示します。
このセクションで使用されているサンプルコードは、Quarkus CXF のソースツリーにある server integration test からの抜粋です。
application.properties
quarkus.cxf.java2ws.includes = io.quarkiverse.cxf.it.server.HelloService,io.quarkiverse.cxf.it.server.FaultyHelloService
quarkus.cxf.java2ws.wsdl-name-template = %TARGET_DIR%/Java2wsTest/%SIMPLE_CLASS_NAME%-from-java2ws.wsdl
ここでは、java2ws に HelloService と FaultyHelloService という 2 つのインターフェイスの WSDL を生成するように指示しています。
java2ws 処理用にサービスインターフェイスを選択するためには、そのサービスインターフェイスにアノテーション jakarta.xml.ws.WebService を付ける必要があります。
生成された 2 つの WSDL ドキュメントは、それぞれ target/Java2wsTest/FaultyHelloService-from-java2ws.wsdl と target/Java2wsTest/HelloService-from-java2ws.wsdl として保存されます。
Quarkus ソース生成フェーズで実行される wsdl2java とは異なり、java2ws はコンパイル後に実行される Quarkus 拡張の一部です。java2ws の入力は、結局は Java クラスファイルです。したがって、java2ws の quarkus-maven-plugin に <goal>generate-code</goal> を追加する必要はありません。
6.15.1. 関連項目 リンクのコピーリンクがクリップボードにコピーされました!
-
quarkus-cxfのquarkus.cxf.java2ws.*設定プロパティー
6.16. CXF インターセプターと機能 リンクのコピーリンクがクリップボードにコピーされました!
CXF インターセプター と CXF 機能 は、アノテーションまたは application.properties 設定を使用して、クライアントとサーバーの両方に追加できます。
CXF はすぐに使用できる組み込みインターセプターと機能を多数提供しますが、カスタム開発された実装を統合することもできます。
アノテーションは、サービスインターフェイスまたは実装クラスのいずれかで使用できます。
@org.apache.cxf.feature.Features (features = {"org.apache.cxf.ext.logging.LoggingFeature"})
@org.apache.cxf.interceptor.InInterceptors (interceptors = {"org.acme.Test1Interceptor" })
@org.apache.cxf.interceptor.InFaultInterceptors (interceptors = {"org.acme.Test2Interceptor" })
@org.apache.cxf.interceptor.OutInterceptors (interceptors = {"org.acme.Test1Interceptor" })
@org.apache.cxf.interceptor.InFaultInterceptors (interceptors = {"org.acme.Test2Interceptor","org.acme.Test3Intercetpor" })
@WebService(endpointInterface = "org.acme.SayHi", targetNamespace = "uri:org.acme")
public class SayHiImplementation implements SayHi {
public long sayHi(long arg) {
return arg;
}
//...
}
application.properties ファイルで設定を定義することもできます。
quarkus.cxf.endpoint."/greeting-service".features=org.apache.cxf.ext.logging.LoggingFeature
quarkus.cxf.endpoint."/greeting-service".in-interceptors=org.acme.Test1Interceptor
quarkus.cxf.endpoint."/greeting-service".out-interceptors=org.acme.Test1Interceptor
quarkus.cxf.endpoint."/greeting-service".in-fault-interceptors=org.acme.Test2Interceptor,org.acme.Test3Intercetpor
quarkus.cxf.endpoint."/greeting-service".out-fault-interceptors=org.acme.Test1Intercetpor
機能クラスとインターセプタークラスは、いずれも最初に CDI 経由でロードされます。完全修飾クラス名または Bean 名 で参照できます。
利用できる CDI Bean がない場合、各クラスをインスタンス化するために、パラメーターを持たないコンストラクターが呼び出されます。
6.17. JAX-WS ハンドラー リンクのコピーリンクがクリップボードにコピーされました!
@HandlerChain アノテーションの代わりに、application.properties を介して JAX-WS ハンドラー をクライアントまたはサーバーの両方に追加できます。
application.properties
# A web service endpoint with multiple Handler classes
quarkus.cxf.endpoint."/greeting-service".handlers=org.acme.MySOAPHandler,org.acme.AnotherSOAPHandler
# A web service client with a single Handler
quarkus.cxf.client."greeting-client".handlers=org.acme.MySOAPHandler
MySOAPHandler は、以下のようになります。
import jakarta.xml.ws.handler.soap.SOAPHandler;
import jakarta.xml.ws.handler.soap.SOAPMessageContext;
public class MySOAPHandler implements SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext messageContext) {
SOAPMessage msg = messageContext.getMessage();
return true;
}
// other methods
}
SOAPHandler クラスは、最初に CDI 経由でロードされます。
利用できる CDI Bean がない場合、各クラスをインスタンス化するために、パラメーターを持たないコンストラクターが呼び出されます。
6.18. JAX-WS プロバイダー リンクのコピーリンクがクリップボードにコピーされました!
JAX-WS プロバイダー は完全にサポートされており、以下のように実装できます。
次のサンプル Provider 実装があるとします。
import jakarta.xml.transform.stream.StreamSource;
import jakarta.xml.ws.BindingType;
import jakarta.xml.ws.Provider;
import jakarta.xml.ws.Service;
import jakarta.xml.ws.ServiceMode;
import jakarta.xml.ws.WebServiceProvider;
import java.io.StringReader;
@WebServiceProvider
@ServiceMode(value = Service.Mode.PAYLOAD)
public class StreamSourcePayloadProvider implements Provider<StreamSource> {
public StreamSourcePayloadProvider() {
}
public StreamSource invoke(StreamSource request) {
String payload = StaxUtils.toString(request);
// Do some interesting things ...
StreamSource response = new StreamSource(new StringReader(payload));
return response;
}
}
application.properties は、以下のように設定できます。
# A web service endpoint with the Provider implementation class
quarkus.cxf.endpoint."/stream-source".implementor=org.acme.StreamSourcePayloadProvider
Provider クラスは、最初に CDI 経由でロードされます。
利用できる CDI Bean がない場合、各クラスをインスタンス化するために、パラメーターを持たないコンストラクターが呼び出されます。
6.19. 例 リンクのコピーリンクがクリップボードにコピーされました!
コードベースの integration-tests フォルダー には、このエクステンションを広範囲に使用する方法を示すさまざまな例が用意されています。
6.20. 一般的な問題とトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
quarkus-cxf プロジェクトの開発、テスト、ネイティブイメージの構築プロセス中にいくつかの問題が発生する可能性があります。以下に、一般的な問題とその対処方法を示します。
6.20.1. REST および SOAP エンドポイント リンクのコピーリンクがクリップボードにコピーされました!
場合によっては、Quarkus CXF エクステンションが使用されている同じプロジェクトで REST エンドポイントが必要になることがあります。REST エンドポイントパスは、SOAP エンドポイントパスとは異なる必要があります (両プロトコル間でのリクエスト転送の際の競合を回避するため)。
たとえば、WSDL で WeatherWebService インターフェイスが宣言されている場合は、次のように org.acme.cxf.WeatherWebServiceImpl クラスの作成から始めることができます。
package org.acme.cxf;
import ...
@Slf4j
@WebService(endpointInterface = "org.acme.cxf.WeatherWebService")
public class WeatherWebServiceImpl implements WeatherWebService {
@Inject
BackEndWeatherService backEndWeatherService;
private Map<String, DailyTemperature> dailyTempByZipCode = Collections.synchronizedMap(new LinkedHashMap<>());
public WeatherWebServiceImpl() {
this.dailyTempByZipCode.addAll(
this.backEndWeatherService.getDailyForecast(Instant.now()));
}
@Override
public DailyTemperature estimationTemperatures(String zipCode) {
log.info("Daily estimation temperatures forecast called with '{}' zip code paramter", zipCode);
return this.dailyTempByZipCode.get(zipCode);
}
}
その後、設定ドキュメント に示されているように、CXF Web サービスのルートコンテキストを指定し、ルートコンテキストパスに基づき REST (RESTEasy など) と SOAP ルートを分割する必要があります。
CXF の SOAP プロパティー:
quarkus.cxf.path=/soap
quarkus.cxf.endpoint."/weather".implementor=org.acme.cxf.WeatherWebServiceImpl
ここで、次の RESTEasy エンドポイントがあるとします。
package org.acme.reasteasy;
import ...
@Slf4j
@Path("/healthcheck")
public class HealthCheckResource {
@Inject
BackEndWeatherService backEndWeatherService;
@GET
public Response doHealthCheck() {
if(this.backEndWeatherService.isAvailable()) {
return Response.ok().build();
} else {
return Response.status(Response.Status.SERVICE_UNAVAILABLE);
}
}
}
REASTEasy パスを設定することで、REST エンドポイントを分割できます。
quarkus.resteasy.path=/rest
これで、次の単一のプロジェクト内にデプロイされた REST エンドポイントと SOAP エンドポイントの両方にリクエストを送信できるようになります。
- REST の場合は http://localhost:8080/rest/healthcheck
- SOAP の場合: http://localhost:8080/soap/weather
6.20.2. 非 ASCII 文字 リンクのコピーリンクがクリップボードにコピーされました!
場合によっては、wsdl2java によって自動生成された Java クラスは、コードに非 ASCII 文字が含まれているため、GraalVM との完全な互換性がないことがあります。ネイティブイメージのビルド中に、以下のような例外が発生する可能性があります。
[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26] compile: 161 459,15 ms, 8,54 GB
[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26] image: 158 272,73 ms, 8,43 GB
[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26] write: 205,82 ms, 8,43 GB
Fatal error:com.oracle.svm.core.util.VMError$HostedError: java.lang.RuntimeException: oops : expected ASCII string! com.oracle.svm.reflect.OperationOrderStatusType_CRÉÉ_f151156b0d42ecdbdfb919501d8a86dda8733012_1456.hashCode
at com.oracle.svm.core.util.VMError.shouldNotReachHere(VMError.java:72)
以下は、Java クラス内の自動生成された非 ASCII 文字の例です。
@XmlType(name = "OperationOrderStatusType")
@XmlEnum
public enum OperationOrderStatusType {
@XmlEnumValue("Cr\u00e9\u00e9")
CRÉÉ("Cr\u00e9\u00e9"),
@XmlEnumValue("A communiquer")
A_COMMUNIQUER("A communiquer"),
@XmlEnumValue("En attente de r\u00e9ponse")
EN_ATTENTE_DE_RÉPONSE("En attente de r\u00e9ponse"),
@XmlEnumValue("Attribu\u00e9")
ATTRIBUÉ("Attribu\u00e9"),
@XmlEnumValue("Clotur\u00e9")
CLOTURÉ("Clotur\u00e9"),
@XmlEnumValue("Annul\u00e9")
ANNULÉ("Annul\u00e9");
private final String value;
OperationOrderStatusType(String v) {
value = v;
}
public String value() {
return value;
}
public static OperationOrderStatusType fromValue(String v) {
for (OperationOrderStatusType c: OperationOrderStatusType.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
\u で始まるものはすべて問題になります。したがって、次のリファクタリングが必要です。
@XmlType(name = "OperationOrderStatusType")
@XmlEnum
public enum OperationOrderStatusType {
@XmlEnumValue("Créé")
CREE("Créé"),
@XmlEnumValue("A communiquer")
A_COMMUNIQUER("A communiquer"),
@XmlEnumValue("En attente de réponse")
EN_ATTENTE_DE_REPONSE("En attente de réponse"),
@XmlEnumValue("Attribué")
ATTRIBUE("Attribué"),
@XmlEnumValue("Cloturé")
CLOTURE("Cloturé"),
@XmlEnumValue("Annulé")
ANNULE("Annulé");
private final String value;
OperationOrderStatusType(String v) {
value = v;
}
public String value() {
return value;
}
public static OperationOrderStatusType fromValue(String v) {
for (OperationOrderStatusType c: OperationOrderStatusType.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
6.21. Camel 統合 リンクのコピーリンクがクリップボードにコピーされました!
https//camel.apache.org/camel-quarkus/latest/index.html[Camel Quarkus] は、バージョン 2.12.0 以降で CXF をサポートしています。内部的に、この実装は Quarkus CXF をベースにしています。したがって、Quarkus CXF で利用できるすべての機能は Camel Quarkus でも利用できます。
詳細は、https//camel.apache.org/camel-quarkus/latest/reference/extensions/cxf-soap.html[Camel Quarkus CXF SOAP] エクステンションのドキュメントを参照してください。
第7章 Camel Quarkus トランザクションガイド リンクのコピーリンクがクリップボードにコピーされました!
7.1. トランザクションガイド リンクのコピーリンクがクリップボードにコピーされました!
このガイドでは、Red Hat build of Apache Camel for Quarkus を使用してトランザクションアプリケーションを実装するための情報および手順を説明します。
7.2. JTA の依存関係 リンクのコピーリンクがクリップボードにコピーされました!
camel-quarkus-jta を使用するには、pom.xmlに次の依存関係を含める必要があります。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jta</artifactId>
</dependency>
これは、quarkus-narayana-jta を活用して Camel で JTA をサポートします。
7.2.1. 重要な設定 リンクのコピーリンクがクリップボードにコピーされました!
以下に、注意を必要とする重要な quarkus.transaction-manager 設定を示しています。
| 設定 | デフォルト値 | 説明 | Comment |
|---|---|---|---|
|
|
| ノードを識別します。これは、トランザクションマネージャーとコンテナーの再起動時に、一意 で 安定 していなければなりません。 | 詳細は、Quarkus ドキュメント の Configuring transaction node name identifier を参照してください。 |
|
|
|
トランザクションログの保存先を設定します。これは、ディレクトリー ( | 永続ボリュームにアクセスできないクラウド環境の場合は、jdbc オブジェクトストアの使用を検討してください。 詳細は、Quarkus ドキュメント の Configure storing of Quarkus transaction logs in a database セクションを参照してください。 |
|
|
| JVM がクラッシュまたはシャットダウンした場合における、保留中のトランザクションのリカバリーを有効にします。 |
アプリケーションで XA トランザクションを使用している場合は、これを |
7.3. トランザクションリソースの設定 リンクのコピーリンクがクリップボードにコピーされました!
7.3.1. JDBC データソースの設定 リンクのコピーリンクがクリップボードにコピーされました!
データソースを設定するには、以下を実行します。
- Quarkus datasource guide の Configure datasources in Quarkus セクションに従って、関連する jdbc エクステンションを含めます。
エクステンションは、プーリングおよび XA トランザクションをサポートするために Quarkus agroal エクステンションと統合されます。
任意
XA トランザクションでデータソースを使用する場合は、それを有効にする必要があります。
quarkus.datasource.jdbc.transactions = xaquarkus.datasource.<datasource-name>.jdbc.transactions = xa詳細は、Quarkus datasource guide の Narayana transaction manager integration セクションを参照してください。
1 つのトランザクションで非 XA データソースと XA データソースを併用しないでください。
トランザクションにとって安全ではありません。
7.3.2. JMS の設定 リンクのコピーリンクがクリップボードにコピーされました!
分散トランザクションで JMS を使用するには、次の操作を行う必要があります。
プールとトランザクションをサポートするには、
pom.xmlに次の依存関係を含めてquarkus-pooled-jmsを使用します。<dependency> <groupId>io.quarkiverse.messaginghub</groupId> <artifactId>quarkus-pooled-jms</artifactId> </dependency>.transactionをxaに設定することで、XA サポートを有効にします。quarkus.pooled-jms.transaction = xa
詳細は、JMS エクステンション ドキュメントの 接続プーリングと X/Open XA 分散トランザクションのサポート を参照してください。
7.4. 例 リンクのコピーリンクがクリップボードにコピーされました!
- JPA と JMS
Narayana をスタンドアロンの JTA Transaction Manager 実装として使用し、Hibernate を JPA アダプターとして使用します。
- メッセージブリッジ
基本的な REST エンドポイントは、ユーザーが IBM MQ キューにメッセージをディスパッチするために提供されます。IBM MQ からのメッセージは、XA トランザクション内の ActiveMQ キューにリレーされます。この例では、ロールバックおよびリカバリーにおけるトランザクション機能を示しています。
7.5. トランザクションポリシー リンクのコピーリンクがクリップボードにコピーされました!
以下の 6 つのトランザクションポリシーがあります。
| ポリシー | 説明 | Comment |
|---|---|---|
|
| 現在のトランザクションをサポートします。現在のトランザクションが存在しない場合は例外が発生します。 | |
|
| 現在のトランザクションをサポートしません。現在のトランザクションが存在する場合は例外が発生します。 | |
|
| 現在のトランザクションはサポートせず、常に非トランザクションを実行します。 | |
|
| 現在のトランザクションをサポートします。存在しない場合は新しいトランザクションを作成します。 | デフォルト |
|
| 新しいトランザクションを作成し、現在のトランザクションが存在する場合はそれを一時停止します。 | |
|
| 現在のトランザクションをサポートします。存在しない場合は、非トランザクションを実行します。 |
詳細は、Quarkus Transactional client ドキュメントの Using different transaction propagations を参照してください。
7.6. 既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
7.6.1. 非 XA データソースの互換性 リンクのコピーリンクがクリップボードにコピーされました!
3.8.4 以降、非 XA データソースを使用する場合の互換性喪失が発生しています。詳細は、プルリクエスト 40365 を参照してください。