Red Hat build of Apache Camel for Quarkus リファレンス


Red Hat build of Apache Camel 4.4

Red Hat が提供する Red Hat build of Apache Camel for Quarkus

Red Hat build of Apache Camel Documentation Team Red Hat build of Apache Camel Support Team http://access.redhat.com/support

概要

Red Hat build of Apache Camel for Quarkus は、多くの Camel コンポーネント用の Quarkus エクステンションを提供します。このリファレンスでは、Red Hat がサポートする各エクステンションの設定を説明します。

はじめに

Red Hat build of Apache Camel ドキュメントに関するフィードバック

エラーを報告したり、ドキュメントの改善を提案したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。

手順

  1. 次のリンクをクリックして チケットを作成 します。
  2. Summary に課題の簡単な説明を入力します。
  3. Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
  4. Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。

第1章 サポートレベルの定義

新しい機能、サービス、およびコンポーネントは、いくつかのサポートレベルを通過してから、実稼働環境での使用に適したフルサポート対象の機能として Red Hat build of Apache Camel for Quarkus に組み込まれます。これは、Red Hat の製品に期待されるエンタープライズグレードの安定性と、新しい Red Hat build of Apache Camel for Quarkus テクノロジーをお客様やパートナーにお試しいただき、今後の開発活動の指針となるフィードバックを得る必要性との間の適切なバランスを確保するためです。

Expand
表1.1 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 個のエクステンションがあります。

Expand
表2.1 Red Hat build of Apache Camel for Quarkus のサポート表
 エクステンションアーティファクト説明JVM サポートレベルネイティブサポートレベルIBM Power および IBM Z のサポート

1

AMQP

camel-quarkus-amqp

Apache QPid クライアントを使用した AMQP プロトコルによるメッセージング。

製品サポート

製品サポート

はい

2

Attachments

camel-quarkus-attachments

Camel メッセージでの添付のサポート

製品サポート

製品サポート

はい

3

AWS2 CloudWatch

camel-quarkus-aws2-cw

AWS SDK バージョン 2.x を使用してメトリクスを AWS CloudWatch に送信します。

製品サポート

製品サポート

はい

4

AWS2 DynamoDB

camel-quarkus-aws2-ddb

AWS SDK バージョン 2.x を使用して、AWS DynamoDB サービスからデータを保存および取得したり、AWS DynamoDB Stream からメッセージを受信したりします。

製品サポート

製品サポート

はい

5

AWS2 Kinesis

camel-quarkus-aws2-kinesis

AWS SDK バージョン 2.x を使用して、AWS Kinesis Streams からレコードを消費および作成します。

製品サポート

製品サポート

はい

6

AWS2 Lambda

camel-quarkus-aws2-lambda

AWS SDK バージョン 2.x を使用して、AWS Lambda 関数を管理および呼び出します。

製品サポート

製品サポート

はい

7

AWS2 S3 ストレージ

camel-quarkus-aws2-s3

AWS SDK バージョン 2.x を使用して、AWS S3 Storage Service からオブジェクトを保存および取得します。

製品サポート

製品サポート

はい

8

AWS2 Simple Notification System (SNS)

camel-quarkus-aws2-sns

AWS SDK バージョン 2.x を使用して AWS Simple Notification Topic にメッセージを送信します。

製品サポート

製品サポート

はい

9

AWS2 Simple Queue Service (SQS)

camel-quarkus-aws2-sqs

AWS SDK バージョン 2.x を使用して AWS SQS サービスを送信先および送信元としてメッセージを送受信します。

製品サポート

製品サポート

はい

10

Azure ServiceBus

camel-quarkus-azure-servicebus

Azure Service Bus との間でメッセージを送受信します。

テクノロジープレビュー

テクノロジープレビュー

はい

11

Azure Storage Blob

camel-quarkus-azure-storage-blob

SDK v12 を使用して Azure Storage Blob Service からブロブを保存および取得します。

テクノロジープレビュー

テクノロジープレビュー

はい

12

Azure Storage Queue

camel-quarkus-azure-storage-queue

azure-storage-queue コンポーネントは、Azure SDK v12 を使用して Azure Storage Queue への/からのメッセージを保存および取得するために使用されます。

テクノロジープレビュー

テクノロジープレビュー

はい

13

Bean

camel-quarkus-bean

Java Bean のメソッドを呼び出します。

製品サポート

製品サポート

はい

14

Bean-validator

camel-quarkus-bean-validator

Java Bean Validation API を使用してメッセージボディーを検証します。

製品サポート

製品サポート

はい

15

Browse

camel-quarkus-browse

BrowsableEndpoint をサポートするエンドポイントで受信したメッセージを調べます。

製品サポート

製品サポート

はい

16

Cassandra CQL

camel-quarkus-cassandraql

CQL3 API (Thrift API 以外) を使用して Cassandra 2.0 と統合します。DataStax が提供する Cassandra Java Driver をベースにしています。

製品サポート

製品サポート

はい

17

Cli-connector

camel-quarkus-cli-connector

Camel CLI に接続するランタイムアダプター

製品サポート

製品サポート

はい

18

Controlbus

camel-quarkus-controlbus

Camel ルートを管理および監視します。

製品サポート

製品サポート

はい

19

コア

camel-quarkus-core

Camel コア機能と基本的な Camel 言語/Constant、ExchangeProperty、Header、Ref、Simple および Tokenize

製品サポート

製品サポート

はい

20

Crypto

camel-quarkus-crypto

Java Cryptographic Extension (JCE) の署名サービスを使用してエクスチェンジに署名し、検証します。

製品サポート

製品サポート

はい

21

Cron

camel-quarkus-cron

Unix cron 構文で指定されたタイミングでイベントをトリガーする汎用インターフェイス。

製品サポート

製品サポート

はい

22

CXF SOAP

camel-quarkus-cxf-soap

Apache CXF を使用して SOAP WebServices を公開するか、CXF WS クライアントを使用して外部 WebServices に接続します。

製品サポート

製品サポート

はい

23

Dataformat

camel-quarkus-dataformat

Camel Data Format を通常の Camel コンポーネントとして使用します。

製品サポート

製品サポート

はい

24

Dataset

camel-quarkus-dataset

Camel アプリケーションの負荷テストおよびソークテスト用のデータを提供します。

テクノロジープレビュー

テクノロジープレビュー

はい

25

Direct

camel-quarkus-direct

同じ Camel コンテキストから別のエンドポイントを同期的に呼び出します。

製品サポート

製品サポート

はい

26

FHIR

camel-quarkus-fhir

FHIR (Fast Healthcare Interoperability Resources) 規格を使用して、ヘルスケアドメインの情報を交換します。JSON との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。XML との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。

製品サポート

製品サポート

いいえ

27

File

camel-quarkus-file

ファイルの読み取りと書き込みを行います。

製品サポート

製品サポート

はい

28

FTP

camel-quarkus-ftp

SFTP、FTP、または SFTP サーバーとの間でファイルをアップロードおよびダウンロードする

製品サポート

製品サポート

はい

29

Google BigQuery

camel-quarkus-google-bigquery

SQL クエリーまたは Google Client Services API を使用して Google Cloud BigQuery サービスにアクセスする

製品サポート

製品サポート

はい

30

Google Pubsub

camel-quarkus-google-pubsub

Google Cloud Platform PubSub サービスとの間でメッセージを送受信します。

製品サポート

製品サポート

はい

31

gRPC

camel-quarkus-grpc

gRPC エンドポイントを公開し、外部 gRPC エンドポイントにアクセスします。

製品サポート

製品サポート

はい

32

HTTP

camel-quarkus-http

Apache HTTP Client 5.x を使用して、外部の HTTP サーバーにリクエストを送信します。

製品サポート

製品サポート

はい

33

Infinispan

camel-quarkus-infinispan

Infinispan の分散キー/値のストアとデータグリッドの読み取りと書き込みを行います。

製品サポート

製品サポート

いいえ

34

Jasypt

camel-quarkus-jasypt

Jasypt を使用したセキュリティー

製品サポート

製品サポート

はい

35

Java JOOR DSL

camel-quarkus-java-joor-dsl

実行時の Java ルート定義の解析のサポート

コミュニティーサポート

コミュニティーサポート

はい

36

JDBC

camel-quarkus-jdbc

SQL および JDBC を通じてデータベースにアクセスします。

製品サポート

製品サポート

はい

37

JIRA

camel-quarkus-jira

JIRA 問題トラッカーと対話します。

製品サポート

製品サポート

はい

38

JMS

camel-quarkus-jms

JMS Queue または Topic との間でメッセージを送受信します。

製品サポート

製品サポート

はい

39

JPA

camel-quarkus-jpa

Java Persistence API (JPA) を使用して、データベースから Java オブジェクトを保存し、取得します。

製品サポート

製品サポート

はい

40

JT400

camel-quarkus-jt400

データキュー、メッセージキュー、またはプログラム呼び出しを使用して、IBM i システムとメッセージを交換します。IBM i は、AS/400 および iSeries サーバーの代替品です。

製品サポート

製品サポート

はい

41

JTA

camel-quarkus-jta

Java Transaction API (JTA) および Narayana トランザクションマネージャーを使用して、Camel ルートをトランザクションに含めます。

製品サポート

製品サポート

はい

42

Kafka

camel-quarkus-kafka

Apache Kafka ブローカーとの間でメッセージを送受信します。

製品サポート

製品サポート

はい

43

Kamelet

camel-quarkus-kamelet

ルートテンプレートを具体化する

製品サポート

製品サポート

はい

44

Kubernetes

camel-quarkus-kubernetes

Kubernetes API に対して操作を実行する

テクノロジープレビュー

テクノロジープレビュー

はい

45

Kudu

camel-kudu

Apache Hadoop エコシステムの無料およびオープンソースの列指向データストアである Apache Kudu と対話します。

製品サポート

製品サポート

いいえ

46

言語

camel-quarkus-language

Camel がサポートする任意の言語でスクリプトを実行します。

製品サポート

製品サポート

はい

47

LDAP

camel-quarkus-ldap

LDAP サーバーで検索を実行します。

製品サポート

製品サポート

はい

48

Log

camel-quarkus-log

基礎となるロギングメカニズムにメッセージをログとして記録します。

製品サポート

製品サポート

はい

49

LRA

camel-quarkus-lra

Long-Running-Action フレームワークの Camel saga バインディング。

テクノロジープレビュー

テクノロジープレビュー

はい

50

Mail

camel-quarkus-mail

imap、pop3、および smtp プロトコルを使用してメールを送受信します。添付のある Camel メッセージを MIME-Multipart メッセージに、またはその逆にマーシャリングします。

製品サポート

製品サポート

はい

51

管理

camel-quarkus-management

JMX 管理ストラテジーと関連する管理リソース。

製品サポート

製品サポート

はい

52

MapStruct

camel-quarkus-mapstruct

Mapstruct を使用した型変換

製品サポート

製品サポート

はい

53

Master

camel-quarkus-master

クラスター内の単一のコンシューマーのみが特定のエンドポイントから消費するようにします。JVM が停止した場合に自動的にフェイルオーバーします。

製品サポート

製品サポート

はい

54

Micrometer

camel-quarkus-micrometer

Micrometer ライブラリーを使用して、Camel ルートからさまざまなメトリクスを直接収集します。

製品サポート

製品サポート

はい

55

MicroProfile Fault Tolerance

camel-quarkus-microprofile-fault-tolerance

Microprofile フォールトトレランスを使用した Circuit Breaker EIP

製品サポート

製品サポート

はい

56

MicroProfile Health

camel-quarkus-microprofile-health

MicroProfile Health による Camel ヘルスチェックの公開

製品サポート

製品サポート

はい

57

Minio

camel-quarkus-minio

Minio SDK を使用して、Minio Storage Service からオブジェクトを保存および取得します。

製品サポート

製品サポート

はい

58

MLLP

camel-quarkus-mllp

MLLP プロトコルを使用して外部システムと通信します。

製品サポート

製品サポート

はい

59

MyBatis

camel-quarkus-mybatis

MyBatis を使用して、リレーショナルデータベースでクエリー、ポーリング、挿入、更新、または削除を実行します。

製品サポート

製品サポート

はい

60

Mock

camel-quarkus-mock

モックを使用してルートおよび仲介ルールをテストします。

製品サポート

製品サポート

はい

61

MongoDB

camel-quarkus-mongodb

MongoDB ドキュメントおよびコレクションの操作を実行します。

テクノロジープレビュー

テクノロジープレビュー

はい

62

Netty

camel-quarkus-netty

Netty 4.x で TCP または UDP を使用するソケットレベルのネットワーク。

製品サポート

製品サポート

はい

63

Netty HTTP

camel-quarkus-netty-http

Netty 4.x を使用する Netty HTTP サーバーおよびクライアント。

製品サポート

製品サポート

はい

64

Openapi Java

camel-quarkus-openapi-java

Camel REST DSL で定義された OpenAPI リソースを公開する

製品サポート

製品サポート

はい

65

OpenTelemetry

camel-quarkus-opentelemetry

OpenTelemetry を使用した分散トレース

製品サポート

製品サポート

はい

66

Quartz

camel-quarkus-quartz

Quartz 2.x スケジューラーを使用してメッセージの送信をスケジュールします。

製品サポート

製品サポート

はい

67

Paho

camel-quarkus-paho

Eclipse Paho MQTT クライアントを使用して MQTT メッセージブローカーと通信します。

製品サポート

製品サポート

はい

68

Paho MQTT5

camel-quarkus-paho-mqtt5

Eclipse Paho MQTT v5 クライアントを使用して MQTT メッセージブローカーと通信します。

製品サポート

製品サポート

はい

69

Platform HTTP

camel-quarkus-platform-http

現在のプラットフォームで利用可能な HTTP サーバーを使用して HTTP エンドポイントを公開します。

製品サポート

製品サポート

はい

70

Ref

camel-quarkus-ref

Camel Registry で名前によって動的に検索されたエンドポイントにメッセージをルーティングします。

製品サポート

製品サポート

はい

71

REST

camel-quarkus-rest

REST サービスおよび OpenAPI Specification を公開するか、外部の REST サービスを呼び出します。

製品サポート

製品サポート

はい

72

REST OpenAPI

camel-quarkus-rest-openapi

RestProducerFactory インターフェイスを実装するコンポーネントに委任する OpenAPI 仕様ドキュメントに基づいて REST プロデューサーを設定します。

製品サポート

製品サポート

はい

73

Salesforce

camel-quarkus-salesforce

Java DTO を使用して Salesforce と通信します。

製品サポート

製品サポート

はい

74

SAGA

camel-quarkus-saga

Saga EIP を使用して、ルート内でカスタムアクションを実行します。

テクノロジープレビュー

テクノロジープレビュー

はい

75

SAP

camel-quarkus-sap

SAP Camel コンポーネントを提供します。

製品サポート

なし

はい

76

Saxon

camel-quarkus-saxon

XQuery および Saxon を使用して XML ペイロードをクエリーまたは変換します。

製品サポート

製品サポート

はい

77

Scheduler

camel-quarkus-scheduler

java.util.concurrent.ScheduledExecutorService を使用して、指定された間隔でメッセージを生成します。

製品サポート

製品サポート

はい

78

Seda

camel-quarkus-seda

同じ JVM の Camel コンテキストから別のエンドポイントを非同期に呼び出します。

製品サポート

製品サポート

はい

79

Servlet

camel-quarkus-servlet

Servlet によって HTTP リクエストを処理します。

製品サポート

製品サポート

はい

80

Slack

camel-quarkus-slack

Slack との間でメッセージを送受信します。

製品サポート

製品サポート

はい

81

SNMP

camel-quarkus-snmp

トラップを受信し、SNMP (Simple Network Management Protocol) 対応デバイスをポーリングします。

製品サポート

テクノロジープレビュー

はい

82

Splunk

camel-quarkus-splunk

Splunk でイベントを公開または検索します。

製品サポート

製品サポート

はい

83

Splunk HEC

camel-quarkus-splunk-hec

splunk コンポーネントを使用すると、HTTP Event Collector を使用して Splunk でイベントを公開できます。

製品サポート

製品サポート

はい

84

SQL

camel-quarkus-sql

SQL クエリーを実行します。

製品サポート

製品サポート

はい

85

Telegram

camel-quarkus-telegram

Telegram Bot API として動作するメッセージを送受信します。

製品サポート

製品サポート

はい

86

Timer

camel-quarkus-timer

java.util.Timer を使用して、指定された間隔でメッセージを生成します。

製品サポート

製品サポート

はい

87

Validator

camel-quarkus-validator

XML スキーマと JAXP 検証を使用してペイロードを検証します。

製品サポート

製品サポート

はい

88

Velocity

camel-quarkus-velocity

Velocity テンプレートを使用してメッセージを変換します。

製品サポート

製品サポート

はい

89

VertX HTTP

camel-quarkus-vertx-http

Vert.x による Camel HTTP クライアントのサポート

製品サポート

製品サポート

はい

90

VertX Websocket

camel-quarkus-vertx-websocket

Vert.x による Camel WebSocket のサポート

製品サポート

製品サポート

はい

91

XJ

camel-quarkus-xj

XSLT を使用して、JSON および XML メッセージを変換します。

製品サポート

製品サポート

はい

92

XML IO DSL

camel-quarkus-xml-io-dsl

XML ルート定義を解析するための XML スタック

製品サポート

製品サポート

はい

93

XSLT

camel-quarkus-xslt

XSLT テンプレートを使用して XML ペイロードを変換します。

製品サポート

製品サポート

はい

94

XSLT Saxon

camel-quarkus-xslt-saxon

Saxon を使用した XSLT テンプレートを使用して XML ペイロードを変換します。

製品サポート

製品サポート

はい

95

Zip ファイル

camel-quarkus-zipfile

java.util.zip.ZipStream を使用して、ストリームを圧縮および圧縮解除します。

製品サポート

製品サポート

はい

96

Zip デフレート圧縮

camel-quarkus-zip-deflater

java.util.zip.Deflater、java.util.zip.Inflater、または java.util.zip.GZIPStream を使用して、ストリームを圧縮および解凍します。

製品サポート

製品サポート

はい

2.2. サポート言語

7 つの言語があります。

Expand
表2.2 Red Hat build of Apache Camel for Quarkus のサポートマトリックス (言語)
 エクステンションアーティファクト説明JVM サポートレベルネイティブサポートレベルIBM Power および IBM Z のサポート

1

Bean

camel-quarkus-bean

Java Bean のメソッドを呼び出します。

製品サポート

製品サポート

はい

2

コア

camel-quarkus-core

Camel コア機能と基本的な Camel 言語/Constant、ExchangeProperty、Header、Ref、Simple および Tokenize

製品サポート

製品サポート

はい

3

Hl7

camel-quarkus-hl7

HL7 MLLP コーデックを使用して、HL7 (Health Care) モデルオブジェクトをマーシャリングおよびアンマーシャリングします。

製品サポート

製品サポート

はい

4

JSONPath

camel-quarkus-jsonpath

JSON メッセージのボディーに対して、JSONPath 式を評価します。

製品サポート

製品サポート

はい

5

Jslt

camel-quarkus-jslt

JSLT を使用して JSON ペイロードをクエリーまたは変換します。

製品サポート

製品サポート

はい

6

Saxon

camel-quarkus-saxon

XQuery および Saxon を使用して XML ペイロードをクエリーまたは変換します。

製品サポート

製品サポート

はい

7

XML IO DSL

camel-quarkus-xml-io-dsl

XML ルート定義を解析するための XML スタック

製品サポート

製品サポート

はい

8

Xpath

camel-quarkus-xpath

XML ペイロードに対して XPath 式を評価します。

製品サポート

製品サポート

はい

9

YAML DSL

camel-quarkus-yaml-dsl

製品サポート

製品サポート

はい

YAML ルート定義を解析するための YAML スタック

2.3. サポートされるデータフォーマット

13 種類のデータフォーマットがあります。

Expand
表2.3 Red Hat build of Apache Camel for Quarkus のサポートマトリックス (データフォーマット)
 エクステンションアーティファクト説明JVM サポートレベルネイティブサポートレベルIBM Power および IBM Z のサポート

1

Avro

camel-quarkus-avro

Apache Avro バイナリーデータフォーマットを使用して、メッセージをシリアライズおよびデシリアライズします。

製品サポート

製品サポート

はい

2

Bindy

camel-quarkus-bindy

Camel Bindy を使用して、片側の POJO と、反対側のコンマ区切り値 (CSV)、固定フィールド長、またはキーと値のペア (KVP) 形式の間のマーシャリングとアンマーシャル

製品サポート

製品サポート

はい

3

Crypto

camel-quarkus-crypto

Java 暗号化エクステンション: Camel のマーシャルおよびアンマーシャルフォーマットメカニズムを使用した対称 (共有鍵) 暗号化および復号化。

製品サポート

製品サポート

はい

4

Gson

camel-quarkus-gson

Gson を使用して、POJO を JSON に、およびその逆にマーシャリングします。

製品サポート

製品サポート

はい

5

Hl7

camel-quarkus-hl7

HL7 MLLP コーデックを使用して、HL7 (Health Care) モデルオブジェクトをマーシャリングおよびアンマーシャリングします。

製品サポート

製品サポート

はい

6

Jackson

camel-quarkus-jackson

Jackson を使用して、POJO を JSON にマーシャリングし、その逆も行います。

製品サポート

製品サポート

はい

7

Jackson Avro

camel-quarkus-jackson-avro

Jackson を使用して、POJO を Avro にマーシャリングし、その逆も行います。

製品サポート

製品サポート

はい

8

Jackson ProtoBuf

camel-quarkus-jackson-protobuf

Jackson を使用して、POJO を Protobuf にマーシャリングし、その逆も行います。

製品サポート

製品サポート

はい

9

Jackson XML

camel-quarkus-jacksonxml

Jackson の XMLMapper エクステンションを使用して、XML ペイロードを POJO にアンマーシャリングし、戻します。

製品サポート

製品サポート

はい

10

Jaxb

camel-quarkus-jaxb

JAXB2 XML マーシャリング標準を使用して、XML ペイロードを POJO に、およびその逆にアンマーシャリングします。

製品サポート

製品サポート

はい

11

Xml-JAXP

camel-quarkus-xml-jaxp

Camel XML JAXP

製品サポート

製品サポート

はい

12

PGP

camel-quarkus-crypto

Camel のマーシャルおよびアンマーシャルフォーマットメカニズムを使用した対称 (共有鍵) 暗号化および復号化。

製品サポート

製品サポート

はい

13

SOAP

camel-quarkus-soap

Java オブジェクトを SOAP メッセージにマーシャリングし、その逆も行います。

製品サポート

製品サポート

はい

第3章 Camel Quarkus エクステンションリファレンス

この章では、Red Hat build of Apache Camel for Quarkus の使用に関する情報を提供します。

3.1. AMQP

Apache QPid クライアントを使用した AMQP プロトコルによるメッセージング。

3.1.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 エクステンションによって作成されたものです。以下が必要です。

  1. *.avsc ファイルを src/main/avro または src/test/avro という名前のフォルダーに保存します
  2. 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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.5. AWS 2 DynamoDB

AWS SDK バージョン 2.x を使用して、AWS DynamoDB サービスからデータを保存および取得したり、AWS DynamoDB Stream からメッセージを受信したりします。

3.5.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.5.4. 追加の Camel Quarkus 設定

3.5.4.1. Quarkus Amazon DynamoDB とのオプションの統合

必要に応じて、Quarkus Amazon DynamoDB エクステンションを Camel Quarkus AWS 2 DynamoDB と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。

  1. クライアントタイプ apache は、次のプロパティーを設定して選択する必要があります。

    quarkus.dynamodb.sync-client.type=apache
  2. DynamoDbClient は、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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.7. AWS 2 Lambda

AWS SDK バージョン 2.x を使用して、AWS Lambda 関数を管理および呼び出します。

3.7.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.7.4. 追加の Camel Quarkus 設定

quarkus-amazon-lambda エクステンションを使用すると、Quarkus を使用して AWS Lambda をビルドできますが、Camel コンポーネントは既存の関数を管理 (デプロイ、アンデプロイなど) します。したがって、quarkus-amazon-lambdaaws2-lambda エクステンションのクライアントとして使用することはできません。

3.8. AWS 2 S3 Storage Service

AWS S3 Storage Service からオブジェクトを保存および取得します。

3.8.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.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 のドキュメント に従ってください。ただし、次の注意事項に注意してください。

  1. クライアントタイプ apache は、次のプロパティーを設定して選択する必要があります。

    quarkus.s3.sync-client.type=apache
  2. S3Client は、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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.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 のドキュメント に従ってください。ただし、次の注意事項に注意してください。

  1. クライアントタイプ apache は、次のプロパティーを設定して選択する必要があります。

    quarkus.sns.sync-client.type=apache
  2. SnsClient は、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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.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 のドキュメント に従ってください。ただし、次の注意事項に注意してください。

  1. クライアントタイプ apache は、次のプロパティーを設定して選択する必要があります。

    quarkus.sqs.sync-client.type=apache
  2. SqsClient は、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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.13. Azure Storage Queue Service

azure-storage-queue コンポーネントは、Azure SDK v12 を使用して Azure Storage Queue への/からのメッセージを保存および取得するために使用されます。

3.13.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.14. Bean バリデーター

Java Bean Validation API を使用してメッセージボディーを検証します。

3.14.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 のプロパティー (constraintValidatorFactorymessageInterpolatortraversableResolvervalidationProviderResolvervalidatorFactory) によって 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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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リフレクション用に登録 する必要があります。この場合は、フィールドアクセスを省略できることに注意してください。

Expand
設定プロパティーデフォルト

lock quarkus.camel.bootstrap.enabled

true に設定すると、CamelRuntime は自動的に起動します。

boolean

true

lock quarkus.camel.service.discovery.exclude-patterns

クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。一致するファイルで定義されたサービスは、**org.apache.camel.spi.FactoryFinder メカニズムでは 検出できません

除外は包含よりも優先されます。ここで定義された除外は、Camel Quarkus エクステンションで追加されたサービスの検出性を拒否するのにも使用できます。

値の例: META-INF/services/org/apache/camel/foo/*,META-INF/services/org/apache/camel/foo/**/bar

string

 

lock quarkus.camel.service.discovery.include-patterns

クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。指定したファイルが exclude-patterns で除外されない限り、一致するファイルで定義されたサービスは、org.apache.camel.spi.FactoryFinder メカニズムで検出されます。

Camel Quarkus エクステンションには、デフォルトで一部のサービスが含まれる可能性があることに注意してください。ここで選択されそれらのサービスに追加されたサービスおよび exclude-patterns で定義された除外は、ユニオンセットに適用されます。

値の例: META-INF/services/org/apache/camel/foo/*,META-INF/services/org/apache/camel/foo/**/bar

string

 

lock quarkus.camel.service.registry.exclude-patterns

クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。一致するファイルで定義されたサービスは、アプリケーションの静的初期化中に Camel レジストリーに 追加されません

除外は包含よりも優先されます。ここで定義された除外は、Camel Quarkus エクステンションで追加されたサービスの登録を拒否するのにも使用できます。

値の例: META-INF/services/org/apache/camel/foo/*,META-INF/services/org/apache/camel/foo/**/bar**

string

 

lock quarkus.camel.service.registry.include-patterns

クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。指定したファイルが exclude-patterns で除外されない限り、一致するファイルで定義されたサービスは、アプリケーションの静的初期化中に Camel レジストリーに追加されます。

Camel Quarkus エクステンションには、デフォルトで一部のサービスが含まれる可能性があることに注意してください。ここで選択されそれらのサービスに追加されたサービスおよび exclude-patterns で定義された除外は、ユニオンセットに適用されます。

値の例: META-INF/services/org/apache/camel/foo/*,META-INF/services/org/apache/camel/foo/**/bar

string

 

lock quarkus.camel.runtime-catalog.components

true の場合、アプリケーションに埋め込まれた Runtime Camel Catalog には、アプリケーションで利用可能な Camel コンポーネントの JSON スキーマが含まれます。それ以外の場合は、コンポーネントの JSON スキーマは Runtime Camel Catalog で利用可能ではなく、アクセスしようとすると RuntimeException が発生します。

これを false に設定すると、ネイティブイメージのサイズを縮小することができます。JVM モードでは、ネイティブモードとの動作の一貫性を確立する場合を除き、このフラグを false に設定することは実際の利点がありません。

boolean

true

lock quarkus.camel.runtime-catalog.languages

true の場合、アプリケーションに埋め込まれた Runtime Camel Catalog には、アプリケーションで利用可能な Camel 言語の JSON スキーマが含まれます。それ以外の場合は、言語の JSON スキーマは Runtime Camel Catalog で利用可能ではなく、アクセスしようとすると RuntimeException が発生します。

これを false に設定すると、ネイティブイメージのサイズを縮小することができます。JVM モードでは、ネイティブモードとの動作の一貫性を確立する場合を除き、このフラグを false に設定することは実際の利点がありません。

boolean

true

lock quarkus.camel.runtime-catalog.dataformats

true の場合、アプリケーションに埋め込まれた Runtime Camel Catalog には、アプリケーションで利用可能な Camel データフォーマットの JSON スキーマが含まれます。それ以外の場合は、データフォーマットの JSON スキーマは Runtime Camel Catalog で利用可能ではなく、アクセスしようとすると RuntimeException が発生します。

これを false に設定すると、ネイティブイメージのサイズを縮小することができます。JVM モードでは、ネイティブモードとの動作の一貫性を確立する場合を除き、このフラグを false に設定することは実際の利点がありません。

boolean

true

lock quarkus.camel.runtime-catalog-models

true の場合、アプリケーションに埋め込まれた Runtime Camel Catalog には、アプリケーションで利用可能な Camel EIP モデルの JSON スキーマが含まれます。それ以外の場合は、EIP モデルの JSON スキーマは Runtime Camel Catalog で利用可能ではなく、アクセスしようとすると RuntimeException が発生します。

これを false に設定すると、ネイティブイメージのサイズを縮小することができます。JVM モードでは、ネイティブモードとの動作の一貫性を確立する場合を除き、このフラグを false に設定することは実際の利点がありません。

boolean

true

lock quarkus.camel.routes-discovery.enabled

静的な初期化時のルートの自動検出を有効にします。

boolean

true

lock quarkus.camel.routes-discovery.exclude-patterns

RouteBuilder クラスの除外フィルタースキャンに使用されます。除外フィルタリングは、包含フィルターよりも優先されます。パターンは Ant-path スタイルのパターンを使用しています。複数のパターンをコンマで区切って指定することができます。たとえば、Bar から始まるすべてのクラスを除外するには、**/Bar* を使用します。特定のパッケージからのすべてのルートを除外するには、com/mycompany/bar/* を使用します。特定のパッケージおよびそのサブパッケージからのすべてのルートを除外するには、2 つのワイルドカードを使用します (com/mycompany/bar/**)。特定の 2 つのパッケージからのすべてのルートを除外するには、com/mycompany/bar/*,com/mycompany/stuff/* を使用します。

string

 

lock quarkus.camel.routes-discovery.include-patterns

RouteBuilder クラスの包含フィルタースキャンに使用されます。除外フィルタリングは、包含フィルターよりも優先されます。パターンは Ant-path スタイルのパターンを使用しています。複数のパターンをコンマで区切って指定することができます。たとえば、Foo から始まるすべてのクラスを含めるには、**/Foo* を使用します。特定のパッケージからのすべてのルートを含めるには、com/mycompany/foo/* を使用します。特定のパッケージおよびそのサブパッケージからのすべてのルートを含めるには、2 つのワイルドカードを使用します (com/mycompany/foo/**)。特定の 2 つのパッケージからのすべてのルートを含めるには、com/mycompany/foo/*,com/mycompany/stuff/* を使用します。

string

 

lock quarkus.camel.native.reflection.exclude-patterns

反映のために登録から 除外 されるクラス名に一致する Ant-path スタイルパターンのコンマ区切りリスト。java.lang.Class.getName() メソッドによって返されるままのクラス名フォーマットを使用します。パッケージセグメントはピリオド . で区切られ、内部クラスはドル記号 $ で区切られます。

このオプションは、include-patterns により選択されたセットを絞り込みます。デフォルトでは、クラスは除外されません。

このオプションは、Quarkus エクステンションによって内部で登録されたクラスの登録解除には使用できません。

string

 

lock quarkus.camel.native.reflection.include-patterns

反映のために登録されるクラス名に一致する Ant-path フォーマットのパターンのコンマ区切りリスト。java.lang.Class.getName() メソッドによって返されるままのクラス名フォーマットを使用します。パッケージセグメントはピリオド . で区切られ、内部クラスはドル記号 $ で区切られます。

デフォルトでは、クラスは含まれません。このオプションで選択されるセットは、exclude-patterns により絞り込むことができます。

Quarkus エクステンションは通常、反映のために必要なクラスを登録することに注意してください。このオプションは、組み込みの機能では十分ではない場合に有用です。

このオプションは、コンストラクター、フィールド、およびメソッドの完全な反映アクセスを有効にします。よりきめ細かい制御が必要な場合は、Java コードで io.quarkus.runtime.annotations.RegisterForReflection アノテーションを使用することを検討してください。

このオプションが適切に機能するには、以下の条件のうち少なくとも 1 つが満たされる必要があります。

- パターンにワイルドカード (* または /) はありません。選択したクラスを含むアーティファクトには、Jandex インデックス (META-INF/jandex.idx) が含まれます。選択したクラスを含むアーティファクトは、application.propertiesquarkus.index-dependency.* ファミリーのオプションを使用して、インデックス化用に登録されます。以下に例を示します。

` quarkus.index-dependency.my-dep.group-id = org.my-group quarkus.index-dependency.my-dep.artifact-id = my-artifact `

ここで、my-dep は、org.my-groupmy-artifact が関連していることを Quarkus に伝えるために選択したラベルになります。

string

 

lock quarkus.camel.native.reflection.serialization-enabled

true の場合、基本クラスはシリアル化用に登録されます。そうしないと、基本クラスはネイティブモードでのシリアル化のために自動的に登録されません。シリアル化のために自動的に登録されたクラスのリストは、CamelSerializationProcessor.BASE_SERIALIZATION_CLASSES にあります。これを false に設定すると、ネイティブイメージのサイズを縮小することができます。JVM モードでは、ネイティブモードとの動作の一貫性を確立する場合を除き、このフラグを true に設定することは実際の利点がありません。

boolean

false

lock quarkus.camel.expression.on-build-time-analysis-failure

ビルド時にルート定義から式を抽出できない場合の対処方法。

org.apache.camel.quarkus.core.CamelConfig.FailureRemedy

warn

lock quarkus.camel.expression.extraction-enabled

ビルド時にルート定義から式を抽出する必要があるかどうかを示します。無効にすると、式はランタイムにコンパイルされます。

boolean

true

lock quarkus.camel.event-bridge.enabled

Camel イベントから CDI イベントへのブリッジを有効にするかどうか。

これにより、CDI オブザーバーを Camel イベント用に設定できます。たとえば、org.apache.camel.quarkus.core.eventsorg.apache.camel.quarkus.main.events、および org.apache.camel.impl.event パッケージに属するもの。

この設定項目は、Camel イベント用に設定されたオブザーバーがアプリケーションに存在する場合にのみ効果があることに注意してください。

boolean

true

lock quarkus.camel.source-location-enabled

camel ソースの場所を有効/無効にするためのビルド時の設定オプション

boolean

false

lock quarkus.camel.main.shutdown.timeout

CamelMain#stop() が完了するまで待機するタイムアウト時間 (ミリ秒の精度)

java.time.Duration

PT3S

lock quarkus.camel.main.arguments.on-unknown

CamelMain が不明な引数に遭遇した際のアクション。fail: CamelMain の使用状況ステートメントを出力し、RuntimeException を出力します。ignore: 警告が解除し、アプリケーションは通常どおりに起動します。warn: CamelMain の使用状況ステートメントを出力しますが、アプリケーションが通常どおりに起動するのを許可します。

org.apache.camel.quarkus.core.CamelConfig.FailureRemedy

warn

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

3.22. Cron

Unix cron 構文で指定されたタイミングでイベントをトリガーする汎用インターフェイス。

3.22.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.24. CXF

Apache CXF を使用して SOAP WebServices を公開するか、CXF WS クライアントを使用して外部 WebServices に接続します。

3.24.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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) 
1

public interface CalculatorService {

    public static final String TARGET_NS = "http://acme.org/wscalculator/Calculator";

    @WebMethod 
2

    public int add(int intA, int intB);

    @WebMethod 
3

    public int subtract(int intA, int intB);

    @WebMethod 
4

    public int divide(int intA, int intB);

    @WebMethod 
5

    public int multiply(int intA, int intB);
}
1 2 3 4 5
注記: JAX-WS アノテーションが必要です。Simple CXF フロントエンドはサポートされていません。ネイティブモードで適切に機能させるには、複雑なパラメータータイプに JAXB アノテーションが必要です。
ヒント

このサービスエンドポイントインターフェイスを実装する 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 ページを参照してください。

ヒント

Red Hat build of Apache Camel for Quarkus および Quarkus CXF には、さまざまな WS 仕様を実装したアプリケーションの実行可能なサンプルとして役立つ インテグレーション テスト が多数含まれています。

3.24.3.7. ツール

quarkus-cxf は、以下の 2 つの CXF ツールをラップします。

重要

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.30.4. 追加の Camel Quarkus 設定

デフォルトでは、FHIR コンポーネントと DataFormat のデフォルト値であるため、FHIR バージョン R4 および DSTU3 のみがネイティブモードで有効になっています。

Expand
設定プロパティーデフォルト

lock quarkus.camel.fhir.enable-dstu2

ネイティブモードで FHIR DSTU2 Specs を有効にします。

boolean

false

lock quarkus.camel.fhir.enable-dstu2_hl7org

ネイティブモードで FHIR DSTU2_HL7ORG Specs を有効にします。

boolean

false

lock quarkus.camel.fhir.enable-dstu2_1

ネイティブモードで FHIR DSTU2_1 Specs を有効にします。

boolean

false

lock quarkus.camel.fhir.enable-dstu3

ネイティブモードで FHIR DSTU3 Specs を有効にします。

boolean

false

lock quarkus.camel.fhir.enable-r4

ネイティブモードで FHIR R4 Specs を有効にします。

boolean

true

lock quarkus.camel.fhir.enable-r5

ネイティブモードで FHIR R5 Specs を有効にします。

boolean

false

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

3.31. File

ファイルの読み取りと書き込みを行います。

3.31.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 設定

同じルートが複数の 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.* プロパティーを微調整できます。

Expand
設定プロパティーデフォルト

lock quarkus.camel.cluster.file.enabled

'quarkus.camel.cluster.file.*' 設定に従って、ファイルロッククラスターサービスを自動的に設定するかどうか。

boolean

false

lock quarkus.camel.cluster.file-id

クラスターサービス ID (デフォルトは null)。

string

 

lock quarkus.camel.cluster.file-root

ルートパス (デフォルトは null)。

string

 

lock quarkus.camel.cluster.file-order

サービス検索の順序/優先度 (デフォルトは 2147482647)。

java.lang.Integer

 

lock quarkus.camel.cluster.file.acquire-lock-delay

ロックの取得を開始するまでの待機時間 (デフォルトは 1000 ミリ秒)。

string

 

lock quarkus.camel.cluster.file.acquire-lock-interval

ロックの取得を試みるまでの待機時間 (デフォルトは 10000 ミリ秒)。

string

 

lock quarkus.camel.cluster.file.attributes

サービスに関連付けられたカスタム属性 (デフォルトは空のマップ)。

Map<String,String>

 

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

3.32. FTP

SFTP、FTP、または SFTP サーバーとの間でファイルをアップロードおよびダウンロードする

3.32.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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-plugingenerate-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-protoapplication.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.includesapplication.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-grpcquarkus-grpc エクステンションの両方の依存関係がある場合、アプリケーションをコンパイルすると、ビルド時に問題が発生する可能性があります。

3.35.5. 追加の Camel Quarkus 設定

Expand
設定プロパティーデフォルト

lock quarkus.camel.grpc.codegen.enabled

true の場合、Camel Quarkus gRPC のコード生成が、proto ディレクトリー、または scan-for-proto または scan-for-imports オプションで指定された依存関係から検出された .proto ファイルに対して実行されます。false の場合、.proto ファイルのコード生成は無効になります。

boolean

true

lock quarkus.camel.grpc.codegen.scan-for-proto

Camel Quarkus gRPC のコード生成が、.proto ファイルのアプリケーションの依存関係をスキャンして、そのファイルから Java スタブを生成できます。このプロパティーは、スキャンする依存関係の範囲を設定します。適用可能な値:

- none - デフォルト - 依存関係をスキャンしない - スキャンする groupId:artifactId コーディネートのコンマ区切りのリスト - all - すべての依存関係をスキャンする

string

none

lock quarkus.camel.grpc.codegen.scan-for-imports

Camel Quarkus gRPC のコード生成が、このアプリケーションの proto によってインポートできる .proto ファイルの依存関係をスキャンできます。適用可能な値:

- none - デフォルト - 依存関係をスキャンしない - スキャンする groupId:artifactId コーディネートのコンマ区切りリスト - all - すべての依存関係をスキャンする (デフォルトは com.google.protobuf:protobuf-java)

string

com.google.protobuf:protobuf-java

lock quarkus.camel.grpc.codegen.scan-for-proto-includes

パッケージパスまたはファイル glob パターンは、追加対象として考慮すべき .proto ファイルを含む依存関係ごとに追加します。

Map<String,List<String>>

 

lock quarkus.camel.grpc.codegen.scan-for-proto-excludes

パッケージパスまたはファイル glob パターンは、除外対象として考慮すべき .proto ファイルを含む依存関係ごとに追加します。

Map<String,List<String>>

 

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.38.4. 追加の Camel Quarkus 設定

  • アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。

3.39. Infinispan

Infinispan の分散キー/値のストアとデータグリッドの読み取りと書き込みを行います。

3.39.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 JasyptPropertiesParserPropertiesComponent の手動設定が可能になります。

注記

このモードでは、@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}}");
    }
}
注記

PropertiesComponentsetLocation(…​) を呼び出し、classpath: 接頭辞を使用してカスタム設定ファイルの場所を指定する場合、そのファイルを quarkus.native.resources.includes に追加してネイティブモードでのロードを可能にする必要があります。

3.44.4. 追加の Camel Quarkus 設定

Expand
設定プロパティーデフォルト

quarkus.camel.jasypt.enabled

このオプションを false に設定すると、Quarkus SmallRye 設定との Jasypt 統合が無効になります。ただし、JasyptPropertiesParser と PropertiesComponent を手動で設定する '従来' の方法で、Camel を使用して Jasypt を手動で設定することもできます。詳細は、使用方法のセクションを参照してください。

boolean

true

quarkus.camel.jasypt.algorithm

復号化に使用するアルゴリズム。

string

PBEWithMD5AndDES

quarkus.camel.jasypt.password

Jasypt が設定値を復号化するために使用するマスターパスワード。このオプションは、マスターパスワードの検索動作に影響する接頭辞をサポートします。

sys: は、JVM システムプロパティーから値を検索します。sysenv: は、指定されたキーを使用して OS システム環境から値を検索します。

string

 

quarkus.camel.jasypt.random-iv-generator-algorithm

指定されたアルゴリズムを使用して、RandomIvGenerator で Jasypt StandardPBEStringEncryptor を設定します。

string

SHA1PRNG

quarkus.camel.jasypt.random-salt-generator-algorithm

指定されたアルゴリズムを使用して、RandomSaltGenerator で Jasypt StandardPBEStringEncryptor を設定します。

string

SHA1PRNG

quarkus.camel.jasypt.configuration-customizer-class-name

org.apache.camel.quarkus.component.jasypt.JasyptConfigurationCustomizer 実装の完全修飾クラス名。これにより、Jasypt 設定を完全に制御するオプション機能が提供されます。

string

 

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

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.propertiesquarkus.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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.49. JMS

JMS Queue または Topic との間でメッセージを送受信します。

3.49.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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-jmsquarkus-qpid-jms、および ibmmq-client で使用できます。依存関係を pom.xml に追加するだけです。

<dependency>
    <groupId>io.quarkiverse.messaginghub</groupId>
    <artifactId>quarkus-pooled-jms</artifactId>
</dependency>

プーリングはデフォルトで有効になっています。

注記

プーリング接続では、clientIDdurableSubscriptionName はサポートされていません。プールから 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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 コンテナーの EntityManagerFactoryTransactionStrategy を使用して、JpaMessageIdRepository を設定する必要があります。

@Inject
EntityManagerFactory entityManagerFactory;

@Inject
TransactionStrategy transactionStrategy;

from("direct:idempotent")
    .idempotentConsumer(
        header("messageId"),
        new JpaMessageIdRepository(entityManagerFactory, transactionStrategy, "idempotentProcessor"));
注記

spring-orm 依存関係が除外されるため、sharedEntityManagertransactionManager などの一部のオプションはサポートされません。

3.51. JSLT

JSLT を使用して JSON ペイロードをクエリーまたは変換します。

3.51.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 オプションはネイティブモードではサポートされていません。これは、CamelContextExchange などのセキュリティーに敏感な 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")

さまざまなトランザクションポリシーのサポートが提供されます。

Expand
ポリシー説明

PROPAGATION_MANDATORY

現在のトランザクションをサポートします。現在のトランザクションが存在しない場合は例外が発生します。

PROPAGATION_NEVER

現在のトランザクションをサポートしません。現在のトランザクションが存在する場合は例外が発生します。

PROPAGATION_NOT_SUPPORTED

現在のトランザクションはサポートせず、常に非トランザクションを実行します。

PROPAGATION_REQUIRED

現在のトランザクションをサポートします。存在しない場合は新しいトランザクションを作成します。

PROPAGATION_REQUIRES_NEW

新しいトランザクションを作成し、現在のトランザクションが存在する場合はそれを一時停止します。

PROPAGATION_SUPPORTS

現在のトランザクションをサポートします。存在しない場合は、非トランザクションを実行します。

3.54. JT400

データキュー、メッセージキュー、またはプログラム呼び出しを使用して、IBM i システムとメッセージを交換します。IBM i は、AS/400 および iSeries サーバーの代替品です。

3.54.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 設定

Expand
設定プロパティーデフォルト

quarkus.camel.kafka.kubernetes-service-binding.merge-configuration

true の場合、Quarkus Kubernetes Service Binding エクステンション (設定されている場合) によって検出された Kafka 設定プロパティーは、Camel Kafka コンポーネントまたはエンドポイントオプションを介して設定されたプロパティーとマージされます。false の場合、Quarkus Kubernetes Service Binding エクステンションによって検出された Kafka 設定プロパティーはすべて無視され、Kafka コンポーネント設定はすべて Camel によって駆動されます。

boolean

true

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

3.56. Kamelet

ルートテンプレートを具体化する

3.56.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 設定

Expand
設定プロパティーデフォルト

lock quarkus.camel.kamelet.identifiers

ビルド時にプリロードする kamelets 識別子のリスト。

個々の識別子は、関連する org.apache.camel.model.RouteTemplateDefinition id を設定するために使用されます。

string

 

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

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 ガイド に記載されています。

同じルートが複数の 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.* プロパティーをさらに微調整できます。

Expand
設定プロパティーデフォルト

lock quarkus.camel.cluster.kubernetes.enabled

'quarkus.camel.cluster.kubernetes.*' 設定に従って、Kubernetes クラスターサービスを自動的に設定する必要があるかどうか。

boolean

false

lock quarkus.camel.cluster.kubernetes-id

クラスターサービス ID (デフォルトは null)。

string

 

lock quarkus.camel.cluster.kubernetes.master-url

Kubernetes マスターの URL (デフォルトでは Kubernetes クライアントプロパティーから読み取られます)。

string

 

lock quarkus.camel.cluster.kubernetes.connection-timeout-millis

Kubernetes API サーバーにリクエストを送信するときに使用する接続タイムアウト (ミリ秒単位)。

java.lang.Integer

 

lock quarkus.camel.cluster.kubernetes.namespace

Pod と configmap を含む Kubernetes namespace の名前 (デフォルトで自動検出)。

string

 

lock quarkus.camel.cluster.kubernetes.pod-name

現在の Pod の名前 (デフォルトではコンテナーのホスト名から自動検出されます)。

string

 

lock quarkus.camel.cluster.kubernetes.jitter-factor

すべての Pod が同じ瞬間に Kubernetes API を呼び出さないようにするために適用するジッター係数 (デフォルトは 1.2)。

java.lang.Double

 

lock quarkus.camel.cluster.kubernetes.lease-duration-millis

現在のリーダーのデフォルトのリース期間 (デフォルトは 15000)。

java.lang.Long

 

lock quarkus.camel.cluster.kubernetes.renew-deadline-millis

リーダーシップを失った可能性があるため、リーダーがサービスを停止しなければならない期限 (デフォルトは 10000)。

java.lang.Long

 

lock quarkus.camel.cluster.kubernetes.retry-period-millis

リーダーシップを確認して獲得するための後続の 2 つの試みの間の時間。ジッター係数を使用してランダム化されます (デフォルトは 2000)。

java.lang.Long

 

lock quarkus.camel.cluster.kubernetes-order

サービス検索の順序/優先度 (デフォルトは 2147482647)。

java.lang.Integer

 

lock quarkus.camel.cluster.kubernetes.resource-name

楽観的ロックを行うために使用されるリースリソースの名前 (デフォルトは 'leaders')。リソース名は、基になる Kubernetes リソースが単一のロックを管理できる場合に接頭辞として使用されます。

string

 

lock quarkus.camel.cluster.kubernetes.lease-resource-type

Kubernetes で使用されるリースリソースタイプ。'config-map' または 'lease' のいずれかです (デフォルトは 'lease')。

org.apache.camel.component.kubernetes.cluster.LeaseResourceType

 

lock quarkus.camel.cluster.kubernetes.rebalancing

camel マスター namespace リーダーをクラスター内のすべての camel コンテキストに均等に分散する必要があるかどうか。

boolean

true

lock quarkus.camel.cluster.kubernetes-labels

クラスターを設定する Pod を識別するために使用されるラベルのキー/値。デフォルトは空のマップです。

Map<String,String>

 

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

3.58. Kudu

Apache Hadoop エコシステムの無料およびオープンソースの列指向データストアである Apache Kudu と対話します。

3.58.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

注記

Kudu は IBM Z および IBM Power ではサポートされていません。

3.59. 言語

Camel がサポートする任意の言語でスクリプトを実行します。

3.59.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 オプションはネイティブモードではサポートされていません。これは、CamelContextExchange などのセキュリティーに敏感な Camel コアクラスへのリフレクティブアクセスが必要なためです。これはセキュリティーリスクとみなされるため、この機能へのアクセスはデフォルトでは提供されません。

3.60. LDAP

LDAP サーバーで検索を実行します。

3.60.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 で有効または無効にすることができます。

  1. camel-quarkus-management エクステンションを追加または削除する。
  2. camel.main.jmxEnabled 設定プロパティーをブール値に設定する。
  3. システムプロパティー -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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 設定

Expand
設定プロパティーデフォルト

lock quarkus.camel.metrics.enable-route-policy

ルート処理時間のメトリクスをキャプチャーするために MicrometerRoutePolicyFactory を有効化するかどうかを設定します。

boolean

true

lock quarkus.camel.metrics.enable-message-history

個々のルートノード処理時間のメトリクスをキャプチャーするために、MicrometerMessageHistoryFactory を有効化するかどうかを設定します。設定されたルートノードの数によっては、大量のメトリクスが作成される可能性があります。したがって、このオプションはデフォルトで無効になります。

boolean

false

lock quarkus.camel.metrics.enable-exchange-event-notifier

エクスチェンジ処理時間のメトリクスをキャプチャーするために、MicrometerExchangeEventNotifier を有効化するかどうかを設定します。

boolean

true

lock quarkus.camel.metrics.enable-route-event-notifier

ルートの合計数と実行中のルートの合計数のメトリクスをキャプチャーするために、MicrometerRouteEventNotifier を有効化するかどうかを設定します。

boolean

true

lock quarkus.camel.metrics.enable-instrumented-thread-pool-factory

InstrumentedThreadPoolFactory を注入して Camel Thread Pool に関するパフォーマンス情報を収集するかどうかを設定します。

boolean

false

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

注記

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 設定

Expand
設定プロパティーデフォルト

lock quarkus.camel.health.enabled

Camel ヘルスチェックを有効にするかどうかを設定します

boolean

true

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

3.70. Minio

Minio SDK を使用して、Minio Storage Service からオブジェクトを保存および取得します。

3.70.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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.propertiesquarkus.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 設定

Expand
設定プロパティーデフォルト

lock quarkus.camel.opentelemetry.encoding

ヘッダー名をエンコードする必要があるかどうかを設定します。OpenTelemetry プロパゲーターが、ターゲットシステムと互換性のない形式でヘッダー名の値を設定する可能性がある状況で役立ちます。たとえば、JMS の場合、仕様ではヘッダー名が有効な Java 識別子であることが義務付けられています。

boolean

false

lock quarkus.camel.opentelemetry.exclude-patterns

指定されたコンマ区切りのパターンに一致するエンドポイント URI のトレースを無効にするかどうかを設定します。パターンは次の形式を取ることができます。

1. エンドポイント URI の完全一致。例: platform-http:/some/path

2. ワイルドカードマッチ。E.g platform-http:*

3. エンドポイント URI に一致する正規表現。例: platform-http:/prefix/.*

string

 

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

3.79. Paho MQTT5

Eclipse Paho MQTT v5 クライアントを使用して MQTT メッセージブローカーと通信します。

3.79.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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.xmlcamel-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-uploadsquarkus.http.body.uploads-directory および quarkus.http.body.delete-uploaded-files-on-end

3.81.3.5. リバースプロキシーの実装

プラットフォーム HTTP コンポーネントはリバースプロキシーとして機能できます。その場合、Exchange.HTTP_URIExchange.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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 の設定方法を説明します。

  1. 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=Quartz
  2. quarkus.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>
  3. 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 データベーステーブルの作成に進みます。

  4. 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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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-httpservlet 等の別の 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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 を使用し、pubSubDeserializeTypePOJO として設定されている場合は、リフレクション用に 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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.87. Saga

Saga EIP を使用して、ルート内でカスタムアクションを実行します。

3.87.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 からダウンロードしていることを確認する必要があります。

ライブラリーファイルの名前は、次に示すように、対象のオペレーティングシステムによって異なります。

Expand
表3.1 必要な SAP ライブラリー
SAP コンポーネントLinux と UNIXWindows

SAP JCo 3

sapjco3.jar

libsapjco3.so

sapjco3.jar

sapjco3.dll

SAP IDoc

sapidoc3.jar

sapidoc3.jar

注記

正しい 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-destinationsap-trfc-destination、および sap-qrfc-destination) は、次の URI オプションをサポートしています。

Expand
名前デフォルト説明

stateful

false

true の場合、このエンドポイントが SAP ステートフルセッションを開始することを指定します

transacted

false

true の場合、このエンドポイントが SAP トランザクションを開始することを指定します

3.88.3.2. RFC サーバーエンドポイントのオプション

SAP RFC サーバーエンドポイント (sap-srfc-server および sap-trfc-server) は、次の URI オプションをサポートしています。

Expand
名前デフォルト説明

stateful

false

true の場合、このエンドポイントが SAP ステートフルセッションを開始することを指定します。

propagateExceptions

false

(sap-trfc-server エンドポイントのみ) true の場合、エクスチェンジの例外ハンドラーではなく、このエンドポイントが SAP の呼び出し元に例外を伝達することを指定します。

3.88.3.3. IDoc List Server エンドポイントのオプション

SAP IDoc List Server エンドポイント (sap-idoclist-server) は、次の URI オプションをサポートしています。

Expand
名前デフォルト説明

stateful

false

true の場合、このエンドポイントが SAP ステートフルセッションを開始することを指定します。

propagateExceptions

false

true の場合、エクスチェンジの例外ハンドラーではなく、このエンドポイントが SAP の呼び出し元に例外を伝搬することを指定します。

3.88.3.4. RFC および IDoc エンドポイントの概要

SAP コンポーネントパッケージは、次の RFC および IDoc エンドポイントを提供します。

sap-srfc-destination

Camel SAP Synchronous Remote Function Call Destination Camel コンポーネント。このエンドポイントは、Camel ルートが SAP システムへのリクエストと SAP システムからのレスポンスの同期配信を必要とする場合に使用する必要があります。

注記

このコンポーネントで使用される sRFC プロトコルは、SAP システムとの間でリクエストとレスポンスを ベストエフォート で配信します。リクエストの送信中に通信エラーが発生した場合、受信側の SAP システムでのリモート関数呼び出しの完了ステータスは 不明 のままです。

sap-trfc-destination

Camel 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-destination

Camel 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-destinationsap-qrfc-destination など) にとって非常に重要であり、アウトバウンドトランザクション RFC 通信を適切に管理するには、Camel ランタイムにインストールする必要があります。ストラテジーが実行時に見つからない場合、Destination RFC Transaction Handlers は Camel ログに警告を発行します。この状況では、アウトバウンドのトランザクション RFC 通信を適切に管理するために、Camel ランタイムを再プロビジョニングして再起動する必要があります。

3.88.4.2.2. ログオンと認証オプション

次の表に、SAP 宛先データストアで宛先を設定するための ログオンオプションと認証 オプションを示します。

Expand

名前

デフォルト値

説明

client

 

SAP クライアント、必須ログオンパラメーター

user

 

ログオンユーザー、パスワードベースの認証用のログオンパラメーター。

aliasUser

 

ログオンユーザーエイリアスは、ログオンユーザーの代わりに使用できます。

userId

 

ABAP AS へのログオンに使用されるユーザー ID。宛先設定が認証に SSO/アサーションチケット、証明書、現在のユーザー、または SNC 環境を使用する場合、JCo ランタイムによって使用されます。ユーザーもユーザー別名も設定されていない場合、ユーザー ID は必須です。この ID は SAP バックエンドに送信されることはなく、JCo ランタイムによってローカルで使用されます。

passwd

 

ログオンパスワード、パスワードベースの認証用のログオンパラメーター。

lang

 

ログオン言語。定義されていない場合は、デフォルトのユーザー言語が使用されます。

mysapsso2

 

指定された SAP Cookie バージョン 2 を、SSO ベースの認証のログオンチケットとして使用します。

x509cert

 

指定された X509 証明書を証明書ベースの認証に使用します。

lcheck

 

最初の呼び出しまで認証を延期する - 1 (有効)。特別な場合にのみ使用されます。

useSapGui

 

表示または非表示の SAP GUI を使用するか、SAP GUI を使用しません。

codePage

 

ログオンパラメーターの変換に使用されるコードページを定義する追加のログオンパラメーター。特別な場合にのみ使用されます。

getsso2

 

ログオン後に SSO チケットを注文すると、取得したチケットは宛先属性で使用できます。

denyInitialPassword

 

1 に設定すると、初期パスワードを使用すると例外が発生します (デフォルトは 0 です)。

3.88.4.2.3. 接続オプション

次の表に、SAP 宛先データストアで宛先を設定するための 接続 オプションを示します。

Expand

名前

デフォルト値

説明

saprouter

 

SAP ルーターの背後にあるシステムに接続するための SAP ルーター文字列。SAP ルーター文字列には、一連の SAP ルーターとそのポート番号が含まれており、(/H/<host>[/S/<port>])+ という形式になっています。

sysnr

 

SAP ABAP アプリケーションサーバーのシステム番号、直接接続に必須。

ashost

 

SAP ABAP アプリケーションサーバー、直接接続に必須。

mshost

 

SAP メッセージサーバー、負荷分散接続の必須プロパティー。

msserv

 

SAP メッセージサーバーポート。負荷分散接続のオプションプロパティー。サービス名 sapmsXXX を解決するために、etc/services のルックアップがオペレーティングシステムのネットワーク層によって実行されます。シンボリックサービス名の代わりにポート番号を使用する場合、ルックアップは実行されず、追加のエントリーは必要ありません。

gwhost

 

アプリケーションサーバーへの接続を確立するために使用する具体的なゲートウェイを指定できます。指定しない場合、アプリケーションサーバーのゲートウェイが使用されます。

gwserv

 

gwhost を使用する場合に設定する必要があります。そのゲートウェイで使用されるポートを指定できます。指定しない場合、アプリケーションサーバーのゲートウェイのポートが使用されます。サービス名 sapgwXXX を解決するために、etc/services のルックアップがオペレーティングシステムのネットワーク層によって実行されます。シンボリックサービス名の代わりにポート番号を使用する場合、ルックアップは実行されず、追加のエントリーは必要ありません。

r3name

 

SAP システムのシステム ID。負荷分散接続の必須プロパティー。

group

 

SAP アプリケーションサーバーのグループ、負荷分散接続の必須プロパティー。

network

LAN

パフォーマンスを最適化するには、JCo とターゲットシステム間のネットワーク品質に応じてこの値を設定します。有効な値は LAN または WAN です (これは高速シリアル化にのみ関連します)。network 設定オプションを WAN に設定すると、速度は遅くなりますがより効率的な圧縮アルゴリズムが使用され、データはさらに圧縮オプションを得るために分析されます。network 設定を LAN に設定すると、非常に高速な圧縮アルゴリズムが使用され、データ分析は非常に基本的なレベルでのみ実行されます。LAN オプションを設定すると、圧縮率はそれほど効率的ではありませんが、ネットワーク転送時間はそれほど重要ではないと見なされます。デフォルト設定は LAN です。

serializationFormat

rowBased

有効な値は、rowBased または columnBased です。シリアル化を高速化するには、columnBased を設定する必要があります。デフォルトのシリアル化設定は rowBased です。

3.88.4.2.4. 接続プールのオプション

次の表に、SAP 宛先データストアで宛先を設定するための 接続プール オプションを示します。

Expand

名前

デフォルト値

説明

peakLimit

0

宛先に対して同時に作成できるアクティブなアウトバウンド接続の最大数。値を 0 にすると、無制限の数のアクティブな接続が許可されます。それ以外の場合、値が jpoolCapacity の値よりも小さい場合は、この値まで自動的に増加されます。デフォルト設定は poolCapacity の値です。または、poolCapacity も指定されていない場合、デフォルトは 0 (無制限) です。

poolCapacity

1

宛先によって開いたままのアイドル状態のアウトバウンド接続の最大数。値 0 は、接続プーリングがないという効果があります (デフォルトは 1 です)。

expirationTime

 

宛先によって内部的に保持されている空き接続を閉じることができるまでの時間 (ミリ秒)。

expirationPeriod

 

宛先が解放された接続の有効期限をチェックするまでのミリ秒単位の期間。

maxGetTime

 

アプリケーションによって最大許容数の接続がすでに割り当てられている場合に、接続を待機する最大時間 (ミリ秒)。

3.88.4.2.5. 安全なネットワーク接続オプション

次の表に、SAP 宛先データストアで宛先を設定するための セキュアなネットワーク オプションを示します。

Expand

名前

デフォルト値

説明

sncMode

 

セキュアなネットワーク接続 (SNC) モード、0 (オフ) または 1 (オン)。

sncPartnername

 

SNC パートナー、例: p:CN=R3, O=XYZ-INC, C=EN

sncQop

 

セキュリティーの SNC レベル、1 から 9

sncMyname

 

独自の SNC 名。環境設定をオーバーライドします。

sncLibrary

 

SNC サービスを提供するライブラリーへのパス。

3.88.4.2.6. リポジトリーオプション

次の表に、SAP 宛先データストアで宛先を設定するための リポジトリー オプションを示します。

Expand

名前

デフォルト値

説明

repositoryDest

 

リポジトリーとして使用される宛先を指定します。

repositoryUser

 

リポジトリーの宛先が設定されておらず、このプロパティーが設定されている場合、リポジトリー呼び出しのユーザーとして使用されます。これにより、リポジトリーの検索に別のユーザーを使用できます。

repositoryPasswd

 

リポジトリーユーザーのパスワード。リポジトリーユーザーを使用する場合は必須です。

repositorySnc

 

(オプション) この宛先に SNC が使用されている場合、このプロパティーが 0 に設定されていれば、リポジトリー接続に対して SNC をオフにすることができます。デフォルト設定は jco.client.snc_mode の値です。特殊な場合のみ。

repositoryRoundtripOptimization

 

RFC_METADATA_GET API を有効にすると、リポジトリーデータが 1 回の往復で提供されます。

1
ABAP システムで RFC_METADATA_GET の使用を有効にします。
0
ABAP システムで RFC_METADATA_GET を無効化します。

プロパティーが設定されていない場合、宛先は最初にリモート呼び出しを実行して、RFC_METADATA_GET が使用可能かどうかを確認します。利用可能な場合、宛先はそれを使用します。

注記: リポジトリーがすでに初期化されている場合 (たとえば、他の宛先で使用されているため)、このプロパティーは効果がありません。通常、このプロパティーは ABAP システムに関連しており、同じ ABAP システムを指すすべての宛先で同じ値を持つ必要があります。バックエンドの前提条件は、ノート 1456826 を参照してください。

3.88.4.2.7. トレース設定オプション

次の表に、SAP 宛先データストアで宛先を設定するための トレース設定 オプションを示します。

Expand

名前

デフォルト値

説明

trace

 

RFC トレースを有効/無効にする (0 または 1)

cpicTrace

 

CPIC トレースを有効/無効にする [0..3]

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. 必須オプション

サーバーデータ設定オブジェクトに必要なオプションは次のとおりです。

Expand

名前

デフォルト値

説明

gwhost

 

サーバー接続を登録するゲートウェイホスト。

gwserv

 

登録を行うことができるポートであるゲートウェイサービス。サービス名 sapgwXXX を解決するために、etc/services のルックアップがオペレーティングシステムのネットワーク層によって実行されます。シンボリックサービス名の代わりにポート番号を使用する場合、ルックアップは実行されず、追加のエントリーは必要ありません。

progid

 

登録が行われたプログラム ID。ゲートウェイおよび ABAP システムの宛先で ID として機能します。

repositoryDestination

 

リモート SAP サーバーでホストされているメタデータリポジトリーからメタデータを取得するためにサーバーが使用できる宛先名を指定します。

connectionCount

 

ゲートウェイに登録する必要がある接続の数。

3.88.4.3.2. 安全なネットワーク接続オプション

サーバーデータ設定オブジェクトの安全なネットワーク接続オプションは次のとおりです。

Expand

名前

デフォルト値

説明

sncMode

 

セキュアなネットワーク接続 (SNC) モード、0 (オフ) または 1 (オン)。

sncQop

 

セキュリティーの SNC レベル、1 から 9

sncMyname

 

サーバーの SNC 名。デフォルトの SNC 名を上書きします。通常、p:CN=JCoServer, O=ACompany, C=EN のようなものです。

sncLib

 

SNC サービスを提供するライブラリーへのパス。このプロパティーが指定されていない場合は、代わりに jco.middleware.snc_lib プロパティーの値が使用されます。

3.88.4.3.3. その他のオプション

サーバーデータ設定オブジェクトのその他のオプションは次のとおりです。

Expand

名前

デフォルト値

説明

saprouter

 

その ABAP システムのゲートウェイでサーバーを登録するときに、ファイアウォールによって保護されているため、SAProuter を介してのみアクセスできるシステムに使用する SAP ルーター文字列。一般的なルーター文字列は /H/firewall.hostname/H/ です。

maxStartupDelay

 

失敗した場合の 2 回の起動試行間の最大時間 (秒単位)。待機時間は、起動に失敗するたびに最初の 1 秒から 2 倍になり、最大値に達するか、サーバーが正常に起動できるようになります。

trace

 

RFC トレースを有効/無効にする (0 または 1)

workerThreadCount

 

サーバー接続で使用されるスレッドの最大数。設定されていない場合、connectionCount の値が workerThreadCount として使用されます。スレッドの最大数は 99 を超えることはできません。

workerThreadMinCount

 

サーバー接続で使用されるスレッドの最小数。設定されていない場合、connectionCount の値が workerThreadMinCount として使用されます。

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 つのプロパティーリストを保持します。

Expand

プロパティー

説明

importParameterList

リストフィールドメタデータオブジェクトのリスト、org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMeataDataImpl。汎用モジュールへの RFC 呼び出しで送信されるパラメーターを指定します。

changingParameterList

リストフィールドメタデータオブジェクトのリスト、org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMeataDataImpl。汎用モジュールとの間の RFC 呼び出しで送受信されるパラメーターを指定します。

exportParameterList

リストフィールドメタデータオブジェクトのリスト、org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMeataDataImpl。汎用モジュールからの RFC 呼び出しで返されるパラメーターを指定します。

tableParameterList

リストフィールドメタデータオブジェクトのリスト、org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMeataDataImpl。汎用モジュールとの間の RFC 呼び出しで送受信されるテーブルパラメーターを指定します。

exceptionList

ABAP 例外メタデータオブジェクトのリスト、org.fusesource.camel.component.sap.model.rfc.impl.AbapExceptionImpl。汎用モジュールの RFC 呼び出しで発生する可能性がある 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 は、パラメーターリスト内のフィールドの名前とタイプを指定します。基本パラメーターフィールド (CHARDATEBCDTIMEBYTENUMFLOATINTINT1INT2DECF16DECF34STRINGXSTRING) の場合、リストフィールドメタデータオブジェクトに設定できる設定プロパティーを次の表に示します。

Expand

名前

デフォルト値

説明

name

-

パラメーターフィールドの名前。

type

-

フィールドのパラメータータイプ。

byteLength

-

非 Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。

unicodeByteLength

-

Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。

decimals

0

フィールド値の 10 進数の数。パラメータータイプ BCD および FLOAT の場合は必須です。

任意

false

true の場合、フィールドはオプションであり、RFC 呼び出しで設定する必要はありません。

すべての基本パラメーターフィールドでは、フィールドメタデータオブジェクトで nametypebyteLength、および unicodeByteLength プロパティーを指定する必要があることに注意してください。さらに、BCDFLOATDECF16、および DECF34 フィールドでは、フィールドメタデータオブジェクトで decimal プロパティーを指定する必要があります。

タイプ TABLE または STRUCTURE の複雑なパラメーターフィールドの場合、次の表に、リストフィールドメタデータオブジェクトに設定できる設定プロパティーを示します。

Expand

名前

デフォルト値

説明

name

-

パラメーターフィールドの名前。

type

-

フィールドのパラメータータイプ。

recordMetaData

-

構造またはテーブルのメタデータ。レコードメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl が渡され、構造またはテーブル行のフィールドが指定されます。

任意

false

true の場合、フィールドはオプションであり、RFC 呼び出しで設定する必要はありません。

注記

すべての複合パラメーターフィールドでは、フィールドメタデータオブジェクトで nametype、および 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 を維持します。これは、ネストされた構造またはテーブル行に存在するパラメーターを指定します。

次の表に、レコードメタデータオブジェクトに設定できる設定プロパティーを示します。

Expand

名前

デフォルト値

説明

name

-

レコードの名前。

recordFieldMetaData

-

レコードフィールドメタデータオブジェクトのリスト、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 コールでの値の適切な転送が妨げられるます。

基本パラメーターフィールド (CHARDATEBCDTIMEBYTENUMFLOATINTINT1INT2DECF16DECF34STRINGXSTRING) の場合、レコードフィールドメタデータオブジェクトに設定できる設定プロパティーを次の表に示します。

Expand

名前

デフォルト値

説明

name

-

パラメーターフィールドの名前。

type

-

フィールドのパラメータータイプ。

byteLength

-

非 Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。

unicodeByteLength

-

Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。

byteOffset

-

非 Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。

unicodeByteOffset

-

Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。

decimals

0

フィールド値の小数点以下の桁数。パラメータータイプ BCD および FLOAT にのみ必要です。

タイプ TABLE または STRUCTURE の複雑なパラメーターフィールドの場合、次の表に、レコードフィールドメタデータオブジェクトに設定できる設定プロパティーを示します。

Expand

名前

デフォルト値

説明

name

-

パラメーターフィールドの名前。

type

-

フィールドのパラメータータイプ。

byteOffset

-

非 Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。

unicodeByteOffset

-

Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。

recordMetaData

-

構造またはテーブルのメタデータ。レコードメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl が渡され、構造またはテーブル行のフィールドが指定されます。

基本レコードフィールドのメタデータの例

次のメタデータ設定は、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 コンポーネントは、次のメッセージヘッダーをサポートしています。

Expand

ヘッダー

説明

CamelSap.scheme

メッセージを処理する最後のエンドポイントの URI スキーム。次の値のいずれかを使用します。sap-srfc-destination

sap-trfc-destination

sap-qrfc-destination

sap-srfc-server

sap-trfc-server

sap-idoc-destination

sap-idoclist-destination

sap-qidoc-destination

sap-qidoclist-destination

sap-idoclist-server

CamelSap.destinationName

メッセージを処理する最後の宛先エンドポイントの宛先名。

CamelSap.serverName

メッセージを処理する最後のサーバーエンドポイントのサーバー名。

CamelSap.queueName

メッセージを処理する最後のキューエンドポイントのキュー名。

CamelSap.rfcName

メッセージを処理する最後の RFC エンドポイントの RFC 名。

CamelSap.idocType

メッセージを処理する最後の IDoc エンドポイントの IDoc タイプ。

CamelSap.idocTypeExtension

メッセージを処理する最後の IDoc エンドポイントの IDoc タイプ拡張 (存在する場合)。

CamelSap.systemRelease

メッセージを処理する最後の IDoc エンドポイントのシステムリリース (存在する場合)。

CamelSap.applicationRelease

メッセージを処理する最後の IDoc エンドポイントのアプリケーションリリース (存在する場合)。

3.88.6. エクスチェンジプロパティー

SAP コンポーネントは、次のエクスチェンジプロパティーを追加します。

Expand

プロパティー

説明

CamelSap.destinationPropertiesMap

エクスチェンジによって検出された各 SAP 宛先のプロパティーを含むマップ。マップは宛先名によってキー付けされ、各エントリーはその宛先の設定プロパティーを含む java.util.Properties オブジェクトです。

CamelSap.serverPropertiesMap

エクスチェンジによって検出された各 SAP サーバーのプロパティーを含むマップ。マップはサーバー名でキー付けされ、各エントリーはそのサーバーの設定プロパティーを含む java.util.Properties オブジェクトです。

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 進数、または文字列のフィールドタイプです。次の表は、構造体オブジェクトに存在する可能性のある基本フィールドのタイプをまとめたものです。

Expand

フィールドタイプ

対応 Java 型

バイト長

Unicode バイト長

小数

説明

CHAR

java.lang.String

1 から 65535

1 から 65535

-

ABAP タイプ 'C': 固定サイズの文字列。

DATE

java.util.Date

8

16

-

ABAP タイプ 'D': 日付 (形式: YYYYMMDD)。

BCD

java.math.BigDecimal

1 から 16

1 から 16

0 から 14

ABAP タイプ 'P': パックされた BCD 番号。BCD 番号には、1 バイトあたり 2 桁が含まれます。

TIME

java.util.Date

6

12

-

ABAP タイプ 'T': 時間 (形式: HHMMSS)。

BYTE

byte[]

1 から 65535

1 から 65535

-

ABAP タイプ 'X': 固定サイズのバイト配列。

NUM

java.lang.String

1 から 65535

1 から 65535

-

ABAP タイプ 'N': 固定サイズの数値文字列。

FLOAT

java.lang.Double

8

8

0 から 15

ABAP タイプ 'F': 浮動小数点数。

INT

java.lang.Integer

4

4

-

ABAP タイプ 'I': 4 バイト整数。

INT2

java.lang.Integer

2

2

-

ABAP タイプ 'S': 2 バイト整数。

INT1

java.lang.Integer

1

1

-

ABAP タイプ 'B': 1 バイト整数。

DECF16

java.match.BigDecimal

8

8

16

ABAP タイプ 'decfloat16': 8 バイトの 10 進浮動小数点数。

DECF34

java.math.BigDecimal

16

16

34

ABAP タイプ 'decfloat34': 16 バイトの 10 進浮動小数点数。

STRING

java.lang.String

8

8

-

ABAP タイプ 'G': 可変長文字列。

XSTRING

byte[]

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. 複雑なフィールドタイプ

複合フィールドは、構造体またはテーブルフィールドタイプのいずれかです。次の表は、これらの複雑なフィールドタイプをまとめたものです。

Expand

フィールドタイプ

対応 Java 型

バイト長

Unicode バイト長

小数

説明

STRUCTURE

org.fusesource.camel.component.sap.model.rfc.Structure

個々のフィールドのバイト長の合計

個々のフィールドの Unicode バイト長の合計

-

ABAP タイプ 'u' および 'v': 異種構造

TABLE

org.fusesource.camel.component.sap.model.rfc.Table

行構造体のバイト長

行構造体の 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&gt; {
    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 オブジェクトに設定できる制御レコード属性を示します。

Expand
表3.2 IDoc ドキュメントの属性
属性長さSAP フィールド説明

archiveKey

70

ARCKEY

EDI アーカイブキー

client

3

MANDT

クライアント

creationDate

8

CREDAT

IDoc が作成された日付

creationTime

6

CRETIM

IDoc が作成された時間

direction

1

DIRECT

方向

eDIMessage

14

REFMES

メッセージ参照

eDIMessageGroup

14

REFGRP

メッセージグループへの参照

eDIMessageType

6

STDMES

EDI メッセージタイプ

eDIStandardFlag

1

STD

EDI 規格

eDIStandardVersion

6

STDVRS

EDI 規格のバージョン

eDITransmissionFile

14

REFINT

エクスチェンジファイルへの参照

iDocCompoundType

8

DOCTYP

IDoc タイプ

iDocNumber

16

DOCNUM

IDoc 番号

iDocSAPRelease

4

DOCREL

IDoc の SAP リリース

iDocType

30

IDOCTP

基本 IDoc タイプの名前

iDocTypeExtension

30

CIMTYP

拡張タイプの名前

messageCode

3

MESCOD

論理メッセージコード

messageFunction

3

MESFCT

論理メッセージ機能

messageType

30

MESTYP

論理メッセージタイプ

outputMode

1

OUTMOD

出力モード

recipientAddress

10

RCVSAD

受信者アドレス (SADR)

recipientLogicalAddress

70

RCVLAD

受信者の論理アドレス

recipientPartnerFunction

2

RCVPFC

受信者のパートナー機能

recipientPartnerNumber

10

RCVPRN

受信機のパートナー番号

recipientPartnerType

2

RCVPRT

受信者のパートナータイプ

recipientPort

10

RCVPOR

受信側ポート (SAP システム、EDI サブシステム)

senderAddress

 

SNDSAD

送信者アドレス (SADR)

senderLogicalAddress

70

SNDLAD

送信者の論理アドレス

senderPartnerFunction

2

SNDPFC

差出人のパートナー機能

senderPartnerNumber

10

SNDPRN

送信者のパートナー番号

senderPartnerType

2

SNDPRT

送信者のパートナータイプ

senderPort

10

SNDPOR

送信側ポート (SAP システム、EDI サブシステム)

serialization

20

SERIAL

EDI/ALE: シリアル化フィールド

status

2

STATUS

IDoc のステータス

testFlag

1

テスト

テストフラグ

3.88.9.1. Java でドキュメント属性を設定する

Java で制御レコード属性を設定する場合、Java Bean プロパティーの通常の規則に従います。つまり、属性値を取得および設定するために、getName および setName メソッドを介して name 属性にアクセスできます。たとえば、iDocTypeiDocTypeExtension、および messageType 属性は、Document オブジェクトで次のように設定できます。

// Java
document.setIDocType("FLCUSTOMER_CREATEFROMDATA01");
document.setIDocTypeExtension("");
document.setMessageType("FLCUSTOMER_CREATEFROMDATA");
3.88.9.2. XML でドキュメント属性を設定する

XML で制御レコード属性を設定する場合、idoc:Document 要素に属性を設定する必要があります。たとえば、iDocTypeiDocTypeExtension および 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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 設定

Expand
設定プロパティーデフォルト

lock quarkus.camel.servlet.url-patterns

CamelServlet にアクセスできるパスパターンのコンマ区切りリスト。パスパターンの例: /*/services/*

string

 

lock quarkus.camel.servlet.servlet-class

url-patterns に一致するパスを提供するサーブレットクラスの完全修飾名。

string

org.apache.camel.component.servlet.CamelHttpTransportServlet

lock quarkus.camel.servlet.servlet-name

web.xml ファイル、または jakarta.servlet.annotation.WebServlet#name() アノテーションで定義される servletName。

string

CamelServlet

lock quarkus.camel.servlet."named-servlets".url-patterns

CamelServlet にアクセスできるパスパターンのコンマ区切りリスト。パスパターンの例: /*/services/*

string

 

lock quarkus.camel.servlet."named-servlets".servlet-class

url-patterns に一致するパスを提供するサーブレットクラスの完全修飾名。

string

org.apache.camel.component.servlet.CamelHttpTransportServlet

lock quarkus.camel.servlet."named-servlets".servlet-name

web.xml ファイル、または jakarta.servlet.annotation.WebServlet#name() アノテーションで定義される servletName。

string

CamelServlet

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

3.93. Slack

Slack との間でメッセージを送受信します。

3.93.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.94. SNMP

トラップを受信し、SNMP (Simple Network Management Protocol) 対応デバイスをポーリングします。

3.94.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.97. Splunk HEC

splunk コンポーネントを使用すると、HTTP Event Collector を使用して Splunk でイベントを公開できます。

3.97.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

3.100. Timer

java.util.Timer を使用して、指定された間隔でメッセージを生成します。

3.100.1. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 オプションはネイティブモードではサポートされていません。これは、CamelContextExchange などのセキュリティーに敏感な 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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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. 含まれるもの

使用方法と設定の詳細は、上記リンクを参照してください。

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 のエクステンション機能 は、次の場合にのみ正しく機能します。

  1. 安全な処理が無効になっています
  2. 関数は別の jar で定義されています
  3. 関数は、ネイティブビルドフェーズ中に拡張されます。たとえば、リフレクション用に登録できます。
@RegisterForReflection(targets = { my.Functions.class })
public class FunctionsConfiguration {
}
注記

XSLT ソース URI のコンテンツは、ビルド時に解析され、Java クラスにコンパイルされます。これらの Java クラスは、実行時の XSLT 情報の唯一のソースです。XSLT ソースファイルは、アプリケーションアーカイブにまったく含まれていない場合があります。

Expand
設定プロパティーデフォルト

lock quarkus.camel.xslt.sources

コンパイルするテンプレートのコンマ区切りリスト。

string

 

lock quarkus.camel.xslt.package-name

生成されたクラスのパッケージ名。

string

org.apache.camel.quarkus.component.xslt.generated

lock quarkus.camel.xslt.features

TransformerFactory の機能。

Map<String,Boolean>

 

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

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

以下は、このプロジェクトによって作成されたエクステンションのリストです。エクステンションの使用方法、設定、既知の制限事項は、エクステンション名の下のリンクを参照してください。

Expand
Quarkus CXF エクステンションサポートレベル最小バージョンサポートされる標準

Quarkus CXF
quarkus-cxf

Stable

0.1.0

JAX-WSJAXBWS-AddressingWS-PolicyMTOM

Quarkus CXF Metrics Feature
quarkus-cxf-rt-features-metrics

Stable

0.14.0

 

Quarkus CXF OpenTelemetry
quarkus-cxf-integration-tracing-opentelemetry

Stable

2.7.0

 

Quarkus CXF WS-Security
quarkus-cxf-rt-ws-security

Stable

0.14.0

WS-SecurityWS-SecurityPolicy

Quarkus CXF WS-ReliableMessaging
quarkus-cxf-rt-ws-rm

Stable

1.5.3

WS-ReliableMessaging

Quarkus CXF セキュリティートークンサービス (STS)
quarkus-cxf-services-sts

Stable

1.5.3

WS-Trust

Quarkus CXF HTTP 非同期トランスポート
quarkus-cxf-rt-transports-http-hc5

Stable

1.1.0

 

Quarkus CXF XJC Plugins
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 トランスポート は以下のみです。

4.2.4. ツール

4.2.5. サポート対象の SOAP バインディング

すべての CXF WSDL バインディング がサポートされます。SOAP 1.2 に切り替える場合、または MTOM を追加する場合は、quarkus.cxf.[client|endpoint]."name".soap-binding を次のいずれかの値に設定します。

Expand
バインディングプロパティー値

SOAP 1.1 (デフォルト)

http://schemas.xmlsoap.org/wsdl/soap/http

SOAP 1.2

http://www.w3.org/2003/05/soap/bindings/HTTP/

MTOM を備えた SOAP 1.1

http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true

MTOM を備えた SOAP 1.2

http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true

4.3. サポート対象外の CXF モジュール

以下は、Quarkus CXF で現在サポートされていない CXF モジュールのリストと、考えられる代替手段、および特定のモジュールがサポートされていない理由です。

Expand
CXF モジュール代替モジュール

JAX-RS
cxf-rt-frontend-jaxrs
cxf-rt-rs-client

Use Quarkus RESTEasy

Fediz

Use Quarkus OpenID Connect

Aegis

JAXB および JAX-WS を使用する

DOSGI
Karaf

 

JiBX

JAXB および JAX-WS を使用する

ローカルトランスポート
cxf-rt-transports-local

HTTP トランスポートを使用する

JMS トランスポート
cxf-rt-transports-jms

HTTP トランスポートを使用する

JBI
cxf-rt-transports-jbi
cxf-rt-bindings-jbi

HTTP トランスポートの使用は CXF では非推奨となっています

UDP トランスポート
cxf-rt-transports-udp

HTTP トランスポートを使用する

Coloc トランスポート

HTTP トランスポートを使用する

WebSocket トランスポート
cxf-rt-transports-websocket

HTTP トランスポートを使用する

クラスタリング
cxf-rt-features-clustering

Planned

CORBA cxf-rt-bindings-corba

JAX-WS を使用する

SDO databinding
cxf-rt-databinding-sdo

 

XMLBeans

CXF では非推奨となっています

Javascript フロントエンド

JAX-WS を使用する

JCA トランスポート

HTTP トランスポートを使用する

WS-Transfer ランタイム
cxf-rt-ws-transfer

 

スロットル調整
cxf-rt-features-throttling

ロードバランサーを使用する

4.4. サポート対象の CXF アノテーション

以下は、Quarkus の CXF アノテーション のステータスです。特に明記されていない限り、io.quarkiverse.cxf:quarkus-cxf 経由でサポートされています。

Expand
アノテーションステータス

@org.apache.cxf.feature.Features

サポート対象

@org.apache.cxf.interceptor.InInterceptors

サポート対象

@org.apache.cxf.interceptor.OutInterceptors

サポート対象

@org.apache.cxf.interceptor.OutFaultInterceptors

サポート対象

@org.apache.cxf.interceptor.InFaultInterceptors

サポート対象

@org.apache.cxf.annotations.WSDLDocumentation

サポート対象

@org.apache.cxf.annotations.WSDLDocumentationCollection

サポート対象

@org.apache.cxf.annotations.SchemaValidation

サポート対象

@org.apache.cxf.annotations.DataBinding

デフォルト値 org.apache.cxf.jaxb.JAXBDataBinding のみがサポート対象

@org.apache.cxf.ext.logging.Logging

サポート対象

@org.apache.cxf.annotations.GZIP

サポート対象

@org.apache.cxf.annotations.FastInfoset

com.sun.xml.fastinfoset:FastInfoset 依存関係を介してサポートされます

@org.apache.cxf.annotations.EndpointProperty

サポート対象

@org.apache.cxf.annotations.EndpointProperties

サポート対象

@org.apache.cxf.annotations.Policy

サポート対象

@org.apache.cxf.annotations.Policies

サポート対象

@org.apache.cxf.annotations.UseAsyncMethod

サポート対象

第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. 設定

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

Expand
設定プロパティーデフォルト

lock quarkus.cxf.codegen.wsdl2java.enabled

boolean

true

true の場合、デフォルトまたはカスタム定義された場所で WSDL リソースが見つかるたびに wsdl2java コード生成が実行されます。それ以外の場合は wsdl2java は実行されません。

環境変数:QUARKUS_CXF_CODEGEN_WSDL2JAVA_ENABLED
:Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.codegen.wsdl2java.includes

string のリスト

 

wsdl2java ツールで処理する WSDL ファイルを選択するための glob パターンのコンマ区切りリスト。パスは、現在の Maven または Gradle モジュールの src/main/resources または src/test/resources ディレクトリーを基準とします。glob 構文は io.quarkus.util.GlobUtil で指定されます。

例:

  • calculator.wsdl,fruits.wsdl は、現在の Maven または Gradle モジュールの src/main/resources/calculator.wsdl および src/main/resources/fruits.wsdl と一致しますが、src/main/resources/subdir/calculator.wsdl のようなものとは一致しません。
  • my-*-service.wsdl は、src/main/resources/my-foo-service.wsdl および src/main/resources/my-bar-service.wsdl と一致します。
  • **.wsdl は、上記のいずれかに一致します。一致する WSDL ファイルごとに個別の wsdl2java 実行が行われます。各 WSDL ファイルに異なる additional-params が必要な場合は、それぞれに個別の名前付きパラメーターセットを定義する必要があります。以下に例を示します。
# 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
ファイル拡張子

.wsdl 以外のファイルの拡張子は、通常のビルドでは機能しますが、一致するファイルの変更は Quarkus 開発モードで監視される可能性があります。常に .wsdl 拡張子を使用することを推奨します。

このオプションにはデフォルト値がないため、wsdl2java コード生成はデフォルトで無効になっています。

include を設定せずに quarkus.cxf.codegen.wsdl2java.my-name.excludes を指定すると、ビルド時にエラーが発生します。

quarkus.cxf.codegen.wsdl2java.includesquarkus.cxf.codegen.wsdl2java.[whatever-name].includes によって選択されたファイルセットが重複していないことを確認します。そうでない場合、ビルド時に例外が発生します。

includeexcludes が選択した src/main/resources からのファイルは、ネイティブイメージに自動的に含められるため、quarkus.cxf.wsdl-path (非推奨) または quarkus.native.resources.includes/excludes 経由で追加する必要はありません。

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_INCLUDES
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.codegen.wsdl2java.excludes

string のリスト

 

wsdl2java ツールで 処理しない WSDL ファイルを選択するためのパスパターンのコンマ区切りリスト。パスは、現在の Maven または Gradle モジュールの src/main/resources または src/test/resources ディレクトリーを基準とします。構文は include と同じです。

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_EXCLUDES
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.codegen.wsdl2java.output-directory

string

 

生成されたファイルが書き込まれるディレクトリー。現在の Maven または Gradle モジュールディレクトリーに対する絶対ディレクトリーまたは相対ディレクトリーです。

デフォルト値はビルドツールに依存します。Maven の場合、通常は target/generated-sources/wsdl2java ですが、Gradle の場合は build/classes/java/quarkus-generated-sources/wsdl2java です。

Quarkus ツールでは、指定されたビルドツールのソースフォルダーとしてデフォルト値を設定することしかできません。これをカスタムパスに設定する場合、ユーザーが責任を持って、ビルドツールがパスをソースフォルダーとして認識していることを確認してください。

また、Maven の target ディレクトリー外のパス、または Gradle の build ディレクトリー外のパスを選択する場合は、以前のビルドによって生成された古いリソースをクリーンアップするように注意する必要があります。たとえば、package-names オプションの値を org.foo から org.bar に変更する場合は、古いパッケージ org.foo の削除に注意する必要があります。

これはオプション -d として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_OUTPUT_DIRECTORY
Quarkus CXF: 2.6.0 以降

lock quarkus.cxf.codegen.wsdl2java.package-names

string のリスト

 

トークンのコンマ区切りリスト。各トークンは次のいずれかになります。

  • Java ソースファイルを生成する Java パッケージ
  • namespaceURI=packageName という形式の文字列 - この場合、指定された名前空間 URI からのエンティティーは、指定された Java パッケージの下に生成されます。

これはオプション -p として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_PACKAGE_NAMES
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.exclude-namespace-uris

string のリスト

 

Java コードを生成するときに無視する WSDL スキーマ名前空間 URI のコンマ区切りリスト。

これはオプション -nexclude として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_EXCLUDE_NAMESPACE_URIS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.service-name

string

 

生成されたコードに使用する WSDL サービス名。

これはオプション -sn として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_SERVICE_NAME
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.bindings

string のリスト

 

JAXWS または JAXB バインディングファイルまたは XMLBeans コンテキストファイルを指すパスのリスト。現在の Maven または Gradle モジュールに対する絶対パスまたは相対パス。

これはオプション -b として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_BINDINGS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.validate

boolean

false

true の場合、WSDL は処理前に検証されます。それ以外の場合、WSDL は検証されません。

これはオプション -validate として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_VALIDATE
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.wsdl-location

string

 

@WebServiceClient アノテーションの wsdlLocation プロパティーの値を指定します。

これはオプション -wsdlLocation として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_WSDL_LOCATION
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.xjc

string のリスト

 

有効にする XJC 拡張機能のコンマ区切りリスト。以下のエクステンションは、io.quarkiverse.cxf:quarkus-cxf-xjc-plugins 依存関係で利用できます。

  • bg - ブール型フィールドに対して isX() の代わりに getX() メソッドを生成します
  • bgi - ブール型フィールドの isX()getX() メソッドの両方を生成します
  • dv - 要素/属性からマップされたフィールドをデフォルト値で初期化します
  • javadoc - xsd:documentation に基づいて JavaDoc を生成します
  • property-listener - プロパティーリスナーと、プロパティー変更イベントをトリガーするためのコードを setter メソッドに追加します
  • ts - toString() メソッドを生成します
  • wsdlextension - ルートクラスに WSDL 拡張メソッドを生成します

これらの値は、-wsdl2java オプション -xjc-Xbg-xjc-Xbgi-xjc-Xdv-xjc-Xjavadoc-xjc-Xproperty-listener-xjc-Xts、および -xjc-Xwsdlextension にそれぞれ対応します。

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_XJC
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.exception-super

string

java.lang.Exception

wsdl:fault 要素から生成された Fault Bean のスーパークラスとして使用する完全修飾クラス名

これはオプション -exceptionSuper として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_EXCEPTION_SUPER
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.async-methods

string のリスト

 

非同期兄弟メソッドを生成する SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの enableAsyncMapping に似ています。

これはオプション -asyncMethods として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ASYNC_METHODS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.bare-methods

string のリスト

 

ラッパースタイルの兄弟メソッドを生成する SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの enableWrapperStyle に似ています。

これはオプション -bareMethods として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_BARE_METHODS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.mime-methods

string のリスト

 

mime:content マッピングを有効にする SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの enableMIMEContent に類似しています。

これはオプション -mimeMethods として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_MIME_METHODS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java.additional-params

string のリスト

 

include および excludes によって選択されたファイルとともに、CXF wsdl2java ツールに渡される追加のコマンドラインパラメーターのコンマ区切りリスト。例: -keep,-dex,false。サポートされているすべてのオプションは、wsdl2java のドキュメント を確認してください。

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ADDITIONAL_PARAMS
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws.enabled

boolean

true

true の場合、includes および excludes オプションによって選択された Java クラスがあるたびに java2ws WSDL 生成が実行されます。それ以外の場合、java2ws は実行されません。

環境変数: QUARKUS_CXF_JAVA2WS_ENABLED
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws.includes

string のリスト

 

java2ws ツールで処理するクラス名を選択するための glob パターンのコンマ区切りリスト。glob 構文は io.quarkus.util.GlobUtil で指定されます。パターンは、org.acme.MyClass などの完全修飾クラス名と照合されます。

includesexcludes が適用されるクラス名の範囲は、次のように定義されます。1.Jandex で表示される クラスのみが考慮されます。2. それらの中から、@WebService でアノテーションが付けられたものだけが選択されます。

例:

アプリケーションに @WebService アノテーションが付けられた 2 つのクラスが含まれており、その両方が Jandex で表示されるとします。それらの名前は org.foo.FruitWebServiceorg.bar.HelloWebService です。

そのような場合:

  • quarkus.cxf.java2ws.includes = **.*WebService は、両方のクラス名に一致します
  • quarkus.cxf.java2ws.includes = org.foo.*org.foo.FruitWebService のみに一致します。一致するクラス名ごとに個別の java2ws 実行が行われます。クラスごとに異なる additional-params が必要な場合は、クラスごとに個別の名前付きパラメーターセットを定義することを推奨します。以下に例を示します。
# Parameters for the foo package
quarkus.cxf.java2ws.foo-params.includes = org.foo.*
quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService
# Parameters for the bar package
quarkus.cxf.java2ws.bar-params.includes = org.bar.*
quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService

このオプションにはデフォルト値がないため、java2ws WSDL 生成はデフォルトで無効になっています。

include を設定せずに quarkus.cxf.java2ws.excludes を指定すると、ビルド時にエラーが発生します。

quarkus.cxf.java2ws.includesquarkus.cxf.java2ws.[whatever-name].includes によって選択されたクラス名が重複していないことを確認してください。そうでない場合、ビルド時に例外が発生します。

生成された WSDL ファイルをネイティブイメージに含める場合は、quarkus.native.resources.includes/excludes を使用して追加する必要があります。

環境変数: QUARKUS_CXF_JAVA2WS_INCLUDES
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws.excludes

string のリスト

 

java2ws ツールで 処理しない Java クラス名を選択するための glob パターンのコンマ区切りリスト。構文は include と同じです。

環境変数: QUARKUS_CXF_JAVA2WS_EXCLUDES
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws.additional-params

string のリスト

 

include および excludes によって選択されたファイルとともに CXF java2ws ツールに渡される追加のコマンドラインパラメーターのコンマ区切りリスト。例: -portname,12345。サポートされているすべてのオプションは、java2ws のドキュメント を確認してください。

サポートされているオプション

現在、Java からの WSDL の生成に関連するオプションのみがサポートされています。

環境変数: QUARKUS_CXF_JAVA2WS_ADDITIONAL_PARAMS
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws.wsdl-name-template

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

生成される WSDL ファイルの名前のテンプレート。

テンプレートで使用できるプレースホルダーは 4 つあります。

  • %SIMPLE_CLASS_NAME% - 生成元の Java クラスの単純クラス名
  • %FULLY_QUALIFIED_CLASS_NAME% - 生成する完全修飾名。ドットはすべてアンダースコアに置き換えられます。
  • %TARGET_DIR% - 現在のビルドツールの現在のモジュールのターゲットディレクトリー。通常、Maven の場合は target、Gradle の場合は build です。
  • %CLASSES_DIR% - 現在のビルドツールの現在のモジュールのコンパイラー出力ディレクトリー。通常、Maven の場合は target/classes、Gradle の場合は build/classes です。

環境変数: QUARKUS_CXF_JAVA2WS_WSDL_NAME_TEMPLATE
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.path

string

/services

CXF リソースのデフォルトパス。

以前のバージョン

Quarkus CXF バージョン 2.0.0 より前のデフォルト値は / でした。

環境変数: QUARKUS_CXF_PATH
Quarkus CXF: 1.0.0 以降

lock quarkus.cxf.min-chunk-size

int

128

データの書き込み時に割り当てられるメモリーチャンクのサイズ (バイト単位)。

これは非常に高度な設定であり、アプリケーションの出力 IO 操作にどのように影響するかを正確に理解している場合に限り設定してください。

環境変数: QUARKUS_CXF_MIN_CHUNK_SIZE
Quarkus CXF: 2.6.0 以降

lock quarkus.cxf.output-buffer-size

int

8191

出力ストリームレスポンスバッファーのサイズ (バイト単位)。レスポンスがこれより大きく、content-length が指定されていない場合、レスポンスはチャンク化されます。

この値を大きくすると、メモリー使用量は増えますが、レスポンスが大きい場合のパフォーマンスがわずかに向上する可能性があります。

環境変数: QUARKUS_CXF_OUTPUT_BUFFER_SIZE
Quarkus CXF: 2.6.0 以降

lock quarkus.cxf.http-conduit-factory

QuarkusCXFDefaultCXFDefaultHttpClientHTTPConduitFactoryURLConnectionHTTPConduitFactory

 

quarkus.cxf.client."client-name".http-conduit-factory を介してこの設定をオーバーライドするクライアントを除くすべてのクライアントに対して HTTPConduitFactory 実装を選択します。

  • QuarkusCXFDefault (デフォルト): io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 がクラスパスに存在する場合、その HTTPConduitFactory 実装が使用されます。それ以外の場合、この値は URLConnectionHTTPConduitFactory に相当します (CXF で #992 の問題が解決された場合は変更される可能性があります)。
  • CXFDefault: CXF が HTTPConduitFactory 実装を選択します。
  • HttpClientHTTPConduitFactory: HTTPConduitFactory は、常に org.apache.cxf.transport.http.HttpClientHTTPConduit を返す実装に設定されます。基盤となる HTTP クライアントとして、java.net.http.HttpClient が使用されます。
  • URLConnectionHTTPConduitFactory: HTTPConduitFactory は、常に org.apache.cxf.transport.http.URLConnectionHTTPConduit を返す実装に設定されます。基盤となる HTTP クライアントとして、java.net.HttpURLConnection を使用します。

環境変数: QUARKUS_CXF_HTTP_CONDUIT_FACTORY
Quarkus CXF: 2.3.0 以降

quarkus.cxf.decoupled-endpoint-base

string

 

quarkus.cxf.client."client-name".decoupled-endpoint の接頭辞として使用する URI ベース。通常は、次のように設定します。

quarkus.cxf.decoupled-endpoint-base = https://api.example.com:${quarkus.http.ssl-port}${quarkus.cxf.path}
# or for plain HTTP
quarkus.cxf.decoupled-endpoint-base = http://api.example.com:${quarkus.http.port}${quarkus.cxf.path}

HTTP ハンドラー内から WS クライアントを呼び出す場合は、このオプションは指定せず、代わりに org.apache.cxf.ws.addressing.decoupled.endpoint.base キーを使用して WS クライアントのリクエストコンテキストで動的に設定できます。RESTeasy ハンドラーメソッドからこれを行う方法の例を次に示します。

import java.util.Map;
import jakarta.inject.Inject;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.UriInfo;
import jakarta.xml.ws.BindingProvider;
import io.quarkiverse.cxf.annotation.CXFClient;
import org.eclipse.microprofile.config.inject.ConfigProperty;

@Path("/my-rest")
public class MyRestEasyResource {

    @Inject
    @CXFClient("hello")
    HelloService helloService;

    @ConfigProperty(name = "quarkus.cxf.path")
                     String quarkusCxfPath;

    @POST
    @Path("/hello")
    @Produces(MediaType.TEXT_PLAIN)
        public String hello(String body, @Context UriInfo uriInfo) throws IOException {

        // You may consider doing this only once if you are sure that your service is accessed
        // through a single hostname
        String decoupledEndpointBase = uriInfo.getBaseUriBuilder().path(quarkusCxfPath);
        Map>String, Object< requestContext = ((BindingProvider)
        helloService).getRequestContext();
        requestContext.put("org.apache.cxf.ws.addressing.decoupled.endpoint.base",
        decoupledEndpointBase);

        return wsrmHelloService.hello(body);
    }
}

Environment variable: QUARKUS_CXF_DECOUPLED_ENDPOINT_BASE
Quarkus CXF: 2.7.0 以降

quarkus.cxf.logging.enabled-for

clientsservicesbothnone

none

メッセージロギングを有効にする対象 (クライアント、サービス、両方、該当なし) を指定します。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.enabled または quarkus.cxf.client."client-name".logging.enabled を使用して、クライアントまたはサービスエンドポイントごとに上書きできます。

環境変数: QUARKUS_CXF_LOGGING_ENABLED_FOR
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.pretty

boolean

false

true の場合、XML 要素がログ内でインデントされます。そうでない場合は、インデントされずに表示されます。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.pretty または quarkus.cxf.client."client-name".logging.pretty を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_PRETTY
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.limit

int

49152

ログ内で切り捨てられるメッセージの長さ (バイト単位)。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.limit または quarkus.cxf.client."client-name".logging.limit を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_LIMIT
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.in-mem-threshold

long

-1

ディスクに書き込まれるメッセージの長さ (バイト単位)。-1 は無制限を意味します。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.in-mem-threshold または quarkus.cxf.client."client-name".logging.in-mem-threshold を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_IN_MEM_THRESHOLD
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.log-binary

boolean

false

true の場合はバイナリーペイロードがログに記録され、そうでない場合は記録されません。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.log-binary または quarkus.cxf.client."client-name".logging.log-binary を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_LOG_BINARY
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.log-multipart

boolean

true

true の場合はマルチパートペイロードがログに記録され、そうでない場合は記録されません。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.log-multipart または quarkus.cxf.client."client-name".logging.log-multipart を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_LOG_MULTIPART
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.verbose

boolean

true

true の場合は詳細なロギングが有効になり、そうでない場合は有効になりません。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.verbose または quarkus.cxf.client."client-name".logging.verbose を使用して、クライアントまたはサービスエンドポイントごとに上書きできます。

環境変数: QUARKUS_CXF_LOGGING_VERBOSE
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.in-binary-content-media-types

string のリスト

 

LoggingInInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。この設定は、quarkus.cxf.endpoint."/endpoint-path".logging.in-binary-content-media-types または quarkus.cxf.client."client-name".logging.in-binary-content-media-types を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_IN_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.out-binary-content-media-types

string のリスト

 

LoggingOutInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。この設定は、quarkus.cxf.endpoint."/endpoint-path".logging.out-binary-content-media-types または quarkus.cxf.client."client-name".logging.out-binary-content-media-types を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_OUT_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.binary-content-media-types

string のリスト

 

LoggingOutInterceptor および LoggingInInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.binary-content-media-types または quarkus.cxf.client."client-name".logging.binary-content-media-types を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.sensitive-element-names

string のリスト

 

ログでマスクされる機密情報を含む XML 要素のコンマ区切りリスト。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.sensitive-element-names または quarkus.cxf.client."client-name".logging.sensitive-element-names を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_SENSITIVE_ELEMENT_NAMES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.logging.sensitive-protocol-header-names

string のリスト

 

ログでマスクされる機密情報を含むプロトコルヘッダーのコンマ区切りリスト。この設定は quarkus.cxf.endpoint."/endpoint-path".logging.sensitive-protocol-header-names または quarkus.cxf.client."client-name".logging.sensitive-protocol-header-names を使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_LOGGING_SENSITIVE_PROTOCOL_HEADER_NAMES
Quarkus CXF: 2.6.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".includes

string のリスト

 

wsdl2java ツールで処理する WSDL ファイルを選択するための glob パターンのコンマ区切りリスト。パスは、現在の Maven または Gradle モジュールの src/main/resources または src/test/resources ディレクトリーを基準とします。glob 構文は io.quarkus.util.GlobUtil で指定されます。

例:

  • calculator.wsdl,fruits.wsdl は、現在の Maven または Gradle モジュールの src/main/resources/calculator.wsdl および src/main/resources/fruits.wsdl と一致しますが、src/main/resources/subdir/calculator.wsdl のようなものとは一致しません。
  • my-*-service.wsdl は、src/main/resources/my-foo-service.wsdl および src/main/resources/my-bar-service.wsdl と一致します。
  • **.wsdl は、上記のいずれかに一致します。一致する WSDL ファイルごとに個別の wsdl2java 実行が行われます。各 WSDL ファイルに異なる additional-params が必要な場合は、それぞれに個別の名前付きパラメーターセットを定義する必要があります。以下に例を示します。
# 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
ファイル拡張子

.wsdl 以外のファイルの拡張子は、通常のビルドでは機能しますが、一致するファイルの変更は Quarkus 開発モードで監視される可能性があります。常に .wsdl 拡張子を使用することを推奨します。

このオプションにはデフォルト値がないため、wsdl2java コード生成はデフォルトで無効になっています。

include を設定せずに quarkus.cxf.codegen.wsdl2java.my-name.excludes を指定すると、ビルド時にエラーが発生します。

quarkus.cxf.codegen.wsdl2java.includesquarkus.cxf.codegen.wsdl2java.[whatever-name].includes によって選択されたファイルセットが重複していないことを確認します。そうでない場合、ビルド時に例外が発生します。

includeexcludes が選択した src/main/resources からのファイルは、ネイティブイメージに自動的に含められるため、quarkus.cxf.wsdl-path (非推奨) または quarkus.native.resources.includes/excludes 経由で追加する必要はありません。

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__INCLUDES
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".excludes

string のリスト

 

wsdl2java ツールで 処理しない WSDL ファイルを選択するためのパスパターンのコンマ区切りリスト。パスは、現在の Maven または Gradle モジュールの src/main/resources または src/test/resources ディレクトリーを基準とします。構文は include と同じです。

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__EXCLUDES
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".output-directory

string

 

生成されたファイルが書き込まれるディレクトリー。現在の Maven または Gradle モジュールディレクトリーに対する絶対ディレクトリーまたは相対ディレクトリーです。

デフォルト値はビルドツールに依存します。Maven の場合、通常は target/generated-sources/wsdl2java ですが、Gradle の場合は build/classes/java/quarkus-generated-sources/wsdl2java です。

Quarkus ツールでは、指定されたビルドツールのソースフォルダーとしてデフォルト値を設定することしかできません。これをカスタムパスに設定する場合、ユーザーが責任を持って、ビルドツールがパスをソースフォルダーとして認識していることを確認してください。

また、Maven の target ディレクトリー外のパス、または Gradle の build ディレクトリー外のパスを選択する場合は、以前のビルドによって生成された古いリソースをクリーンアップするように注意する必要があります。たとえば、package-names オプションの値を org.foo から org.bar に変更する場合は、古いパッケージ org.foo の削除に注意する必要があります。

これはオプション -d として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__OUTPUT_DIRECTORY
Quarkus CXF: 2.6.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".package-names

string のリスト

 

トークンのコンマ区切りリスト。各トークンは次のいずれかになります。

  • Java ソースファイルを生成する Java パッケージ
  • namespaceURI=packageName という形式の文字列 - この場合、指定された名前空間 URI からのエンティティーは、指定された Java パッケージの下に生成されます。

これはオプション -p として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__PACKAGE_NAMES
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".exclude-namespace-uris

string のリスト

 

Java コードを生成するときに無視する WSDL スキーマ名前空間 URI のコンマ区切りリスト。

これはオプション -nexclude として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__EXCLUDE_NAMESPACE_URIS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".service-name

string

 

生成されたコードに使用する WSDL サービス名。

これはオプション -sn として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__SERVICE_NAME
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".bindings

string のリスト

 

JAXWS または JAXB バインディングファイルまたは XMLBeans コンテキストファイルを指すパスのリスト。現在の Maven または Gradle モジュールに対する絶対パスまたは相対パス。

これはオプション -b として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__BINDINGS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".validate

boolean

false

true の場合、WSDL は処理前に検証されます。それ以外の場合、WSDL は検証されません。

これはオプション -validate として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__VALIDATE
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".wsdl-location

string

 

@WebServiceClient アノテーションの wsdlLocation プロパティーの値を指定します。

これはオプション -wsdlLocation として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__WSDL_LOCATION
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".xjc

string のリスト

 

有効にする XJC 拡張機能のコンマ区切りリスト。以下のエクステンションは、io.quarkiverse.cxf:quarkus-cxf-xjc-plugins 依存関係で利用できます。

  • bg - ブール型フィールドに対して isX() の代わりに getX() メソッドを生成します
  • bgi - ブール型フィールドの isX()getX() メソッドの両方を生成します
  • dv - 要素/属性からマップされたフィールドをデフォルト値で初期化します
  • javadoc - xsd:documentation に基づいて JavaDoc を生成します
  • property-listener - プロパティーリスナーと、プロパティー変更イベントをトリガーするためのコードを setter メソッドに追加します
  • ts - toString() メソッドを生成します
  • wsdlextension - ルートクラスに WSDL 拡張メソッドを生成します

これらの値は、-wsdl2java オプション -xjc-Xbg-xjc-Xbgi-xjc-Xdv-xjc-Xjavadoc-xjc-Xproperty-listener-xjc-Xts、および -xjc-Xwsdlextension にそれぞれ対応します。

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__XJC
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".exception-super

string

java.lang.Exception

wsdl:fault 要素から生成された Fault Bean のスーパークラスとして使用する完全修飾クラス名

これはオプション -exceptionSuper として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__EXCEPTION_SUPER
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".async-methods

string のリスト

 

非同期兄弟メソッドを生成する SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの enableAsyncMapping に似ています。

これはオプション -asyncMethods として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__ASYNC_METHODS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".bare-methods

string のリスト

 

ラッパースタイルの兄弟メソッドを生成する SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの enableWrapperStyle に似ています。

これはオプション -bareMethods として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__BARE_METHODS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".mime-methods

string のリスト

 

mime:content マッピングを有効にする SEI メソッドのコンマ区切りリスト。JAX-WS バインディングファイルの enableMIMEContent に類似しています。

これはオプション -mimeMethods として wsdl2java に渡されます

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__MIME_METHODS
Quarkus CXF: 2.4.0 以降

lock quarkus.cxf.codegen.wsdl2java."named-parameter-sets".additional-params

string のリスト

 

include および excludes によって選択されたファイルとともに、CXF wsdl2java ツールに渡される追加のコマンドラインパラメーターのコンマ区切りリスト。例: -keep,-dex,false。サポートされているすべてのオプションは、wsdl2java のドキュメント を確認してください。

環境変数: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws."named-parameter-sets".includes

string のリスト

 

java2ws ツールで処理するクラス名を選択するための glob パターンのコンマ区切りリスト。glob 構文は io.quarkus.util.GlobUtil で指定されます。パターンは、org.acme.MyClass などの完全修飾クラス名と照合されます。

includesexcludes が適用されるクラス名の範囲は、次のように定義されます。1.Jandex で表示される クラスのみが考慮されます。2. それらの中から、@WebService でアノテーションが付けられたものだけが選択されます。

例:

アプリケーションに @WebService アノテーションが付けられた 2 つのクラスが含まれており、その両方が Jandex で表示されるとします。それらの名前は org.foo.FruitWebServiceorg.bar.HelloWebService です。

そのような場合:

  • quarkus.cxf.java2ws.includes = **.*WebService は、両方のクラス名に一致します
  • quarkus.cxf.java2ws.includes = org.foo.*org.foo.FruitWebService のみに一致します。一致するクラス名ごとに個別の java2ws 実行が行われます。クラスごとに異なる additional-params が必要な場合は、クラスごとに個別の名前付きパラメーターセットを定義することを推奨します。以下に例を示します。
# Parameters for the foo package
quarkus.cxf.java2ws.foo-params.includes = org.foo.*
quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService
# Parameters for the bar package
quarkus.cxf.java2ws.bar-params.includes = org.bar.*
quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService

このオプションにはデフォルト値がないため、java2ws WSDL 生成はデフォルトで無効になっています。

include を設定せずに quarkus.cxf.java2ws.excludes を指定すると、ビルド時にエラーが発生します。

quarkus.cxf.java2ws.includesquarkus.cxf.java2ws.[whatever-name].includes によって選択されたクラス名が重複していないことを確認してください。そうでない場合、ビルド時に例外が発生します。

生成された WSDL ファイルをネイティブイメージに含める場合は、quarkus.native.resources.includes/excludes を使用して追加する必要があります。

環境変数: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__INCLUDES
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws."named-parameter-sets".excludes

string のリスト

 

java2ws ツールで 処理しない Java クラス名を選択するための glob パターンのコンマ区切りリスト。構文は include と同じです。

環境変数: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__EXCLUDES
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws."named-parameter-sets".additional-params

string のリスト

 

include および excludes によって選択されたファイルとともに CXF java2ws ツールに渡される追加のコマンドラインパラメーターのコンマ区切りリスト。例: -portname,12345。サポートされているすべてのオプションは、java2ws のドキュメント を確認してください。

サポートされているオプション

現在、Java からの WSDL の生成に関連するオプションのみがサポートされています。

環境変数: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.java2ws."named-parameter-sets".wsdl-name-template

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

生成される WSDL ファイルの名前のテンプレート。

テンプレートで使用できるプレースホルダーは 4 つあります。

  • %SIMPLE_CLASS_NAME% - 生成元の Java クラスの単純クラス名
  • %FULLY_QUALIFIED_CLASS_NAME% - 生成する完全修飾名。ドットはすべてアンダースコアに置き換えられます。
  • %TARGET_DIR% - 現在のビルドツールの現在のモジュールのターゲットディレクトリー。通常、Maven の場合は target、Gradle の場合は build です。
  • %CLASSES_DIR% - 現在のビルドツールの現在のモジュールのコンパイラー出力ディレクトリー。通常、Maven の場合は target/classes、Gradle の場合は build/classes です。

環境変数: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__WSDL_NAME_TEMPLATE
Quarkus CXF: 2.0.0 以降

lock quarkus.cxf.client."client-name".service-interface

string

 

クライアントサービスインターフェイスクラス名

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SERVICE_INTERFACE
Quarkus CXF: 1.0.0 以降

lock quarkus.cxf.client."client-name".alternative

boolean

false

これが代替プロキシークライアント設定であるかどうかを示します。true の場合、アノテーション @CXFClient なしでクライアントを設定するときにこの設定は無視されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__ALTERNATIVE
Quarkus CXF: 1.0.0 以降

lock quarkus.cxf.client."client-name".native.runtime-initialized

boolean

false

true の場合、ネイティブコンパイラーにより生成されたクライアント動的プロキシークラスは実行時に初期化されます。そうでない場合、プロキシークラスはビルド時に初期化されます。

サービスエンドポイントインターフェイスがメソッドシグネチャー内で実行時に初期化されるクラスを参照する場合は、これを true に設定します。たとえば、サービスインターフェイスに int add(Operands o) メソッドがあり、Operands クラスに対して実行時の初期化がリクエストされたとします。このとき、この設定パラメーターが true に設定されていなければ、ネイティブコンパイラーは Classes that should be initialized at run time got initialized during image building: org.acme.Operands …​ jdk.proxy<some-number>.$Proxy<some-number> caused initialization of this class のような例外をスローします。jdk.proxy<some-number>.$Proxy<some-number> は、ネイティブコンパイラーにより生成されたプロキシークラスです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__NATIVE_RUNTIME_INITIALIZED
Quarkus CXF: 2.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".implementor

string

 

サービスエンドポイント実装クラス

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__IMPLEMENTOR
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".wsdl

string

 

サービスエンドポイント WSDL パス

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__WSDL
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".soap-binding

string

 

SOAP バインディングの URL は、次の 4 つの値のいずれかになります。

  • SOAP11HTTP_BINDING の場合は http://schemas.xmlsoap.org/wsdl/soap/http
  • SOAP11HTTP_MTOM_BINDING の場合は http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true
  • SOAP12HTTP_BINDING の場合は http://www.w3.org/2003/05/soap/bindings/HTTP/
  • SOAP12HTTP_MTOM_BINDING の場合は http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SOAP_ バインド ING
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".published-endpoint-url

string

 

公開されたサービスエンドポイント URL

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__PUBLISHED_ENDPOINT_URL
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.enabled

truefalsepretty

 

true または pretty の場合はメッセージのロギングが有効になり、それ以外の場合は有効になりません。値が pretty (2.7.0 以降) の場合、pretty 属性は実際には true に設定されます。デフォルトは quarkus.cxf.logging.enabled-for で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_ENABLED
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.pretty

boolean

 

true の場合、XML 要素がログ内でインデントされます。そうでない場合は、インデントされずに表示されます。デフォルトは quarkus.cxf.logging.pretty で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_PRETTY
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.limit

int

 

ログ内で切り捨てられるメッセージの長さ (バイト単位)。デフォルトは quarkus.cxf.logging.limit で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_LIMIT
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.in-mem-threshold

long

 

ディスクに書き込まれるメッセージの長さ (バイト単位)。-1 は無制限を意味します。デフォルトは quarkus.cxf.logging.in-mem-threshold で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_IN_MEM_THRESHOLD
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.log-binary

boolean

 

true の場合はバイナリーペイロードがログに記録され、そうでない場合は記録されません。デフォルトは quarkus.cxf.logging.log-binary で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_LOG_BINARY
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.log-multipart

boolean

 

true の場合はマルチパートペイロードがログに記録され、そうでない場合は記録されません。デフォルトは quarkus.cxf.logging.log-multipart で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_LOG_MULTIPART
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.verbose

boolean

 

true の場合は詳細なロギングが有効になり、そうでない場合は有効になりません。デフォルトは quarkus.cxf.logging.verbose で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_VERBOSE
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.in-binary-content-media-types

string のリスト

 

LoggingInInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。デフォルトは quarkus.cxf.logging.in-binary-content-media-types で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_IN_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.out-binary-content-media-types

string のリスト

 

LoggingOutInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。デフォルトは quarkus.cxf.logging.out-binary-content-media-types で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_OUT_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.binary-content-media-types

string のリスト

 

LoggingOutInterceptor および LoggingInInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。デフォルトは quarkus.cxf.logging.binary-content-media-types で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.sensitive-element-names

string のリスト

 

ログでマスクされる機密情報を含む XML 要素のコンマ区切りリスト。デフォルトは quarkus.cxf.logging.sensitive-element-names で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_SENSITIVE_ELEMENT_NAMES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".logging.sensitive-protocol-header-names

string のリスト

 

ログでマスクされる機密情報を含むプロトコルヘッダーのコンマ区切りリスト。デフォルトは quarkus.cxf.logging.sensitive-protocol-header-names で指定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__LOGGING_SENSITIVE_PROTOCOL_HEADER_NAMES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.endpoint."/endpoint-path".features

string のリスト

 

完全修飾 CXF Feature クラス名または名前付き CDI Bean のコンマ区切りリスト。

例:

quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
quarkus.cxf.endpoint."/fruit".features = #myCustomLoggingFeature

2 番目の場合、#myCustomLoggingFeature Bean は次のように生成できます。

import org.apache.cxf.ext.logging.LoggingFeature;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;

class Producers {

    @Produces
    @ApplicationScoped
    LoggingFeature myCustomLoggingFeature() {
        LoggingFeature loggingFeature = new LoggingFeature();
        loggingFeature.setPrettyLogging(true);
        return loggingFeature;
    }
}

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__FEATURES
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".handlers

string のリスト

 

Handler クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__HANDLERS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".in-interceptors

string のリスト

 

InInterceptor クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__IN_INTERCEPTORS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".out-interceptors

string のリスト

 

OutInterceptor クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__OUT_INTERCEPTORS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".out-fault-interceptors

string のリスト

 

OutFaultInterceptor クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__OUT_FAULT_INTERCEPTORS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".in-fault-interceptors

string のリスト

 

InFaultInterceptor クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__IN_FAULT_INTERCEPTORS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.endpoint."/endpoint-path".schema-validation.enabled-for

inrequestoutresponsebothnone

 

XML スキーマ検証を有効にするメッセージを選択します。指定されていない場合、@org.apache.cxf.annotations.SchemaValidation@org.apache.cxf.annotations.EndpointProperty(key = "schema-validation-enabled", value = "true") アノテーションなどの他の手段で有効にされていない限り、XML スキーマ検証は適用されません。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SCHEMA_VALIDATION_ENABLED_FOR
Quarkus CXF: 2.7.0 以降

quarkus.cxf.client."client-name".wsdl

string

 

このクライアントのサービスプロキシーを生成する際に使用する WSDL ドキュメントを指す URL、リソースパス、またはローカルファイルシステムパス。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__WSDL
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".soap-binding

string

 

SOAP バインディングの URL は、次の 4 つの値のいずれかになります。

  • SOAP11HTTP_BINDING の場合は http://schemas.xmlsoap.org/wsdl/soap/http
  • SOAP11HTTP_MTOM_BINDING の場合は http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true
  • SOAP12HTTP_BINDING の場合は http://www.w3.org/2003/05/soap/bindings/HTTP/
  • SOAP12HTTP_MTOM_BINDING の場合は http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SOAP_ バインド ING
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".client-endpoint-url

string

 

クライアントエンドポイント URL

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__CLIENT_ENDPOINT_URL
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".endpoint-namespace

string

 

クライアントエンドポイントの namespace

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__ENDPOINT_NAMESPACE
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".endpoint-name

string

 

クライアントエンドポイントの名前

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__ENDPOINT_NAME
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".username

string

 

HTTP Basic 認証のユーザー名

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__USERNAME
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".password

string

 

HTTP Basic 認証のパスワード

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__PASSWORD
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".secure-wsdl-access

boolean

false

true の場合、username が設定されていれば WSDL をリクエストする際に Authentication ヘッダーが事前に送信されます。そうでない場合、WSDL は匿名でリクエストされます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURE_WSDL_ACCESS
Quarkus CXF: 2.7.0 以降

quarkus.cxf.client."client-name".logging.enabled

truefalsepretty

 

true または pretty の場合はメッセージのロギングが有効になり、それ以外の場合は有効になりません。値が pretty (2.7.0 以降) の場合、pretty 属性は実際には true に設定されます。デフォルトは quarkus.cxf.logging.enabled-for で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_ENABLED
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.pretty

boolean

 

true の場合、XML 要素がログ内でインデントされます。そうでない場合は、インデントされずに表示されます。デフォルトは quarkus.cxf.logging.pretty で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_PRETTY
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.limit

int

 

ログ内で切り捨てられるメッセージの長さ (バイト単位)。デフォルトは quarkus.cxf.logging.limit で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_LIMIT
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.in-mem-threshold

long

 

ディスクに書き込まれるメッセージの長さ (バイト単位)。-1 は無制限を意味します。デフォルトは quarkus.cxf.logging.in-mem-threshold で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_IN_MEM_THRESHOLD
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.log-binary

boolean

 

true の場合はバイナリーペイロードがログに記録され、そうでない場合は記録されません。デフォルトは quarkus.cxf.logging.log-binary で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_LOG_BINARY
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.log-multipart

boolean

 

true の場合はマルチパートペイロードがログに記録され、そうでない場合は記録されません。デフォルトは quarkus.cxf.logging.log-multipart で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_LOG_MULTIPART
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.verbose

boolean

 

true の場合は詳細なロギングが有効になり、そうでない場合は有効になりません。デフォルトは quarkus.cxf.logging.verbose で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_VERBOSE
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.in-binary-content-media-types

string のリスト

 

LoggingInInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。デフォルトは quarkus.cxf.logging.in-binary-content-media-types で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_IN_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.out-binary-content-media-types

string のリスト

 

LoggingOutInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。デフォルトは quarkus.cxf.logging.out-binary-content-media-types で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_OUT_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.binary-content-media-types

string のリスト

 

LoggingOutInterceptor および LoggingInInterceptor のデフォルト値に追加する、追加のバイナリーメディアタイプのコンマ区切りリスト。log-binarytrue の場合を除き、そのコンテンツはログに記録されません。デフォルトは quarkus.cxf.logging.binary-content-media-types で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_BINARY_CONTENT_MEDIA_TYPES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.sensitive-element-names

string のリスト

 

ログでマスクされる機密情報を含む XML 要素のコンマ区切りリスト。デフォルトは quarkus.cxf.logging.sensitive-element-names で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_SENSITIVE_ELEMENT_NAMES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".logging.sensitive-protocol-header-names

string のリスト

 

ログでマスクされる機密情報を含むプロトコルヘッダーのコンマ区切りリスト。デフォルトは quarkus.cxf.logging.sensitive-protocol-header-names で指定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__LOGGING_SENSITIVE_PROTOCOL_HEADER_NAMES
Quarkus CXF: 2.6.0 以降

quarkus.cxf.client."client-name".features

string のリスト

 

完全修飾 CXF Feature クラス名のコンマ区切りリスト。

以下に例を示します。

quarkus.cxf.endpoint."/my-endpoint".features = org.apache.cxf.ext.logging.LoggingFeature

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__FEATURES
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".handlers

string のリスト

 

Handler クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__HANDLERS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".in-interceptors

string のリスト

 

InInterceptor クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__IN_INTERCEPTORS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".out-interceptors

string のリスト

 

OutInterceptor クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__OUT_INTERCEPTORS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".out-fault-interceptors

string のリスト

 

OutFaultInterceptor クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__OUT_FAULT_INTERCEPTORS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".in-fault-interceptors

string のリスト

 

InFaultInterceptor クラスのコンマ区切りリスト

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__IN_FAULT_INTERCEPTORS
Quarkus CXF: 1.0.0 以降

quarkus.cxf.client."client-name".connection-timeout

long

30000

タイムアウトするまでにコンシューマーが接続の確立を試みる期間 (ミリ秒単位) を指定します。0 は無限を意味します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__CONNECTION_TIMEOUT
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".receive-timeout

long

60000

コンシューマーがタイムアウトするまでの応答を待つ期間 (ミリ秒単位) を指定します。0 は無限を意味します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__RECEIVE_TIMEOUT
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".connection-request-timeout

long

60000

Connection Manager からの接続を要求する場合に使用する時間 (ミリ秒単位) を指定します (該当する場合)。0 は無限を意味します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__CONNECTION_REQUEST_TIMEOUT
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".auto-redirect

boolean

false

コンシューマーが、サーバーが発行するリダイレクトに自動的に従うかどうかを指定します (名前は標準の一部ではありません)。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__AUTO_REDIRECT
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".max-retransmits

int

-1

リダイレクトに許可される再送信の最大回数を指定します。再送信回数には、認証のための再送信も含まれます。各リダイレクトにより、UNAUTHORIZED 応答コード (つまり 401) の再送信が発生する可能性があります。負の数値は再送信回数が無制限であることを示します。ただし、ループ保護が提供されます。デフォルトは無制限です (名前は標準の一部ではありません)。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__MAX_RETRANSMITS
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".allow-chunking

boolean

true

true の場合、クライアントは必要に応じてチャンクストリームを自由に使用できますが、必ずしもチャンクストリームを使用する必要はありません。false の場合、クライアントは必ず通常のチャンク化されていないリクエストを使用する必要があります。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__ALLOW_CHUNKING
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".chunking-threshold

int

4096

AllowChunking が true の場合、メッセージのチャンク化が開始されるしきい値が設定されます。この制限を下回るメッセージはチャンク化されません。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__CHUNKING_THRESHOLD
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".chunk-length

int

-1

HttpURLConnection のチャンク長を指定します。この値は、java.net.HttpURLConnection.setChunkedStreamingMode (int chunklen) で使用されます。chunklen は、各チャンクに書き込むバイト数を示します。chunklen が 0 以下の場合、デフォルト値が使用されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__CHUNK_LENGTH
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".accept

string

 

クライアントが処理できる MIME タイプを指定します (例: HTML、JPEG、GIF など)

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__ACCEPT
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".accept-language

string

 

クライアントが希望する言語を指定します (例: English、French など)

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__ACCEPT_LANGUAGE
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".accept-encoding

string

 

クライアントが処理できるエンコーディングを指定します (例: gzip)

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__ACCEPT_ENCODING
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".content-type

string

 

POST リクエストで送信されるストリームのコンテンツタイプを指定します。(Web サービスの場合は text/xml にする必要がありますが、クライアントがフォームデータを送信する場合は application/x-www-form-urlencoded に設定できます。)

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__CONTENT_TYPE
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".host

string

 

要求が呼び出されるリソースのインターネットホストおよびポート番号を指定します。デフォルトでは、これが URL に基づき送信されます。特定の DNS シナリオまたはアプリケーション設計では、これを設定するように要求される場合がありますが、通常は必要ありません。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__HOST
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".connection

closekeep-alive

keep-alive

接続の処理。close の場合は、各要求/応答ダイアログの後にサーバーへの接続が閉じられます。Keep-Alive の場合、クライアントはサーバーに対して接続を開いたままにするように要求し、サーバーがその keep alive 要求を受け入れると、接続が再利用されます。多くのサーバーとプロキシーは keep-alive 要求を受け入れません。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__CONNECTION
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".cache-control

string

 

no-cache を指定するために使用されることがほとんどですが、要求に対して 12 個程度のキャッシュ関連のディレクティブが標準でサポートしされています。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__CACHE_CONTROL
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".version

string

auto

接続に使用される HTTP バージョン。デフォルト値 auto は、quarkus.cxf.client."client-name".http-conduit-factory で定義された HTTPConduit 実装のデフォルト値を使用します。その他の使用できる値: 1.12

一部の HTTPConduit 実装では、一部の値がサポートされていない可能性があります。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__VERSION
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".browser-type

string

 

User-Agent HTTP ヘッダーの値。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__BROWSER_TYPE
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".decoupled-endpoint

string

 

別のプロバイダー → コンシューマー接続を介して応答を受信するための URI パス (/ で始まる) または完全な URI。値が / で始まる場合、quarkus.cxf.client."client-name".decoupled-endpoint-base で設定されたベース URI が接頭辞として付加されてから、WS-Addressing ReplyTo メッセージヘッダーの値として使用されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__DECOUPLED_ENDPOINT
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".proxy-server

string

 

プロキシーサーバーが使用されている場合は、そのアドレスを指定します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__PROXY_SERVER
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".proxy-server-port

int

 

プロキシーサーバーが使用するポート番号を指定します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__PROXY_SERVER_PORT
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".non-proxy-hosts

string

 

プロキシー設定を使用しないホスト名のリストを指定します。例:

  • localhost - 単一のホスト名
  • localhost|www.google.com - プロキシー設定を使用しない 2 つのホスト名
  • localhost|www.google.*|*.apache.org - ホスト名のパターン

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__NON_PROXY_HOSTS
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".proxy-server-type

httpsocks

http

プロキシーサーバーのタイプを指定します。HTTP または SOCKS を使用できます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__PROXY_SERVER_TYPE
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".proxy-username

string

 

プロキシー認証のユーザー名

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__PROXY_USERNAME
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".proxy-password

string

 

プロキシー認証のパスワード

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__PROXY_PASSWORD
Quarkus CXF: 2.2.3 以降

quarkus.cxf.client."client-name".http-conduit-factory

QuarkusCXFDefaultCXFDefaultHttpClientHTTPConduitFactoryURLConnectionHTTPConduitFactory

 

このクライアントの HTTPConduitFactory 実装を選択します。

  • QuarkusCXFDefault (デフォルト): io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 がクラスパスに存在する場合、その HTTPConduitFactory 実装が使用されます。それ以外の場合、この値は URLConnectionHTTPConduitFactory に相当します (CXF で #992 の問題が解決された場合は変更される可能性があります)。
  • CXFDefault: CXF が HTTPConduitFactory 実装を選択します。
  • HttpClientHTTPConduitFactory: このクライアントの HTTPConduitFactory は、常に org.apache.cxf.transport.http.HttpClientHTTPConduit を返す実装に設定されます。基盤となる HTTP クライアントとして、java.net.http.HttpClient が使用されます。
  • URLConnectionHTTPConduitFactory: このクライアントの HTTPConduitFactory は、常に org.apache.cxf.transport.http.URLConnectionHTTPConduit を返す実装に設定されます。基盤となる HTTP クライアントとして、java.net.HttpURLConnection を使用します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__HTTP_CONDUIT_FACTORY
Quarkus CXF: 2.3.0 以降

quarkus.cxf.client."client-name".key-store

string

 

このクライアントのキーストアの場所です。リソースは最初にクラスパスで検索され、次にファイルシステムで検索されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__KEY_STORE
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".key-store-password

string

 

キーストアのパスワード

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__KEY_STORE_PASSWORD
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".key-store-type

string

JKS

キーストアのタイプ。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__KEY_STORE_TYPE
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".key-password

string

 

キーのパスワード。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__KEY_PASSWORD
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".trust-store

string

 

このクライアントのトラストストアの場所です。リソースは最初にクラスパスで検索され、次にファイルシステムで検索されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__TRUST_STORE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".trust-store-password

string

 

トラストストアのパスワード。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__TRUST_STORE_PASSWORD
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".trust-store-type

string

JKS

トラストストアのタイプ。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__TRUST_STORE_TYPE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".hostname-verifier

string

 

次のいずれかです。

  • よく知られている値: AllowAllHostnameVerifierHttpsURLConnectionDefaultHostnameVerifier
  • CDI コンテナーで検索する javax.net.ssl.HostnameVerifier を実装する完全修飾クラス名。
  • CDI コンテナーで検索される、先頭に # が付いた Bean 名 (例: #myHostnameVerifier)。指定されていない場合、HostnameVerifier の作成は CXF に委譲され、最終的には PublicSuffixMatcherLoader.getDefault() から返されるデフォルトの org.apache.cxf.transport.https.httpclient.PublicSuffixMatcherLoader を持つ org.apache.cxf.transport.https.httpclient.DefaultHostnameVerifier になります。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__HOSTNAME_VERIFIER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".schema-validation.enabled-for

inrequestoutresponsebothnone

 

XML スキーマ検証を有効にするメッセージを選択します。指定されていない場合、@org.apache.cxf.annotations.SchemaValidation@org.apache.cxf.annotations.EndpointProperty(key = "schema-validation-enabled", value = "true") アノテーションなどの他の手段で有効にされていない限り、XML スキーマ検証は適用されません。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SCHEMA_VALIDATION_ENABLED_FOR
Quarkus CXF: 2.7.0 以降

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-forquarkus.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. 設定

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

Expand
設定プロパティーデフォルト

quarkus.cxf.metrics.enabled-for

clientsservicesbothnone

both

メトリクス収集を有効にする対象 (クライアント、サービス、両方、該当なし) を指定します。このグローバル設定は quarkus.cxf.client."client-name".metrics.enabled または quarkus.cxf.endpoint."/endpoint-path".metrics.enabled オプションを使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_METRICS_ENABLED_FOR
Quarkus CXF: 2.7.0 以降

quarkus.cxf.client."client-name".metrics.enabled

boolean

true

true の場合、quarkus.cxf.metrics.enabled-forboth または clients に設定されていれば、MetricsFeature がこのクライアントに追加されます。そうでない場合、このクライアントにこの機能は追加されません。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__METRICS_ENABLED
Quarkus CXF: 2.7.0 以降

quarkus.cxf.endpoint."/endpoint-path".metrics.enabled

boolean

true

true の場合、quarkus.cxf.metrics.enabled-forboth または services に設定されていれば、MetricsFeature がこのサービスエンドポイントに追加されます。そうでない場合、このサービスエンドポイントにこの機能は追加されません。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__METRICS_ENABLED
Quarkus CXF: 2.7.0 以降

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-forquarkus.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-testingInMemorySpanExporter を使用しているため、テストからスパンを簡単に検査できます。サポートされているその他のスパンエクスポーターとコレクターの詳細は、Quarkus OpenTelemetry guide を参照してください。

5.3.3. 設定

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

Expand
設定プロパティーデフォルト

quarkus.cxf.otel.enabled-for

clientsservicesbothnone

both

OpenTelemetry トレーシングを有効にする対象 (クライアント、サービス、両方、該当なし) を指定します。このグローバル設定は quarkus.cxf.client."client-name".otel.enabled または quarkus.cxf.endpoint."/endpoint-path".otel.enabled オプションを使用して、クライアントまたはサービスエンドポイントごとにオーバーライドできます。

環境変数: QUARKUS_CXF_OTEL_ENABLED_FOR
Quarkus CXF: 2.7.0 以降

quarkus.cxf.client."client-name".otel.enabled

boolean

true

true の場合、quarkus.cxf.otel.enabled-forboth または clients に設定されていれば、OpenTelemetryClientFeature がこのクライアントに追加されます。そうでない場合、このクライアントにこの機能は追加されません。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__OTEL_ENABLED
Quarkus CXF: 2.7.0 以降

quarkus.cxf.endpoint."/endpoint-path".otel.enabled

boolean

true

true の場合、quarkus.cxf.otel.enabled-forboth または services に設定されていれば、OpenTelemetryFeature がこのサービスエンドポイントに追加されます。そうでない場合、このサービスエンドポイントにこの機能は追加されません。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__OTEL_ENABLED
Quarkus CXF: 2.7.0 以降

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>
            
1

            <sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
                <wsp:Policy>
                    
2

                    <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>
            
3

            <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <sp:Body/>
            </sp:SignedParts>
            
4

            <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>

1
AsymmetricBinding は、2 者間の通信を保護するために、非対称 (公開鍵/秘密鍵) 暗号化の使用を指定します。
2
InitiatorToken は、メッセージのイニシエーター (送信者) が、必ず受信者に提供する必要がある X.509 証明書トークンを使用することを示します。
3
SignedParts は、インテグリティーを確認するために SOAP メッセージのどの部分に署名する必要があるかを指定します。
4
EncryptedParts は、機密性を確保するために SOAP メッセージのどの部分を暗号化する必要があるかを指定します。

このポリシーは、@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. 設定

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

Expand
設定プロパティーデフォルト

quarkus.cxf.client."client-name".security.username

string

 

ユーザーの名前。以下のように使用します。

  • WS-Security の UsernameToken 内の名前として。
  • signature.username が設定されていない場合に、ユーザーの証明書と秘密鍵を署名用に取得するためのキーストア内のエイリアス名として。
  • encryption.username が設定されていない場合に、暗号化用のユーザーの公開鍵を取得するためのキーストア内のエイリアス名として。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_USERNAME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.password

string

 

callback-handler が定義されていない場合のユーザーのパスワード。これは、WS-Security UsernameToken のパスワードにのみ使用されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_PASSWORD
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.signature.username

string

 

署名用のユーザーの名前。署名用にユーザーの証明書および秘密鍵を取得するための、キーストアのエイリアス名として使用されます。これが定義されていない場合は、代わりに username が使用されます。これも指定されていない場合は、signature.properties によって参照されるプロパティーファイルに設定されているデフォルトのエイリアスが使用されます。これも設定されておらず、キーストアに単一の鍵のみが含まれる場合は、その鍵が使用されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SIGNATURE_USERNAME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.signature.password

string

 

callback-handler が定義されていない場合における、署名用のユーザーのパスワード。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SIGNATURE_PASSWORD
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.encryption.username

string

 

暗号化用のユーザーの名前。暗号化用のユーザーの公開鍵を取得するために、キーストア内のエイリアス名として使用されます。これが定義されていない場合は、代わりに username が使用されます。これも指定されていない場合は、encrypt.properties によって参照されるプロパティーファイルに設定されているデフォルトのエイリアスが使用されます。これも設定されておらず、キーストアに単一の鍵のみが含まれる場合は、その鍵が使用されます。

WS-Security Web サービスプロバイダーの場合、useReqSigCert 値を使用して、公開鍵がサービスのトラストストア (encrypt.properties で定義) にあるすべてのクライアントを受け入れる (暗号化する) ことができます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENCRYPTION_USERNAME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.callback-handler

string

 

送信要求と受信要求の両方でパスワードを取得するために使用される javax.security.auth.callback.CallbackHandler Bean への 参照

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CALLBACK_HANDLER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.saml-callback-handler

string

 

SAML アサーションの構築に使用される javax.security.auth.callback.CallbackHandler 実装への 参照

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SAML_CALLBACK_HANDLER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.signature.properties

Map<String,String>

 

signature.crypto が設定されていない場合に署名に使用する Crypto プロパティー設定。

[prefix].signature.properties."org.apache.ws.security.crypto.provider" =
org.apache.ws.security.components.crypto.Merlin
[prefix].signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
[prefix].signature.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SIGNATURE_PROPERTIES
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.encryption.properties

Map<String,String>

 

crypto.crypto が設定されていない場合に暗号化に使用する Crypto プロパティー設定。

[prefix].encryption.properties."org.apache.ws.security.crypto.provider" =
org.apache.ws.security.components.crypto.Merlin
[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENCRYPTION_PROPERTIES
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.signature.crypto

string

 

署名に使用される org.apache.wss4j.common.crypto.Crypto Bean への 参照。設定されていない場合は、signature.properties を使用して Crypto インスタンスが設定されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SIGNATURE_CRYPTO
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.encryption.crypto

string

 

暗号化に使用される org.apache.wss4j.common.crypto.Crypto への 参照。設定されていない場合は、encryption.properties を使用して Crypto インスタンスを設定します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENCRYPTION_CRYPTO
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.encryption.certificate

string

 

暗号化に使用するために準備された X509 証明書のメッセージプロパティー。これが定義されていない場合、証明書はキーストアの encryption.properties からロードされるか、要求から抽出されます (WS-Security が使用されており、encryption.username の値が useReqSigCert の場合)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENCRYPTION_CERTIFICATE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.enable-revocation

boolean

false

true の場合、証明書の信頼性を検証する際に証明書失効リスト (CRL) チェックが有効になります。そうでない場合、有効にはなりません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENABLE_REVOCATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.enable-unsigned-saml-assertion-principal

boolean

false

true の場合、未署名の SAML アサーションは SecurityContext プリンシパルとして許可されます。そうでない場合、SecurityContext プリンシパルとして許可されません。

署名

"unsigned" というラベルは、内部署名を指します。トークンが ("sender-vouches" 要件に沿って) 外部署名によって署名されている場合でも、トークンを使用してセキュリティーコンテキストを設定する場合は、このブール値を設定する必要があります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENABLE_UNSIGNED_SAML_ASSERTION_PRINCIPAL
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.validate-saml-subject-confirmation

boolean

true

true の場合、受信した SAML トークンの SubjectConfirmation 要件 (sender-vouches または holder-of-key) が検証されます。そうでない場合は検証されません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_VALIDATE_SAML_SUBJECT_CONFIRMATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.sc-from-jaas-subject

boolean

true

true の場合、JAAS サブジェクトからセキュリテを作成できます。そうでない場合は、JAAS サブジェクトからの作成は許可されていません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SC_FROM_JAAS_SUBJECT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.audience-restriction-validation

boolean

true

true の場合、SAML トークンにオーディエンス制限 URI が含まれていれば、そのうちの 1 つが audience.restrictions のいずれかの値と一致する必要があります。そうでない場合、SAML AudienceRestriction 検証は無効になります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_AUDIENCE_RESTRICTION_VALIDATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.saml-role-attributename

string

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role

ロール情報が保存される SAML AttributeStatement の属性 URI。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SAML_ROLE_ATTRIBUTENAME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.subject-cert-constraints

string

 

証明書に関連付けられた証明書チェーンの信頼性の検証後、署名検証に使用される証明書のサブジェクト DN に適用される正規表現の文字列 (security.cert.constraints.separator で指定された値で区切られます)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SUBJECT_CERT_CONSTRAINTS
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.cert-constraints-separator

string

,

security.subject.cert.constraints で設定された証明書制約を解析するために使用される区切り文字

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CERT_CONSTRAINTS_SEPARATOR
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.actor

string

 

wsse:Security ヘッダーのアクターまたはロールの名前。このパラメーターを省略すると、アクター名は設定されません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ACTOR
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.validate.token

boolean

true

true の場合、受信した UsernameToken のパスワードは検証されます。そうでない場合は検証されません。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_VALIDATE_TOKEN
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.username-token.always.encrypted

boolean

true

SupportingToken として定義されている UsernameToken を常に暗号化するかどうかを指定します。パスワード (またはパスワードのダイジェスト) がネットワーク上で公開されるため、実稼働環境では false に設定しないでください。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_USERNAME_TOKEN_ALWAYS_ENCRYPTED
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.is-bsp-compliant

boolean

true

true の場合、確実に Basic Security Profile (BSP) 1.1 に準拠します。そうでない場合、準拠は保証されません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_IS_BSP_COMPLIANT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.enable.nonce.cache

boolean

 

true の場合、UsernameToken nonce はメッセージのイニシエーターと受信者の両方に対してキャッシュされます。そうでない場合、メッセージのイニシエーターにも受信者にもキャッシュされません。デフォルトは、メッセージ受信者の場合は true、メッセージイニシエーターの場合は false です。

キャッシュ

キャッシュは、UsernameToken WS-SecurityPolicy が有効な場合、またはセキュリティーポリシー以外のケースに対して UsernameToken アクションが設定されている場合にのみ適用されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENABLE_NONCE_CACHE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.enable.timestamp.cache

boolean

 

true の場合、Timestamp Created の文字列 (必ずメッセージ署名と併せてキャッシュされます) は、メッセージのイニシエーターと受信者の両方に対してキャッシュされます。そうでない場合、メッセージのイニシエーターにも受信者にもキャッシュされません。デフォルトは、メッセージ受信者の場合は true、メッセージイニシエーターの場合は false です。

キャッシュ

キャッシュは、IncludeTimestamp ポリシーが有効になっている場合、またはセキュリティーポリシー以外のケースに対して Timestamp アクションが設定されている場合にのみ適用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENABLE_TIMESTAMP_CACHE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.enable.streaming

boolean

false

true の場合、WS-Security の新しいストリーミング (StAX) 実装が使用されます。そうでない場合、古い DOM 実装が使用されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENABLE_STREAMING
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.return.security.error

boolean

false

true の場合、詳細なセキュリティーエラーメッセージがクライアントに送信されます。そうでない場合、詳細は省略され、汎用エラーメッセージのみが送信されます。

デプロイメントに関する情報の漏洩や、攻撃に使用できる "オラクル" の提供が発生することがあるため、"実際" のセキュリティーエラーは実稼働環境にあるクライアントに返されるべきではありません。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_RETURN_SECURITY_ERROR
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.must-understand

boolean

true

true の場合、SOAP mustUnderstand ヘッダーは WS-SecurityPolicy に基づきセキュリティーヘッダーに含まれます。そうでない場合、ヘッダーは常に省略されます。

enable.streaming = true の場合にのみ動作します。CXF-8940 を参照してください。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_MUST_UNDERSTAND
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.enable.saml.cache

boolean

 

true の場合、トークンに OneTimeUse 条件が含まれていれば、SAML2 トークン識別子がメッセージのイニシエーターと受信者の両方に対してキャッシュされます。そうでない場合、メッセージのイニシエーターにも受信者にもキャッシュされません。デフォルトは、メッセージ受信者の場合は true、メッセージイニシエーターの場合は false です。

キャッシュは、SamlToken ポリシーが有効になっているか、セキュリティーポリシー以外のケースに対して SAML アクションが設定されている場合にのみ適用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ENABLE_SAML_CACHE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.store.bytes.in.attachment

boolean

 

アタッチメントにバイト (CipherData または BinarySecurityToken) を保存するかどうかを指定します。MTOM が有効な場合、デフォルトは true です。バイトを BASE-64 でエンコードし、代わりにメッセージ内に "インライン化する" には、これを false に設定します。これを true に設定すると、BASE-64 でのエンコードを省略できるため、効率性が向上します。これは DOM WS-Security スタックにのみ適用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STORE_BYTES_IN_ATTACHMENT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.swa.encryption.attachment.transform.content

boolean

false

true の場合、アタッチメントが WS-SecurityPolicy 式によって暗号化される際に Attachment-Content-Only 変換が使用されます。沿うでない場合、アタッチメントが WS-SecurityPolicy 式によって暗号化される際に Attachment-Complete 変換が使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SWA_ENCRYPTION_ATTACHMENT_TRANSFORM_CONTENT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.use.str.transform

boolean

true

true の場合、SAML トークンに (外部的に) 署名するときに STR (Security Token Reference) 変換が使用されます。そうでない場合、STR (Security Token Reference) 変換は使用されません。

一部のフレームワークは SecurityTokenReference を処理できません。その場合、これを false に設定できます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_USE_STR_TRANSFORM
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.add.inclusive.prefixes

boolean

true

true の場合、WSConstants.C14N_EXCL_OMIT_COMMENTS を使用して署名を生成するときに、InclusiveNamespaces PrefixListCanonicalizationMethod の子として追加されます。そうでない場合、PrefixList は追加されません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ADD_INCLUSIVE_PREFIXES
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.disable.require.client.cert.check

boolean

false

true の場合、WS-SecurityPolicy RequireClientCertificate ポリシーの適用は無効になります。そうでない場合、WS-SecurityPolicy RequireClientCertificate ポリシーの適用は有効になります。

方のサーバーでは、SSL ハンドシェイクの開始時にクライアント証明書を検証しない場合があります。そのため、ポリシー検証においてクライアント証明書が WS-Security 層で使用できない可能性があります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_DISABLE_REQUIRE_CLIENT_CERT_CHECK
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.expand.xop.include

boolean

 

true の場合、暗号化と署名 (送信側) のため、または署名検証 (受信側) のために xop:Include 要素が検索されます。そうでない場合、検索は行われません。これにより、参照だけでなく実際のバイトが署名されることが保証されます。MTOM が有効な場合のデフォルトは true、そうでない場合のデフォルトは false です。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_EXPAND_XOP_INCLUDE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.timestamp.timeToLive

string

300

受信 Timestamp を有効として受け入れるかどうかを判断するために、その Creation 値に追加する時間 (秒単位)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_TIMESTAMP_TIMETOLIVE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.timestamp.futureTimeToLive

string

60

受信 TimestampCreated 時刻が有効になるまでの時間 (秒単位)。クロックがわずかにずれる問題を回避するために、デフォルトは 0 より大きくなっています。今後作成される `Timestamp` をすべて拒否するには、これを 0 に設定します。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_TIMESTAMP_FUTURETIMETOLIVE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.usernametoken.timeToLive

string

300

受信した UsernameToken の Creation 値に追加して、それを有効として受け入れるかどうかを判断する時間 (秒単位)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_USERNAMETOKEN_TIMETOLIVE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.usernametoken.futureTimeToLive

string

60

受信 UsernameTokenCreated 時刻が有効な今後の時間 (秒単位)。クロックがわずかにずれる問題を回避するために、デフォルトは 0 より大きくなっています。今後作成されるすべての `UsernameToken` を拒否するには、これを 0 に設定します。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_USERNAMETOKEN_FUTURETIMETOLIVE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.spnego.client.action

string

 

SPNEGO に使用する org.apache.wss4j.common.spnego.SpnegoClientAction Bean への 参照。これにより、ユーザーは別の実装をプラグインしてサービスチケットを取得できるようになります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SPNEGO_CLIENT_ACTION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.nonce.cache.instance

string

 

UsernameToken nonce をキャッシュするために使用される org.apache.wss4j.common.cache.ReplayCache Bean への 参照。デフォルトでは、org.apache.wss4j.common.cache.EHCacheReplayCache インスタンスが使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_NONCE_CACHE_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.timestamp.cache.instance

string

 

Timestamp Created の文字列をキャッシュするために使用される、org.apache.wss4j.common.cache.ReplayCache Bean への 参照。デフォルトでは、org.apache.wss4j.common.cache.EHCacheReplayCache インスタンスが使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_TIMESTAMP_CACHE_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.saml.cache.instance

string

 

SAML2 トークン識別子文字列をキャッシュするために使用される org.apache.wss4j.common.cache.ReplayCache Bean への 参照 (トークンに OneTimeUse 条件が含まれている場合)。デフォルトでは、org.apache.wss4j.common.cache.EHCacheReplayCache インスタンスが使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SAML_CACHE_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.cache.config.file

string

 

このプロパティーを設定して、TokenStore の基礎となるキャッシュ実装の設定ファイルを指すようにします。使用されるデフォルトの設定ファイルは、org.apache.cxf:cxf-rt-security JAR 内の cxf-ehcache.xml です。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CACHE_CONFIG_FILE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.token-store-cache-instance

string

 

セキュリティートークンのキャッシュに使用する org.apache.cxf.ws.security.tokenstore.TokenStore Bean への 参照。デフォルトではインスタンスが使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_TOKEN_STORE_CACHE_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.cache.identifier

string

 

TokenStore で使用するキャッシュ識別子。CXF は、org.apache.cxf.ws.security.tokenstore.TokenStore-<identifier> を使用してトークンストアを取得します。この鍵を使用して、サービス固有のキャッシュ設定を行えます。識別子が一致しない場合は、org.apache.cxf.ws.security.tokenstore.TokenStore の鍵のキャッシュ設定にフォールバックします。

デフォルトの <identifier> は、対象となっているサービスの QName です。ただし、カスタムキャッシュ設定を選択する場合 (たとえば、クライアントプロキシーごとに TokenStore を指定する場合)、代わりにこの識別子を使用して設定できます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CACHE_IDENTIFIER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.role.classifier

string

 

使用するサブジェクトロール分類子。いずれかの WSS4J バリデーターが検証から JAAS サブジェクトを返した場合、WSS4JInInterceptor はこのサブジェクトに基づき SecurityContext を作成しようとします。この値が指定されていない場合は、org.apache.cxf:cxf-coreDefaultSecurityContext を使用してロールを取得しようとします。指定されている場合は、その値と role.classifier.type を使用して Subject からロールを取得します。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ROLE_CLASSIFIER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.role.classifier.type

string

prefix

使用するサブジェクトロール分類子タイプ。いずれかの WSS4J バリデーターが検証から JAAS サブジェクトを返した場合、WSS4JInInterceptor はこのサブジェクトに基づき SecurityContext を作成しようとします。現時点で使用できる値は prefix または classname です。role.classifier と組み合わせて使用する必要があります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ROLE_CLASSIFIER_TYPE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.asymmetric.signature.algorithm

string

 

現在、WS-SecurityPolicy 仕様では他のアルゴリズムの使用が許可されていませんが、ユーザーはこの設定タグを使用して、WS-SecurityPolicy で使用するデフォルトの非対称署名アルゴリズム (RSA-SHA1) をオーバーライドできます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_ASYMMETRIC_SIGNATURE_ALGORITHM
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.symmetric.signature.algorithm

string

 

現在、WS-SecurityPolicy 仕様では他のアルゴリズムの使用が許可されていませんが、ユーザーはこの設定タグを使用して、WS-SecurityPolicy で使用するデフォルトの対称署名アルゴリズム (HMAC-SHA1) をオーバーライドできます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SYMMETRIC_SIGNATURE_ALGORITHM
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.password.encryptor.instance

string

 

Merlin Crypto 実装 (または任意のカスタム Crypto 実装) でパスワードを暗号化または復号化するために使用される org.apache.wss4j.common.crypto.PasswordEncryptor Bean への 参照

デフォルトでは、WSS4J は org.apache.wss4j.common.crypto.JasyptPasswordEncryptor を使用します。これは、Merlin Crypto 定義のキーストアパスワードを復号化するために使用するパスワードでインスタンス化する必要があります。このパスワードは、callback-handler で定義された CallbackHandler を介して取得されます。

暗号化されたパスワードは、"ENC (エンコードされた暗号化パスワード)" の形式で保存する必要があります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_PASSWORD_ENCRYPTOR_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.delegated.credential

string

 

WS-Security に使用する Kerberos org.ietf.jgss.GSSCredential Bean への 参照。これは、クライアント認証情報を使用する代わりにサービスチケットを取得するために使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_DELEGATED_CREDENTIAL
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.security.context.creator

string

 

WSS4J 処理結果のセットから CXF SecurityContext を作成するために使用される org.apache.cxf.ws.security.wss4j.WSS4JSecurityContextCreator Bean への 参照。デフォルトの実装は org.apache.cxf.ws.security.wss4j.DefaultWSS4JSecurityContextCreator です。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SECURITY_CONTEXT_CREATOR
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.security.token.lifetime

long

300000

セキュリティートークンの有効期間値 (ミリ秒単位)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_SECURITY_TOKEN_LIFETIME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.kerberos.request.credential.delegation

boolean

false

true の場合、認証情報の委譲が KerberosClient で要求されます。そうでない場合、KerberosClient で認証情報の委譲は発生しません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_KERBEROS_REQUEST_CREDENTIAL_DELEGATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.kerberos.use.credential.delegation

boolean

false

true の場合、delegated.credential プロパティーを使用して GSSCredential Bean がメッセージコンテキストから取得され、サービスチケットを取得するために使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_KERBEROS_USE_CREDENTIAL_DELEGATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.kerberos.is.username.in.servicename.form

boolean

false

true の場合、Kerberos ユーザー名はサービス名形式になります。そうでない場合、Kerberos ユーザー名はサービス名形式ではありません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_KERBEROS_IS_USERNAME_IN_SERVICENAME_FORM
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.kerberos.jaas.context

string

 

Kerberos で使用する JAAS コンテキスト名。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_KERBEROS_JAAS_CONTEXT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.kerberos.spn

string

 

使用する Kerberos サービスプロバイダー名 (spn)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_KERBEROS_SPN
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.kerberos.client

string

 

サービスチケットを取得するために使用される org.apache.cxf.ws.security.kerberos.KerberosClient Bean への 参照

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_KERBEROS_CLIENT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.client."client-name".security.custom.digest.algorithm

string

http://www.w3.org/2001/04/xmlenc#sha256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定するダイジェストアルゴリズム。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として設定されている場合にのみ考慮されます。以下にを示します。

<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:AlgorithmSuite>
            <wsp:Policy>
              <sp:CustomAlgorithmSuite/>
            </wsp:Policy>
          </sp:AlgorithmSuite>
          ...
        </wsp:Policy>
      </sp:AsymmetricBinding>
      ...
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_DIGEST_ALGORITHM
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.encryption.algorithm

string

http://www.w3.org/2009/xmlenc11#aes256-gcm

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する暗号化アルゴリズム。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_ENCRYPTION_ALGORITHM
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.symmetric.key.encryption.algorithm

string

http://www.w3.org/2001/04/xmlenc#kw-aes256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する対称鍵暗号化アルゴリズム。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_SYMMETRIC_KEY_ENCRYPTION_ALGORITHM
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.asymmetric.key.encryption.algorithm

string

http://www.w3.org/2001/04/xmlenc#rsa-1_5

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する非対称鍵暗号化アルゴリズム。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_ASYMMETRIC_KEY_ENCRYPTION_ALGORITHM
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.encryption.key.derivation

string

http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する暗号鍵導出。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_ENCRYPTION_KEY_DERIVATION
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.signature.key.derivation

string

http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する署名鍵導出。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_SIGNATURE_KEY_DERIVATION
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.encryption.derived.key.length

int

256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する暗号化導出鍵の長さ (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_ENCRYPTION_DERIVED_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.signature.derived.key.length

int

192

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する署名導出鍵の長さ (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_SIGNATURE_DERIVED_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.minimum.symmetric.key.length

int

256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する最小対称鍵長 (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_MINIMUM_SYMMETRIC_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.maximum.symmetric.key.length

int

256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する最大対称鍵長。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_MAXIMUM_SYMMETRIC_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.minimum.asymmetric.key.length

int

1024

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する最小対称鍵長 (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_MINIMUM_ASYMMETRIC_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.custom.maximum.asymmetric.key.length

int

4096

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する最大対称鍵長 (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_CUSTOM_MAXIMUM_ASYMMETRIC_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.client."client-name".security.sts.client

string

 

STS と通信するための、完全に設定された org.apache.cxf.ws.security.trust.STSClient Bean への 参照。設定されていない場合、他の [prefix].security.sts.client.* プロパティーが使用可能である限り、それらに基づき STS クライアントが作成および設定されます。

org.apache.cxf.ws.security.trust.STSClient には引数なしのコンストラクターがないため、CDI Bean タイプとして使用できないという事実を回避するには、代わりにラッパークラス io.quarkiverse.cxf.ws.security.sts.client.STSClientBean を使用します。

ヒント: WS-Trust の詳細は、Security Token Service (STS) エクステンションページを確認してください。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.wsdl

string

 

STS クライアントのサービスプロキシーを生成する際に使用する WSDL ドキュメントを指す URL、リソースパス、またはローカルファイルシステムパス。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_WSDL
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.service-name

string

 

STS サービスの完全修飾名。一般的な値は次のとおりです。

  • WS-Trust 1.0: {http://schemas.xmlsoap.org/ws/2005/02/trust/}SecurityTokenService
  • WS-Trust 1.3: {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}SecurityTokenService
  • WS-Trust 1.4: {http://docs.oasis-open.org/ws-sx/ws-trust/200802/}SecurityTokenService

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_SERVICE_NAME
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.endpoint-name

string

 

STS エンドポイント名の完全修飾名。一般的な値は次のとおりです。

  • {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}X509_Port
  • {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}Transport_Port
  • {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}UT_Port

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_ENDPOINT_NAME
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.username

string

 

STS に対して認証するときに使用するユーザー名。以下のように使用します。

  • WS-Security の UsernameToken 内の名前として。
  • signature.username が設定されていない場合に、ユーザーの証明書と秘密鍵を署名用に取得するためのキーストア内のエイリアス名として。
  • encryption.username が設定されていない場合に、暗号化用のユーザーの公開鍵を取得するためのキーストア内のエイリアス名として。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_USERNAME
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.password

string

 

username に関連付けられたパスワード。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_PASSWORD
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.encryption.username

string

 

暗号化用のユーザーの名前。暗号化用のユーザーの公開鍵を取得するために、キーストア内のエイリアス名として使用されます。これが定義されていない場合は、代わりに username が使用されます。これも指定されていない場合は、encrypt.properties によって参照されるプロパティーファイルに設定されているデフォルトのエイリアスが使用されます。これも設定されておらず、キーストアに単一の鍵のみが含まれる場合は、その鍵が使用されます。

WS-Security Web サービスプロバイダーの場合、useReqSigCert 値を使用して、公開鍵がサービスのトラストストア (encrypt.properties で定義) にあるすべてのクライアントを受け入れる (暗号化する) ことができます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_ENCRYPTION_USERNAME
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.encryption.properties

Map<String,String>

 

crypto.crypto が設定されていない場合に暗号化に使用する Crypto プロパティー設定。

[prefix].encryption.properties."org.apache.ws.security.crypto.provider" =
org.apache.ws.security.components.crypto.Merlin
[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_ENCRYPTION_PROPERTIES
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.encryption.crypto

string

 

暗号化に使用される org.apache.wss4j.common.crypto.Crypto への 参照。設定されていない場合は、encryption.properties を使用して Crypto インスタンスを設定します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_ENCRYPTION_CRYPTO
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.token.crypto

string

 

STS に使用される org.apache.wss4j.common.crypto.Crypto への 参照。設定されていない場合は、token.properties を使用して Crypto インスタンスが設定されます。

WCF のトラストサーバーは、メッセージの完全なセキュリティーに加えて、応答内のトークンを暗号化することがあります。これらのプロパティーは、STS クライアントが応答内の EncryptedData 要素を復号化する方法を制御します。

token.properties も、KeyType が PublicKey の場合に使用される RSA/DSAKeyValue トークンの送信/処理にこれらを使用します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_TOKEN_CRYPTO
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.token.properties

Map<String,String>

 

crypto.crypto が設定されていない場合に暗号化に使用する Crypto プロパティー設定。

[prefix].token.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
[prefix].token.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
[prefix].token.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_TOKEN_PROPERTIES
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.token.username

string

 

PublicKey KeyType の場合に、STS に送信するユーザーの公開鍵を取得するために使用するキーストア内のエイリアス名。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_TOKEN_USERNAME
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.token.usecert

boolean

false

UseKey/KeyInfo に X509Certificate 構造を書き出すかどうか、または KeyValue 構造を書き出すかどうかを指定します。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_TOKEN_USECERT
Quarkus CXF: 3.8.0 以降

quarkus.cxf.client."client-name".security.sts.client.soap12-binding

boolean

false

true の場合、Soap 1.2 メッセージを送信するように STS クライアントが設定されます。そうでない場合、SOAP 1.1 メッセージが送信されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__SECURITY_STS_CLIENT_SOAP12_ バインド ING
Quarkus CXF: 3.8.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.username

string

 

ユーザーの名前。以下のように使用します。

  • WS-Security の UsernameToken 内の名前として。
  • signature.username が設定されていない場合に、ユーザーの証明書と秘密鍵を署名用に取得するためのキーストア内のエイリアス名として。
  • encryption.username が設定されていない場合に、暗号化用のユーザーの公開鍵を取得するためのキーストア内のエイリアス名として。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_USERNAME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.password

string

 

callback-handler が定義されていない場合のユーザーのパスワード。これは、WS-Security UsernameToken のパスワードにのみ使用されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_PASSWORD
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.signature.username

string

 

署名用のユーザーの名前。署名用にユーザーの証明書および秘密鍵を取得するための、キーストアのエイリアス名として使用されます。これが定義されていない場合は、代わりに username が使用されます。これも指定されていない場合は、signature.properties によって参照されるプロパティーファイルに設定されているデフォルトのエイリアスが使用されます。これも設定されておらず、キーストアに単一の鍵のみが含まれる場合は、その鍵が使用されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SIGNATURE_USERNAME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.signature.password

string

 

callback-handler が定義されていない場合における、署名用のユーザーのパスワード。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SIGNATURE_PASSWORD
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.encryption.username

string

 

暗号化用のユーザーの名前。暗号化用のユーザーの公開鍵を取得するために、キーストア内のエイリアス名として使用されます。これが定義されていない場合は、代わりに username が使用されます。これも指定されていない場合は、encrypt.properties によって参照されるプロパティーファイルに設定されているデフォルトのエイリアスが使用されます。これも設定されておらず、キーストアに単一の鍵のみが含まれる場合は、その鍵が使用されます。

WS-Security Web サービスプロバイダーの場合、useReqSigCert 値を使用して、公開鍵がサービスのトラストストア (encrypt.properties で定義) にあるすべてのクライアントを受け入れる (暗号化する) ことができます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENCRYPTION_USERNAME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.callback-handler

string

 

送信要求と受信要求の両方でパスワードを取得するために使用される javax.security.auth.callback.CallbackHandler Bean への 参照

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CALLBACK_HANDLER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.saml-callback-handler

string

 

SAML アサーションの構築に使用される javax.security.auth.callback.CallbackHandler 実装への 参照

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SAML_CALLBACK_HANDLER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.signature.properties

Map<String,String>

 

signature.crypto が設定されていない場合に署名に使用する Crypto プロパティー設定。

[prefix].signature.properties."org.apache.ws.security.crypto.provider" =
org.apache.ws.security.components.crypto.Merlin
[prefix].signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
[prefix].signature.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SIGNATURE_PROPERTIES
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.encryption.properties

Map<String,String>

 

crypto.crypto が設定されていない場合に暗号化に使用する Crypto プロパティー設定。

[prefix].encryption.properties."org.apache.ws.security.crypto.provider" =
org.apache.ws.security.components.crypto.Merlin
[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENCRYPTION_PROPERTIES
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.signature.crypto

string

 

署名に使用される org.apache.wss4j.common.crypto.Crypto Bean への 参照。設定されていない場合は、signature.properties を使用して Crypto インスタンスが設定されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SIGNATURE_CRYPTO
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.encryption.crypto

string

 

暗号化に使用される org.apache.wss4j.common.crypto.Crypto への 参照。設定されていない場合は、encryption.properties を使用して Crypto インスタンスを設定します。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENCRYPTION_CRYPTO
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.encryption.certificate

string

 

暗号化に使用するために準備された X509 証明書のメッセージプロパティー。これが定義されていない場合、証明書はキーストアの encryption.properties からロードされるか、要求から抽出されます (WS-Security が使用されており、encryption.username の値が useReqSigCert の場合)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENCRYPTION_CERTIFICATE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.enable-revocation

boolean

false

true の場合、証明書の信頼性を検証する際に証明書失効リスト (CRL) チェックが有効になります。そうでない場合、有効にはなりません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENABLE_REVOCATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.enable-unsigned-saml-assertion-principal

boolean

false

true の場合、未署名の SAML アサーションは SecurityContext プリンシパルとして許可されます。そうでない場合、SecurityContext プリンシパルとして許可されません。

署名

"unsigned" というラベルは、内部署名を指します。トークンが ("sender-vouches" 要件に沿って) 外部署名によって署名されている場合でも、トークンを使用してセキュリティーコンテキストを設定する場合は、このブール値を設定する必要があります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENABLE_UNSIGNED_SAML_ASSERTION_PRINCIPAL
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.validate-saml-subject-confirmation

boolean

true

true の場合、受信した SAML トークンの SubjectConfirmation 要件 (sender-vouches または holder-of-key) が検証されます。そうでない場合は検証されません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_VALIDATE_SAML_SUBJECT_CONFIRMATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.sc-from-jaas-subject

boolean

true

true の場合、JAAS サブジェクトからセキュリテを作成できます。そうでない場合は、JAAS サブジェクトからの作成は許可されていません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SC_FROM_JAAS_SUBJECT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.audience-restriction-validation

boolean

true

true の場合、SAML トークンにオーディエンス制限 URI が含まれていれば、そのうちの 1 つが audience.restrictions のいずれかの値と一致する必要があります。そうでない場合、SAML AudienceRestriction 検証は無効になります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_AUDIENCE_RESTRICTION_VALIDATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.saml-role-attributename

string

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role

ロール情報が保存される SAML AttributeStatement の属性 URI。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SAML_ROLE_ATTRIBUTENAME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.subject-cert-constraints

string

 

証明書に関連付けられた証明書チェーンの信頼性の検証後、署名検証に使用される証明書のサブジェクト DN に適用される正規表現の文字列 (security.cert.constraints.separator で指定された値で区切られます)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SUBJECT_CERT_CONSTRAINTS
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.cert-constraints-separator

string

,

security.subject.cert.constraints で設定された証明書制約を解析するために使用される区切り文字

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CERT_CONSTRAINTS_SEPARATOR
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.actor

string

 

wsse:Security ヘッダーのアクターまたはロールの名前。このパラメーターを省略すると、アクター名は設定されません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ACTOR
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.validate.token

boolean

true

true の場合、受信した UsernameToken のパスワードは検証されます。そうでない場合は検証されません。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_VALIDATE_TOKEN
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.username-token.always.encrypted

boolean

true

SupportingToken として定義されている UsernameToken を常に暗号化するかどうかを指定します。パスワード (またはパスワードのダイジェスト) がネットワーク上で公開されるため、実稼働環境では false に設定しないでください。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_USERNAME_TOKEN_ALWAYS_ENCRYPTED
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.is-bsp-compliant

boolean

true

true の場合、確実に Basic Security Profile (BSP) 1.1 に準拠します。そうでない場合、準拠は保証されません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_IS_BSP_COMPLIANT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.enable.nonce.cache

boolean

 

true の場合、UsernameToken nonce はメッセージのイニシエーターと受信者の両方に対してキャッシュされます。そうでない場合、メッセージのイニシエーターにも受信者にもキャッシュされません。デフォルトは、メッセージ受信者の場合は true、メッセージイニシエーターの場合は false です。

キャッシュ

キャッシュは、UsernameToken WS-SecurityPolicy が有効な場合、またはセキュリティーポリシー以外のケースに対して UsernameToken アクションが設定されている場合にのみ適用されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENABLE_NONCE_CACHE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.enable.timestamp.cache

boolean

 

true の場合、Timestamp Created の文字列 (必ずメッセージ署名と併せてキャッシュされます) は、メッセージのイニシエーターと受信者の両方に対してキャッシュされます。そうでない場合、メッセージのイニシエーターにも受信者にもキャッシュされません。デフォルトは、メッセージ受信者の場合は true、メッセージイニシエーターの場合は false です。

キャッシュ

キャッシュは、IncludeTimestamp ポリシーが有効になっている場合、またはセキュリティーポリシー以外のケースに対して Timestamp アクションが設定されている場合にのみ適用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENABLE_TIMESTAMP_CACHE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.enable.streaming

boolean

false

true の場合、WS-Security の新しいストリーミング (StAX) 実装が使用されます。そうでない場合、古い DOM 実装が使用されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENABLE_STREAMING
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.return.security.error

boolean

false

true の場合、詳細なセキュリティーエラーメッセージがクライアントに送信されます。そうでない場合、詳細は省略され、汎用エラーメッセージのみが送信されます。

デプロイメントに関する情報の漏洩や、攻撃に使用できる "オラクル" の提供が発生することがあるため、"実際" のセキュリティーエラーは実稼働環境にあるクライアントに返されるべきではありません。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_RETURN_SECURITY_ERROR
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.must-understand

boolean

true

true の場合、SOAP mustUnderstand ヘッダーは WS-SecurityPolicy に基づきセキュリティーヘッダーに含まれます。そうでない場合、ヘッダーは常に省略されます。

enable.streaming = true の場合にのみ動作します。CXF-8940 を参照してください。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_MUST_UNDERSTAND
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.enable.saml.cache

boolean

 

true の場合、トークンに OneTimeUse 条件が含まれていれば、SAML2 トークン識別子がメッセージのイニシエーターと受信者の両方に対してキャッシュされます。そうでない場合、メッセージのイニシエーターにも受信者にもキャッシュされません。デフォルトは、メッセージ受信者の場合は true、メッセージイニシエーターの場合は false です。

キャッシュは、SamlToken ポリシーが有効になっているか、セキュリティーポリシー以外のケースに対して SAML アクションが設定されている場合にのみ適用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ENABLE_SAML_CACHE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.store.bytes.in.attachment

boolean

 

アタッチメントにバイト (CipherData または BinarySecurityToken) を保存するかどうかを指定します。MTOM が有効な場合、デフォルトは true です。バイトを BASE-64 でエンコードし、代わりにメッセージ内に "インライン化する" には、これを false に設定します。これを true に設定すると、BASE-64 でのエンコードを省略できるため、効率性が向上します。これは DOM WS-Security スタックにのみ適用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_STORE_BYTES_IN_ATTACHMENT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.swa.encryption.attachment.transform.content

boolean

false

true の場合、アタッチメントが WS-SecurityPolicy 式によって暗号化される際に Attachment-Content-Only 変換が使用されます。沿うでない場合、アタッチメントが WS-SecurityPolicy 式によって暗号化される際に Attachment-Complete 変換が使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SWA_ENCRYPTION_ATTACHMENT_TRANSFORM_CONTENT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.use.str.transform

boolean

true

true の場合、SAML トークンに (外部的に) 署名するときに STR (Security Token Reference) 変換が使用されます。そうでない場合、STR (Security Token Reference) 変換は使用されません。

一部のフレームワークは SecurityTokenReference を処理できません。その場合、これを false に設定できます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_USE_STR_TRANSFORM
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.add.inclusive.prefixes

boolean

true

true の場合、WSConstants.C14N_EXCL_OMIT_COMMENTS を使用して署名を生成するときに、InclusiveNamespaces PrefixListCanonicalizationMethod の子として追加されます。そうでない場合、PrefixList は追加されません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ADD_INCLUSIVE_PREFIXES
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.disable.require.client.cert.check

boolean

false

true の場合、WS-SecurityPolicy RequireClientCertificate ポリシーの適用は無効になります。そうでない場合、WS-SecurityPolicy RequireClientCertificate ポリシーの適用は有効になります。

方のサーバーでは、SSL ハンドシェイクの開始時にクライアント証明書を検証しない場合があります。そのため、ポリシー検証においてクライアント証明書が WS-Security 層で使用できない可能性があります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_DISABLE_REQUIRE_CLIENT_CERT_CHECK
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.expand.xop.include

boolean

 

true の場合、暗号化と署名 (送信側) のため、または署名検証 (受信側) のために xop:Include 要素が検索されます。そうでない場合、検索は行われません。これにより、参照だけでなく実際のバイトが署名されることが保証されます。MTOM が有効な場合のデフォルトは true、そうでない場合のデフォルトは false です。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_EXPAND_XOP_INCLUDE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.timestamp.timeToLive

string

300

受信 Timestamp を有効として受け入れるかどうかを判断するために、その Creation 値に追加する時間 (秒単位)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_TIMESTAMP_TIMETOLIVE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.timestamp.futureTimeToLive

string

60

受信 TimestampCreated 時刻が有効になるまでの時間 (秒単位)。クロックがわずかにずれる問題を回避するために、デフォルトは 0 より大きくなっています。今後作成される `Timestamp` をすべて拒否するには、これを 0 に設定します。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_TIMESTAMP_FUTURETIMETOLIVE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.usernametoken.timeToLive

string

300

受信した UsernameToken の Creation 値に追加して、それを有効として受け入れるかどうかを判断する時間 (秒単位)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_USERNAMETOKEN_TIMETOLIVE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.usernametoken.futureTimeToLive

string

60

受信 UsernameTokenCreated 時刻が有効な今後の時間 (秒単位)。クロックがわずかにずれる問題を回避するために、デフォルトは 0 より大きくなっています。今後作成されるすべての `UsernameToken` を拒否するには、これを 0 に設定します。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_USERNAMETOKEN_FUTURETIMETOLIVE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.spnego.client.action

string

 

SPNEGO に使用する org.apache.wss4j.common.spnego.SpnegoClientAction Bean への 参照。これにより、ユーザーは別の実装をプラグインしてサービスチケットを取得できるようになります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SPNEGO_CLIENT_ACTION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.nonce.cache.instance

string

 

UsernameToken nonce をキャッシュするために使用される org.apache.wss4j.common.cache.ReplayCache Bean への 参照。デフォルトでは、org.apache.wss4j.common.cache.EHCacheReplayCache インスタンスが使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_NONCE_CACHE_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.timestamp.cache.instance

string

 

Timestamp Created の文字列をキャッシュするために使用される、org.apache.wss4j.common.cache.ReplayCache Bean への 参照。デフォルトでは、org.apache.wss4j.common.cache.EHCacheReplayCache インスタンスが使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_TIMESTAMP_CACHE_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.saml.cache.instance

string

 

SAML2 トークン識別子文字列をキャッシュするために使用される org.apache.wss4j.common.cache.ReplayCache Bean への 参照 (トークンに OneTimeUse 条件が含まれている場合)。デフォルトでは、org.apache.wss4j.common.cache.EHCacheReplayCache インスタンスが使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SAML_CACHE_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.cache.config.file

string

 

このプロパティーを設定して、TokenStore の基礎となるキャッシュ実装の設定ファイルを指すようにします。使用されるデフォルトの設定ファイルは、org.apache.cxf:cxf-rt-security JAR 内の cxf-ehcache.xml です。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CACHE_CONFIG_FILE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.token-store-cache-instance

string

 

セキュリティートークンのキャッシュに使用する org.apache.cxf.ws.security.tokenstore.TokenStore Bean への 参照。デフォルトではインスタンスが使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_TOKEN_STORE_CACHE_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.cache.identifier

string

 

TokenStore で使用するキャッシュ識別子。CXF は、org.apache.cxf.ws.security.tokenstore.TokenStore-<identifier> を使用してトークンストアを取得します。この鍵を使用して、サービス固有のキャッシュ設定を行えます。識別子が一致しない場合は、org.apache.cxf.ws.security.tokenstore.TokenStore の鍵のキャッシュ設定にフォールバックします。

デフォルトの <identifier> は、対象となっているサービスの QName です。ただし、カスタムキャッシュ設定を選択する場合 (たとえば、クライアントプロキシーごとに TokenStore を指定する場合)、代わりにこの識別子を使用して設定できます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CACHE_IDENTIFIER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.role.classifier

string

 

使用するサブジェクトロール分類子。いずれかの WSS4J バリデーターが検証から JAAS サブジェクトを返した場合、WSS4JInInterceptor はこのサブジェクトに基づき SecurityContext を作成しようとします。この値が指定されていない場合は、org.apache.cxf:cxf-coreDefaultSecurityContext を使用してロールを取得しようとします。指定されている場合は、その値と role.classifier.type を使用して Subject からロールを取得します。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ROLE_CLASSIFIER
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.role.classifier.type

string

prefix

使用するサブジェクトロール分類子タイプ。いずれかの WSS4J バリデーターが検証から JAAS サブジェクトを返した場合、WSS4JInInterceptor はこのサブジェクトに基づき SecurityContext を作成しようとします。現時点で使用できる値は prefix または classname です。role.classifier と組み合わせて使用する必要があります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ROLE_CLASSIFIER_TYPE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.asymmetric.signature.algorithm

string

 

現在、WS-SecurityPolicy 仕様では他のアルゴリズムの使用が許可されていませんが、ユーザーはこの設定タグを使用して、WS-SecurityPolicy で使用するデフォルトの非対称署名アルゴリズム (RSA-SHA1) をオーバーライドできます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_ASYMMETRIC_SIGNATURE_ALGORITHM
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.symmetric.signature.algorithm

string

 

現在、WS-SecurityPolicy 仕様では他のアルゴリズムの使用が許可されていませんが、ユーザーはこの設定タグを使用して、WS-SecurityPolicy で使用するデフォルトの対称署名アルゴリズム (HMAC-SHA1) をオーバーライドできます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SYMMETRIC_SIGNATURE_ALGORITHM
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.password.encryptor.instance

string

 

Merlin Crypto 実装 (または任意のカスタム Crypto 実装) でパスワードを暗号化または復号化するために使用される org.apache.wss4j.common.crypto.PasswordEncryptor Bean への 参照

デフォルトでは、WSS4J は org.apache.wss4j.common.crypto.JasyptPasswordEncryptor を使用します。これは、Merlin Crypto 定義のキーストアパスワードを復号化するために使用するパスワードでインスタンス化する必要があります。このパスワードは、callback-handler で定義された CallbackHandler を介して取得されます。

暗号化されたパスワードは、"ENC (エンコードされた暗号化パスワード)" の形式で保存する必要があります。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_PASSWORD_ENCRYPTOR_INSTANCE
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.delegated.credential

string

 

WS-Security に使用する Kerberos org.ietf.jgss.GSSCredential Bean への 参照。これは、クライアント認証情報を使用する代わりにサービスチケットを取得するために使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_DELEGATED_CREDENTIAL
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.security.context.creator

string

 

WSS4J 処理結果のセットから CXF SecurityContext を作成するために使用される org.apache.cxf.ws.security.wss4j.WSS4JSecurityContextCreator Bean への 参照。デフォルトの実装は org.apache.cxf.ws.security.wss4j.DefaultWSS4JSecurityContextCreator です。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SECURITY_CONTEXT_CREATOR
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.security.token.lifetime

long

300000

セキュリティートークンの有効期間値 (ミリ秒単位)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_SECURITY_TOKEN_LIFETIME
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.kerberos.request.credential.delegation

boolean

false

true の場合、認証情報の委譲が KerberosClient で要求されます。そうでない場合、KerberosClient で認証情報の委譲は発生しません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_KERBEROS_REQUEST_CREDENTIAL_DELEGATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.kerberos.use.credential.delegation

boolean

false

true の場合、delegated.credential プロパティーを使用して GSSCredential Bean がメッセージコンテキストから取得され、サービスチケットを取得するために使用されます。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_KERBEROS_USE_CREDENTIAL_DELEGATION
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.kerberos.is.username.in.servicename.form

boolean

false

true の場合、Kerberos ユーザー名はサービス名形式になります。そうでない場合、Kerberos ユーザー名はサービス名形式ではありません。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_KERBEROS_IS_USERNAME_IN_SERVICENAME_FORM
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.kerberos.jaas.context

string

 

Kerberos で使用する JAAS コンテキスト名。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_KERBEROS_JAAS_CONTEXT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.kerberos.spn

string

 

使用する Kerberos サービスプロバイダー名 (spn)。

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_KERBEROS_SPN
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.kerberos.client

string

 

サービスチケットを取得するために使用される org.apache.cxf.ws.security.kerberos.KerberosClient Bean への 参照

これは、テストでカバーされていない ため、実験段階のオプションです。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_KERBEROS_CLIENT
Quarkus CXF: 2.5.0 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.digest.algorithm

string

http://www.w3.org/2001/04/xmlenc#sha256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定するダイジェストアルゴリズム。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として設定されている場合にのみ考慮されます。以下にを示します。

<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:AlgorithmSuite>
            <wsp:Policy>
              <sp:CustomAlgorithmSuite/>
            </wsp:Policy>
          </sp:AlgorithmSuite>
          ...
        </wsp:Policy>
      </sp:AsymmetricBinding>
      ...
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_DIGEST_ALGORITHM
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.encryption.algorithm

string

http://www.w3.org/2009/xmlenc11#aes256-gcm

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する暗号化アルゴリズム。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_ENCRYPTION_ALGORITHM
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.symmetric.key.encryption.algorithm

string

http://www.w3.org/2001/04/xmlenc#kw-aes256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する対称鍵暗号化アルゴリズム。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_SYMMETRIC_KEY_ENCRYPTION_ALGORITHM
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.asymmetric.key.encryption.algorithm

string

http://www.w3.org/2001/04/xmlenc#rsa-1_5

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する非対称鍵暗号化アルゴリズム。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_ASYMMETRIC_KEY_ENCRYPTION_ALGORITHM
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.encryption.key.derivation

string

http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する暗号鍵導出。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_ENCRYPTION_KEY_DERIVATION
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.signature.key.derivation

string

http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する署名鍵導出。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_SIGNATURE_KEY_DERIVATION
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.encryption.derived.key.length

int

256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する暗号化導出鍵の長さ (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_ENCRYPTION_DERIVED_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.signature.derived.key.length

int

192

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する署名導出鍵の長さ (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_SIGNATURE_DERIVED_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.minimum.symmetric.key.length

int

256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する最小対称鍵長 (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_MINIMUM_SYMMETRIC_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.maximum.symmetric.key.length

int

256

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する最大対称鍵長。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_MAXIMUM_SYMMETRIC_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.minimum.asymmetric.key.length

int

1024

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する最小対称鍵長 (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_MINIMUM_ASYMMETRIC_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

quarkus.cxf.endpoint."/endpoint-path".security.custom.maximum.asymmetric.key.length

int

4096

org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType に設定する最大対称鍵長 (ビット数)。この値は、現在のセキュリティーポリシーで CustomAlgorithmSuiteAlgorithmSuite として 設定されている場合にのみ考慮されます。

アルゴリズムの詳細は、WS-SecurityPolicy 1.2 仕様 および XML 暗号化構文および処理仕様の アルゴリズム セクションを参照してください。

CustomAlgorithmSuite*.security.custom.* ファミリーのオプションは、FIPS アサーションが有効になっているシステムで CXF SOAP クライアントとサービスを実行できるようにするために導入されました。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__SECURITY_CUSTOM_MAXIMUM_ASYMMETRIC_KEY_LENGTH
Quarkus CXF: 3.8.1 以降

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. 設定

lock ビルド時に修正される設定プロパティー。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

Expand
設定プロパティーデフォルト

quarkus.cxf.rm.namespace

string

http://schemas.xmlsoap.org/ws/2005/02/rm

WS-RM バージョン namespace: http://schemas.xmlsoap.org/ws/2005/02/rm/ または http://docs.oasis-open.org/ws-rx/wsrm/200702

環境変数: QUARKUS_CXF_RM_NAMESPACE
Quarkus CXF: 2.7.0 以降

quarkus.cxf.rm.wsa-namespace

string

http://schemas.xmlsoap.org/ws/2004/08/addressing

WS-Addressing バージョン namespace: http://schemas.xmlsoap.org/ws/2004/08/addressing または http://www.w3.org/2005/08/addressinghttp://schemas.xmlsoap.org/ws/2005/02/rm/ RM namespace を使用していない限り、このプロパティーは無視されることに注意してください。

環境変数: QUARKUS_CXF_RM_WSA_NAMESPACE
Quarkus CXF: 2.7.0 以降

quarkus.cxf.rm.inactivity-timeout

long

 

送信者と受信者の間でメッセージ (確認応答やその他の制御メッセージを含む) が交換されなかった場合に関連付けられたシーケンスが閉じられる期間 (ミリ秒単位)。設定されていない場合、非アクティブであることが原因で関連付けられたシーケンスが閉じられることはありません。

環境変数: QUARKUS_CXF_RM_INACTIVITY_TIMEOUT
Quarkus CXF: 2.7.0 以降

quarkus.cxf.rm.retransmission-interval

long

3000

受信者によって確認されないメッセージを再送信する試行間隔 (ミリ秒単位)。

環境変数: QUARKUS_CXF_RM_RETRANSMISSION_INTERVAL
Quarkus CXF: 2.7.0 以降

quarkus.cxf.rm.exponential-backoff

boolean

false

true の場合、再送信間隔は送信を試行するたびに 2 倍になります。そうでない場合、再送信の試行間隔は各試行において quarkus.cxf.rm.retransmission-interval と同じになります。

環境変数: QUARKUS_CXF_RM_EXPONENTIAL_BACKOFF
Quarkus CXF: 2.7.0 以降

quarkus.cxf.rm.acknowledgement-interval

long

 

受信したメッセージの確認応答が、その期間内に RM 宛先から送信されると予想される間隔 (ミリ秒単位)。指定しない場合は、確認応答が直ちに送信されます。

環境変数: QUARKUS_CXF_RM_ACKNOWLEDGEMENT_INTERVAL
Quarkus CXF: 2.7.0 以降

quarkus.cxf.rm.store

string

 

ソースおよび宛先シーケンスとメッセージ参照を保存するために使用される org.apache.cxf.ws.rm.persistence.RMStore Bean への 参照

環境変数: QUARKUS_CXF_RM_STORE
Quarkus CXF: 2.7.0 以降

quarkus.cxf.rm.feature-ref

string

#defaultRmFeature

quarkus.cxf.[client|service]."name".rm.enabled = true を持つクライアントおよびサービスエンドポイントに設定する org.apache.cxf.ws.rm.feature.RMFeature Bean への 参照

値が #defaultRmFeature の場合、Quarkus CXF が Bean を作成および設します。

環境変数: QUARKUS_CXF_RM_FEATURE_REF
Quarkus CXF: 2.7.0 以降

quarkus.cxf.client."client-name".rm.enabled

boolean

true

true の場合、WS-ReliableMessaging インターセプター が、このクライアントまたはサービスエンドポイントに追加されます。

環境変数: QUARKUS_CXF_CLIENT__CLIENT_NAME__RM_ENABLED
Quarkus CXF: 2.7.0 以降

quarkus.cxf.endpoint."/endpoint-path".rm.enabled

boolean

true

true の場合、WS-ReliableMessaging インターセプター が、このクライアントまたはサービスエンドポイントに追加されます。

環境変数: QUARKUS_CXF_ENDPOINT___ENDPOINT_PATH__RM_ENABLED
Quarkus CXF: 2.7.0 以降

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. 非同期メソッドの生成

非同期クライアント呼び出しには、サービスエンドポイントインターフェイスにいくつかの追加メソッドが必要です。そのコードはデフォルトでは生成されません。

これを有効にするには、enableAsyncMappingtrue に設定した 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 を使用して生成できます。

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-bomio.quarkus.platform:quarkus-cxf-bom をプロジェクトにインポートするように注意してください。これは、Quarkus、CXF、Quarkus CXF およびそれらすべての推移的依存関係に対して互換性のあるバージョンを取得するための最も信頼性の高い方法です。

6.2.4. 次のステップ

次に示す章のいずれかに進むことが推奨されます。

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 を見るとわかるように、このサービスでは、addsubtract などの基本的な算術演算がいくつか提供されています。

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> 
1

                    <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> 
2

    </ns2:addResponse>
  </soap:Body>
</soap:Envelope>
1
74 を追加するためのリクエスト
2
11 - 操作の戻り値

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") 
1

    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); 
2

    }

}

1
CDI コンテナーに、クライアントのインスタンスを注入させます。@CXFClient("myCalculator")@Inject @CXFClient("myCalculator") に相当します。
2
add 操作を呼び出すことで、リモート Web サービスを呼び出します。

クライアントが動作するために必要なのはこれだけですか? - いいえ。上記以外にも、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 は、56 を足した正しい結果です。

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 を追加する別の方法

デフォルト設定でインスタンスをアタッチするには、次のいずれかを実行します。

  1. 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 サービス の章に例が記載されています。

    もしくは、次の方法を使用します。

  2. 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 つの果物 (ApplePineapple) を返しました。

ここで別の果物、たとえば 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 
1

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}
2

quarkus.cxf.client.hello.trust-store = client-truststore.${keystore.type}
quarkus.cxf.client.hello.trust-store-password = client-truststore-password

1
pkcs12 トラストストアタイプは、一般的に jks の代替として使用されます。
2
参照される client-truststore.jks ファイルは、src/main/resources ディレクトリーで使用可能である必要があります。

6.9.2. サーバー SSL 設定

HTTPS プロトコル経由でサービスを利用できるようにするには、まずサーバーキーストアを設定する必要があります。サーバーの SSL 設定は、Quarkus の HTTP レイヤーである Vert.x によって実行されます。Quarkus HTTP ガイド では、設定オプションに関する情報が提供されています。

以下に基本的な例を示します。

application.properties

1

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-accesstrue に設定しない限り、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.propertiesclient-endpoint-url プロパティーを省略すると、CXF Quarkus エクステンションは、サービスが http://localhost:8080/{service-path} で公開されていると想定します。この場合の {service-path} は、以下から導出されます。

  • 設定プロパティー quarkus.cxf.path (指定されている場合)、および
  • 小文字で表記された SEI のクラス名

quarkus.cxf.path =/ws の場合、CalculatorService のデフォルトの有効な client-endpoint-urlhttp://localhost:8080/ws/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice になります。

quarkus.cxf.path が指定されていない場合、client-endpoint-urlhttp://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 を設定します。これにより、クライアントに対して HTTPClientPolicyAuthorizationPolicyProxyAuthorizationPolicy、さらには 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 つのオプションがあります。

  1. サービスを開始し、クライアントは http://your-host/your-service?wsdl を指すようにします。
  2. ビルド時に、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 は、includesexcludes で選択された各 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-cxfjava2ws をラップするため、アプリケーションの他の側面と同様に 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

ここでは、java2wsHelloServiceFaultyHelloService という 2 つのインターフェイスの WSDL を生成するように指示しています。

アノテーション

java2ws 処理用にサービスインターフェイスを選択するためには、そのサービスインターフェイスにアノテーション jakarta.xml.ws.WebService を付ける必要があります。

生成された 2 つの WSDL ドキュメントは、それぞれ target/Java2wsTest/FaultyHelloService-from-java2ws.wsdltarget/Java2wsTest/HelloService-from-java2ws.wsdl として保存されます。

注記

Quarkus ソース生成フェーズで実行される wsdl2java とは異なり、java2ws はコンパイル後に実行される Quarkus 拡張の一部です。java2ws の入力は、結局は Java クラスファイルです。したがって、java2wsquarkus-maven-plugin<goal>generate-code</goal> を追加する必要はありません。

6.15.1. 関連項目

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 エンドポイントの両方にリクエストを送信できるようになります。

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 設定を示しています。

Expand
設定デフォルト値説明Comment

.node-name

quarkus

ノードを識別します。これは、トランザクションマネージャーとコンテナーの再起動時に、一意安定 していなければなりません。

詳細は、Quarkus ドキュメントConfiguring transaction node name identifier を参照してください。

.object-store.type

file-system

トランザクションログの保存先を設定します。これは、ディレクトリー (file-system) またはデータベース (jdbc) のいずれかになります。

永続ボリュームにアクセスできないクラウド環境の場合は、jdbc オブジェクトストアの使用を検討してください。

詳細は、Quarkus ドキュメントConfigure storing of Quarkus transaction logs in a database セクションを参照してください。

.enable-recovery

false

JVM がクラッシュまたはシャットダウンした場合における、保留中のトランザクションのリカバリーを有効にします。

アプリケーションで XA トランザクションを使用している場合は、これを true に設定することが推奨されます。そうでない場合は、JVM クラッシュまたはシャットダウンが発生すると保留中のトランザクションが失われます。

7.3. トランザクションリソースの設定

7.3.1. JDBC データソースの設定

データソースを設定するには、以下を実行します。

  1. Quarkus datasource guideConfigure datasources in Quarkus セクションに従って、関連する jdbc エクステンションを含めます。

エクステンションは、プーリングおよび XA トランザクションをサポートするために Quarkus agroal エクステンションと統合されます。

任意

  1. XA トランザクションでデータソースを使用する場合は、それを有効にする必要があります。

    quarkus.datasource.jdbc.transactions = xa

    quarkus.datasource.<datasource-name>.jdbc.transactions = xa

    詳細は、Quarkus datasource guideNarayana transaction manager integration セクションを参照してください。

警告

1 つのトランザクションで非 XA データソースと XA データソースを併用しないでください。

トランザクションにとって安全ではありません。

7.3.2. JMS の設定

分散トランザクションで JMS を使用するには、次の操作を行う必要があります。

  1. プールとトランザクションをサポートするには、pom.xml に次の依存関係を含めて quarkus-pooled-jms を使用します。

    <dependency>
        <groupId>io.quarkiverse.messaginghub</groupId>
        <artifactId>quarkus-pooled-jms</artifactId>
    </dependency>
  2. .transactionxa に設定することで、XA サポートを有効にします。

    quarkus.pooled-jms.transaction = xa

詳細は、JMS エクステンション ドキュメントの 接続プーリングと X/Open XA 分散トランザクションのサポート を参照してください。

7.4. 例

JPA と JMS

Narayana をスタンドアロンの JTA Transaction Manager 実装として使用し、Hibernate を JPA アダプターとして使用します。

JMS and JPA: A Camel Quarkus example

メッセージブリッジ

基本的な REST エンドポイントは、ユーザーが IBM MQ キューにメッセージをディスパッチするために提供されます。IBM MQ からのメッセージは、XA トランザクション内の ActiveMQ キューにリレーされます。この例では、ロールバックおよびリカバリーにおけるトランザクション機能を示しています。

Message Bridge: A Camel Quarkus example

7.5. トランザクションポリシー

以下の 6 つのトランザクションポリシーがあります。

Expand
ポリシー説明Comment

PROPAGATION_MANDATORY

現在のトランザクションをサポートします。現在のトランザクションが存在しない場合は例外が発生します。

 

PROPAGATION_NEVER

現在のトランザクションをサポートしません。現在のトランザクションが存在する場合は例外が発生します。

 

PROPAGATION_NOT_SUPPORTED

現在のトランザクションはサポートせず、常に非トランザクションを実行します。

 

PROPAGATION_REQUIRED

現在のトランザクションをサポートします。存在しない場合は新しいトランザクションを作成します。

デフォルト

PROPAGATION_REQUIRES_NEW

新しいトランザクションを作成し、現在のトランザクションが存在する場合はそれを一時停止します。

 

PROPAGATION_SUPPORTS

現在のトランザクションをサポートします。存在しない場合は、非トランザクションを実行します。

 

詳細は、Quarkus Transactional client ドキュメントの Using different transaction propagations を参照してください。

7.6. 既知の問題

7.6.1. 非 XA データソースの互換性

3.8.4 以降、非 XA データソースを使用する場合の互換性喪失が発生しています。詳細は、プルリクエスト 40365 を参照してください。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る