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


Red Hat build of Apache Camel 4.0

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 では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

第1章 エクステンションの概要

1.1. サポートレベルの定義

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

表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 の公式リリースに含まれており、完全にサポートされます。ドキュメントにギャップはなく、エクステンションはサポートされるすべての設定でテストされます。

1.2. サポートされるエクステンション

87 のエクステンションがあります。

表1.2 Red Hat build of Apache Camel for Quarkus のサポートマトリックス (エクステンション)
エクステンションアーティファクトJVM サポートレベルネイティブサポートレベル説明

Amqp

camel-quarkus-amqp

製品サポート

製品サポート

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

Attachments

camel-quarkus-attachments

製品サポート

製品サポート

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

Aws2-cw

camel-quarkus-aws2-cw

製品サポート

製品サポート

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

Aws2-ddb

camel-quarkus-aws2-ddb

製品サポート

製品サポート

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

Aws2-kinesis

camel-quarkus-aws2-kinesis

製品サポート

製品サポート

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

Aws2-lambda

camel-quarkus-aws2-lambda

製品サポート

製品サポート

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

Aws2-s3

camel-quarkus-aws2-s3

製品サポート

製品サポート

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

Aws2-sns

camel-quarkus-aws2-sns

製品サポート

製品サポート

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

Aws2-sqs

camel-quarkus-aws2-sqs

製品サポート

製品サポート

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

Azure-servicebus

camel-quarkus-azure-servicebus

テクノロジープレビュー

なし

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

Azure-storage-blob

camel-quarkus-azure-storage-blob

テクノロジープレビュー

テクノロジープレビュー

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

Azure-storage-queue

camel-quarkus-azure-storage-queue

テクノロジープレビュー

テクノロジープレビュー

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

Bean

camel-quarkus-bean

製品サポート

製品サポート

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

Bean-validator

camel-quarkus-bean-validator

製品サポート

製品サポート

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

Browse

camel-quarkus-browse

製品サポート

製品サポート

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

Cassandraql

camel-quarkus-cassandraql

製品サポート

製品サポート

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

CLI-connector

camel-quarkus-cli-connector

製品サポート

製品サポート

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

Controlbus

camel-quarkus-controlbus

製品サポート

製品サポート

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

Core

camel-quarkus-core

製品サポート

製品サポート

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

Crypto

camel-quarkus-crypto

製品サポート

製品サポート

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

Cron

camel-quarkus-cron

製品サポート

製品サポート

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

CXF-soap

camel-quarkus-cxf-soap

製品サポート

製品サポート

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

Dataformat

camel-quarkus-dataformat

製品サポート

製品サポート

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

Dataset

camel-quarkus-dataset

devSupport

devSupport

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

Direct

camel-quarkus-direct

製品サポート

製品サポート

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

Fhir

camel-quarkus-fhir

製品サポート

製品サポート

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

File

camel-quarkus-file

製品サポート

製品サポート

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

Ftp

camel-quarkus-ftp

製品サポート

製品サポート

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

Google-bigquery

camel-quarkus-google-bigquery

製品サポート

製品サポート

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

Google-pubsub

camel-quarkus-google-pubsub

製品サポート

製品サポート

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

Grpc

camel-quarkus-grpc

製品サポート

製品サポート

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

HTTP

camel-quarkus-http

製品サポート

製品サポート

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

Infinispan

camel-quarkus-infinispan

製品サポート

製品サポート

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

Java-joor-dsl

camel-quarkus-java-joor-dsl

community

community

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

Jdbc

camel-quarkus-jdbc

製品サポート

製品サポート

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

Jira

camel-quarkus-jira

製品サポート

製品サポート

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

Jms

camel-quarkus-jms

製品サポート

製品サポート

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

Jpa

camel-quarkus-jpa

製品サポート

製品サポート

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

Jta

camel-quarkus-jta

製品サポート

製品サポート

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

Kafka

camel-quarkus-kafka

製品サポート

製品サポート

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

Kamelet

camel-quarkus-kamelet

製品サポート

製品サポート

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

Kubernetes

camel-quarkus-kubernetes

テクノロジープレビュー

テクノロジープレビュー

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

言語

camel-quarkus-language

製品サポート

製品サポート

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

Ldap

camel-quarkus-ldap

製品サポート

製品サポート

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

Log

camel-quarkus-log

製品サポート

製品サポート

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

Mail

camel-quarkus-mail

製品サポート

製品サポート

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

管理

camel-quarkus-management

製品サポート

製品サポート

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

Mapstruct

camel-quarkus-mapstruct

製品サポート

製品サポート

Mapstruct を使用した型変換

Master

camel-quarkus-master

製品サポート

製品サポート

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

Micrometer

camel-quarkus-micrometer

製品サポート

製品サポート

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

Microprofile-fault-tolerance

camel-quarkus-microprofile-fault-tolerance

製品サポート

製品サポート

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

Microprofile-health

camel-quarkus-microprofile-health

製品サポート

製品サポート

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

Minio

camel-quarkus-minio

製品サポート

製品サポート

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

Mllp

camel-quarkus-mllp

製品サポート

製品サポート

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

Mybatis

camel-quarkus-mybatis

製品サポート

製品サポート

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

Mock

camel-quarkus-mock

製品サポート

製品サポート

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

Mongodb

camel-quarkus-mongodb

テクノロジープレビュー

テクノロジープレビュー

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

Netty

camel-quarkus-netty

製品サポート

製品サポート

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

Netty-http

camel-quarkus-netty-http

製品サポート

製品サポート

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

Openapi-java

camel-quarkus-openapi-java

製品サポート

製品サポート

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

OpenTelemetry

camel-quarkus-opentelemetry

テクノロジープレビュー

テクノロジープレビュー

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

Quartz

camel-quarkus-quartz

製品サポート

製品サポート

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

Paho

camel-quarkus-paho

製品サポート

製品サポート

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

Paho-mqtt5

camel-quarkus-paho-mqtt5

製品サポート

製品サポート

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

Platform-http

camel-quarkus-platform-http

製品サポート

製品サポート

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

Ref

camel-quarkus-ref

製品サポート

製品サポート

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

Rest

camel-quarkus-rest

製品サポート

製品サポート

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

Rest-openapi

camel-quarkus-rest-openapi

製品サポート

製品サポート

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

Salesforce

camel-quarkus-salesforce

製品サポート

製品サポート

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

SAP

camel-quarkus-sap

製品サポート

なし

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

Saxon

camel-quarkus-saxon

製品サポート

製品サポート

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

Scheduler

camel-quarkus-scheduler

製品サポート

製品サポート

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

Seda

camel-quarkus-seda

製品サポート

製品サポート

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

Slack

camel-quarkus-slack

製品サポート

製品サポート

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

SNMP

camel-quarkus-snmp

製品サポート

なし

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

Splunk

camel-quarkus-splunk

製品サポート

製品サポート

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

Sql

camel-quarkus-sql

製品サポート

製品サポート

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

Telegram

camel-quarkus-telegram

製品サポート

製品サポート

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

タイマー

camel-quarkus-timer

製品サポート

製品サポート

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

Validator

camel-quarkus-validator

製品サポート

製品サポート

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

Velocity

camel-quarkus-velocity

製品サポート

製品サポート

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

Vertx-http

camel-quarkus-vertx-http

製品サポート

製品サポート

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

Vertx-websocket

camel-quarkus-vertx-websocket

製品サポート

製品サポート

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

XML IO DSL

camel-quarkus-xml-io-dsl

製品サポート

製品サポート

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

XSLT

camel-quarkus-xslt

製品サポート

製品サポート

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

XSLT-Saxon

camel-quarkus-xslt-saxon

製品サポート

製品サポート

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

Yaml-dsl

camel-quarkus-yaml-dsl

製品サポート

製品サポート

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

Zipfile

camel-quarkus-zipfile

製品サポート

製品サポート

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

Zip-deflater

camel-quarkus-zip-deflater

製品サポート

製品サポート

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

1.3. サポート言語

7 つの言語があります。

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

Bean

camel-quarkus-bean

製品サポート

製品サポート

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

Core

camel-quarkus-core

製品サポート

製品サポート

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

Hl7

camel-quarkus-hl7

製品サポート

製品サポート

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

Jsonpath

camel-quarkus-jsonpath

製品サポート

製品サポート

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

Jslt

camel-quarkus-jslt

製品サポート

製品サポート

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

Saxon

camel-quarkus-saxon

製品サポート

製品サポート

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

Xpath

camel-quarkus-xpath

製品サポート

製品サポート

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

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

データフォーマットは 10 個あります。

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

Avro

camel-quarkus-avro

製品サポート

製品サポート

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

Bindy

camel-quarkus-bindy

製品サポート

製品サポート

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

Crypto (Java Cryptographic Extension)

camel-quarkus-crypto

製品サポート

製品サポート

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

Gson

camel-quarkus-gson

製品サポート

製品サポート

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

Hl7

camel-quarkus-hl7

製品サポート

製品サポート

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

Jackson

camel-quarkus-jackson

製品サポート

製品サポート

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

Jackson-avro

camel-quarkus-jackson-avro

製品サポート

製品サポート

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

Jackson-protobuf

camel-quarkus-jackson-protobuf

製品サポート

製品サポート

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

Jacksonxml

camel-quarkus-jacksonxml

製品サポート

製品サポート

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

Jaxb

camel-quarkus-jaxb

製品サポート

製品サポート

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

Xml-jaxp

camel-quarkus-xml-jaxp

製品サポート

製品サポート

XML JAXP タイプコンバーターおよびパーサー

PGP

camel-quarkus-crypto

製品サポート

製品サポート

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

Soap

camel-quarkus-soap

製品サポート

製品サポート

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

Xml-JAXP

camel-quarkus-xml-jaxp

製品サポート

製品サポート

XML JAXP タイプコンバーターおよびパーサー

第2章 エクステンションの参照情報

この章では、Red Hat build of Apache Camel for Quarkus に関するリファレンス情報を提供します。

2.1. AMQP

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

2.1.1. 含まれるもの

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

2.1.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-amqp</artifactId>
</dependency>

2.1.3. 使用方法

2.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 エクステンションがクラスパスに存在することを確認する必要があります。

2.1.3.2. jakarta.jms.ObjectMessage のネイティブモードのサポート

JMS メッセージペイロードを jakarta.jms.ObjectMessage として送信する場合、シリアル化のために登録する関連クラスに @RegisterForReflection(serialization = true) でアノテーションを付ける必要があります。このエクステンションは、quarkus.camel.native.reflection.serialization-enabled = true を自動的に設定することに注意してください。詳細は、ネイティブモードのユーザーガイド を参照してください。

2.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

2.1.4. ネイティブモードの transferException オプション

ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。

また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。

@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)

2.1.5. 追加の Camel Quarkus 設定

エクステンションは、Quarkus Qpid JMS エクステンションを活用します。ConnectionFactory Bean は自動的に作成され、AMQP コンポーネントに接続されます。接続ファクトリーは、Quarkus Qpid JMS 設定オプション を介して設定できます。

2.2. Attachments

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

2.2.1. 含まれるもの

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

2.2.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-attachments</artifactId>
</dependency>

2.3. Avro

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

2.3.1. 含まれるもの

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

2.3.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-avro</artifactId>
</dependency>

2.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 統合テスト の動作設定を参照してください。

2.4. AWS 2 CloudWatch

メトリクスを AWS CloudWatch に送信します。

2.4.1. 含まれるもの

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

2.4.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-aws2-cw</artifactId>
</dependency>

2.4.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.5. AWS 2 DynamoDB

AWS DynamoDB サービスからデータを保存および取得したり、AWS DynamoDB Stream からメッセージを受信したりします。

2.5.1. 含まれるもの

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

2.5.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-aws2-ddb</artifactId>
</dependency>

2.5.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.5.4. 追加の Camel Quarkus 設定

2.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;
    }

2.6. AWS 2 Kinesis

AWS Kinesis Streams からレコードを消費および生成します。

2.6.1. 含まれるもの

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

2.6.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-aws2-kinesis</artifactId>
</dependency>

2.6.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.7. AWS 2 Lambda

AWS Lambda 関数を管理および呼び出します。

2.7.1. 含まれるもの

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

2.7.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-aws2-lambda</artifactId>
</dependency>

2.7.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.7.4. 追加の Camel Quarkus 設定

2.7.4.1. Camel aws2-lambda エクステンションによって quarkus-amazon-lambda を活用することはできません

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

2.8. AWS 2 S3 Storage Service

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

2.8.1. 含まれるもの

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

2.8.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-aws2-s3</artifactId>
</dependency>

2.8.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.8.4. 追加の Camel Quarkus 設定

2.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;
    }

2.9. AWS 2 Simple Notification System (SNS)

AWS Simple Notification Topic にメッセージを送信します。

2.9.1. 含まれるもの

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

2.9.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-aws2-sns</artifactId>
</dependency>

2.9.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.9.4. 追加の Camel Quarkus 設定

2.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;
    }

2.10. AWS 2 Simple Queue Service (SQS)

AWS SQS サービスとの間でメッセージを送受信します。

2.10.1. 含まれるもの

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

2.10.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-aws2-sqs</artifactId>
</dependency>

2.10.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.10.4. 追加の Camel Quarkus 設定

2.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;
    }

2.11. Azure ServiceBus

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

2.11.1. 含まれるもの

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

2.11.2. Maven コーディネート

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-azure-servicebus</artifactId>
</dependency>

2.12. Azure Storage Blob Service

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

2.12.1. 含まれるもの

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

2.12.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-azure-storage-blob</artifactId>
</dependency>

2.12.3. 使用方法

2.12.3.1. Micrometer メトリクスのサポート

Reactor Netty トランスポートの Micrometer メトリクスのコレクションを有効にする場合は、quarkus-micrometer の依存関係を宣言して、Quarkus メトリクス HTTP エンドポイント経由で利用できるようにします。

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-micrometer</artifactId>
</dependency>

2.12.4. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.13. Azure Storage Queue Service

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

2.13.1. 含まれるもの

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

2.13.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-azure-storage-queue</artifactId>
</dependency>

2.13.3. 使用方法

2.13.3.1. Micrometer メトリクスのサポート

Reactor Netty トランスポートの Micrometer メトリクスのコレクションを有効にする場合は、quarkus-micrometer の依存関係を宣言して、Quarkus メトリクス HTTP エンドポイント経由で利用できるようにします。

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-micrometer</artifactId>
</dependency>

2.13.4. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.14. Bean バリデーター

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

2.14.1. 含まれるもの

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

2.14.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-bean-validator</artifactId>
</dependency>

2.14.3. 使用方法

2.14.3.1. ValidatorFactory の設定

このエクステンションの実装は、Quarkus Hibernate Validator エクステンション を利用します。

そのため、Camel のプロパティー (constraintValidatorFactorymessageInterpolatortraversableResolvervalidationProviderResolvervalidatorFactory) によって ValidatorFactory を設定することはできません。

デフォルトの ValidatorFactory (Quarkus によって作成される) に注入される Bean を作成して ValidatorFactory を設定できます。詳細は、Quarkus CDI のドキュメント を参照してください。

2.14.3.2. ネイティブモードでのカスタム検証グループ

ネイティブモードでカスタム検証グループを使用する場合は、反映するためにすべてのインターフェイスを登録する必要があります (ドキュメント を参照)。

以下に例を示します。

@RegisterForReflection
public interface OptionalChecks {
}

2.14.4. Camel Quarkus の制限

(META-INF/validation.xml ファイルを指定して) XML として制約を記述することはできません。サポートされているのは Java アノテーションのみです。これは、Quarkus Hibernate Validator エクステンションの制限によって生じます (issue を参照)。

2.15. Bean

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

2.15.1. 含まれるもの

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

2.15.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-bean</artifactId>
</dependency>

2.15.3. 使用方法

Camel レジストリーで使用できる Bean のメソッドを呼び出す場合を除き、Bean コンポーネントおよび Bean メソッド言語は、Quarkus CDI Bean を呼び出することもできます。

2.16. Bindy

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

2.16.1. 含まれるもの

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

2.16.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-bindy</artifactId>
</dependency>

2.16.3. Camel Quarkus の制限

ネイティブモードで camel-quarkus-bindy を使用する場合は、ビルドマシンのロケールのみがサポートされます。

たとえば、ロケールが french のビルドマシンの場合、以下のコード

BindyDataFormat dataFormat = new BindyDataFormat();
dataFormat.setLocale("ar");

は、JVM モードでは期待どおりに数値をアラビア数字にフォーマットします。ただし、ネイティブモードでは数値をフランス語的にフォーマットします。

さらに調整しないと、ビルドマシンのデフォルトロケールが使用されます。別のロケールは、quarkus.native.user-language および quarkus.native.user-country 設定プロパティーで指定できます。

2.17. Browse

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

2.17.1. 含まれるもの

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

2.17.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-browse</artifactId>
</dependency>

2.18. Cassandra CQL

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

2.18.1. 含まれるもの

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

2.18.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-cassandraql</artifactId>
</dependency>

2.18.3. 追加の Camel Quarkus 設定

2.18.3.1. ネイティブモードでの Cassandra 集約リポジトリー

ネイティブモードで CassandraAggregationRepository などの Cassandra 集約リポジトリーを使用するには、ネイティブシリアライズのサポートを有効化 する必要があります。

さらに、エクスチェンジボディがカスタムタイプである場合、クラス宣言に @RegisterForReflection(serialization = true) のアノテーションを付けてシリアライズ用に登録する必要があります。

2.19. CLI Connector

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

2.19.1. 含まれるもの

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

2.19.2. Maven コーディネート

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-cli-connector</artifactId>
</dependency>

2.20. Control Bus

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

2.20.1. 含まれるもの

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

2.20.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-controlbus</artifactId>
</dependency>

2.20.3. 使用方法

2.20.3.1. 言語
2.20.3.1.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 のアノテーションを付ける必要があります。

2.20.3.1.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

2.20.4. Camel Quarkus の制限

2.20.4.1. 統計

2.21. Core

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

2.21.1. 含まれるもの

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

2.21.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-core</artifactId>
</dependency>

2.21.3. 追加の Camel Quarkus 設定

2.21.3.1. Simple 言語
2.21.3.1.1. OGNL 表記の使用

Simple 言語から OGNL 表記を使用する場合は、camel-quarkus-bean エクステンションを使用する必要があります。

たとえば、以下の簡易式は、Client 型のメッセージボディーの getAddress() メソッドにアクセスします。

---
simple("${body.address}")
---

このような場合、ここで説明されているように、camel-quarkus-bean エクステンションで、追加の依存関係を取得する必要があります。ネイティブモードでは、反映するためにいくつかのクラスを登録する必要がある場合があります。上記の例では、Client クラスを 反映するために登録する 必要があります。

2.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 クラスを 反映するために登録する 必要があります。

2.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
2.21.3.1.4. ネイティブモードのプロパティーを介したカスタム Bean の設定

#class:*#type:* などの設定でネイティブモードのプロパティーを介してカスタム Bean を指定する場合は、リフレクション用にいくつかのクラスを手動で登録する必要がある場合があります。

たとえば、以下のカスタム Bean 定義には、Bean のインスタンス化とセッターの呼び出しにリフレクションを使用することが含まれます。

---
camel.beans.customBeanWithSetterInjection = #class:org.example.PropertiesCustomBeanWithSetterInjection
camel.beans.customBeanWithSetterInjection.counter = 123
---

そのため、クラス PropertiesCustomBeanWithSetterInjectionリフレクション用に登録 する必要があります。この場合は、フィールドアクセスを省略できることに注意してください。

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

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

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.22. Cron

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

2.22.1. 含まれるもの

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

2.22.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-cron</artifactId>
</dependency>

2.22.3. 追加の Camel Quarkus 設定

cron コンポーネントは汎用インターフェイスコンポーネントであるため、Camel Quarkus ユーザーは、実装を提供する別のエクステンションと一緒に cron エクステンションを使用する必要があります。

2.23. Crypto (JCE)

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

2.23.1. 含まれるもの

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

2.23.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-crypto</artifactId>
</dependency>

2.23.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.24. CXF

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

2.24.1. 含まれるもの

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

2.24.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-cxf-soap</artifactId>
</dependency>

2.24.3. 使用方法

2.24.3.1. 全般

camel-quarkus-cxf-soap は、CXF Extensions for Quarkus プロジェクト (quarkus-cxf) のエクステンションを使用します。

これは、サポートされるユースケースと WS 仕様のセットの大部分が quarkus-cxf によって提供されることを意味します。

重要

サポート対象のユースケースおよび WS 仕様の詳細は、Quarkus CXF の Reference を参照してください。

2.24.3.2. 依存関係の管理

Red Hat build of Apache Camel for Quarkus は、CXF および quarkus-cxf のバージョンを 管理 します。これらのプロジェクトと互換性があるバージョンを選択する必要はありません。

2.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 Clients の章を参照してください。

2.24.3.4. サーバー

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 Services の章を参照してください。

2.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 によって提供されます。アプリケーションに明示的に追加する必要はありません。

2.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 仕様を実装したアプリケーションの実行可能なサンプルとして役立つ インテグレーション テスト が多数含まれています。

2.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

2.25. Data Format

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

Red Hat build of Apache Camel for Quarkus でサポートされるデータフォーマットの詳細は、サポートされるデータフォーマット を参照してください。

2.25.1. 含まれるもの

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

2.25.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-dataformat</artifactId>
</dependency>

2.26. Dataset

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

2.26.1. 含まれるもの

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

2.26.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-dataset</artifactId>
</dependency>

2.27. Direct

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

2.27.1. 含まれるもの

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

2.27.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-direct</artifactId>
</dependency>

2.28. FHIR

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

2.28.1. 含まれるもの

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

2.28.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-fhir</artifactId>
</dependency>

2.28.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.28.4. 追加の Camel Quarkus 設定

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

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

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

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.29. File

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

2.29.1. 含まれるもの

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

2.29.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-file</artifactId>
</dependency>

2.29.3. 追加の Camel Quarkus 設定

2.29.3.1. 特定のエンドポイントから消費するコンシューマがクラスタ内で 1 つだけであること

同じルートが複数の JVM にデプロイされている場合、このエクステンションを マスターのエクステンション と組み合わせて使用すると便利な場合があります。このようなセットアップでは、キャメルマスター namespace 全体で一度に 1 つのコンシューマーがアクティブになります。

たとえば、以下のルートを複数の JVM にデプロイするとします。

from("master:ns:timer:test?period=100").log("Timer invoked on a single JVM at a time");

以下のようなプロパティーを使用して、ファイルクラスターサービスを有効にすることができます。

quarkus.camel.cluster.file.enabled = true
quarkus.camel.cluster.file-root = target/cluster-folder-where-lock-file-will-be-held

その結果、1 つのコンシューマーが ns camel マスター namespace 全体でアクティブになります。これは、ある時点で、1 つのタイマーだけがすべての JVM 間でエクスチェンジを生成することを意味します。つまり、メッセージは一度に 1 つの JVM で 100 ミリ秒ごとにログに記録されます。

ファイルクラスターサービスは、quarkus.camel.cluster.file.* プロパティーを微調整できます。

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

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>

 

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.30. FTP

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

2.30.1. 含まれるもの

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

2.30.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-ftp</artifactId>
</dependency>

2.31. Google BigQuery

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

2.31.1. 含まれるもの

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

2.31.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-google-bigquery</artifactId>
</dependency>

2.31.3. 使用方法

ネイティブモードで google-bigquery-sql を使用してクラスパスから SQL スクリプトを読み取る場合は、それらが quarkus.native.resources.includes 設定プロパティーを介してネイティブイメージに追加されていることを確認する必要があります。詳細については、Quarkus のドキュメント を確認してください。

2.32. Google Pubsub

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

2.32.1. 含まれるもの

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

2.32.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-google-pubsub</artifactId>
</dependency>

2.32.3. Camel Quarkus の制限

デフォルトでは、メッセージ本文が String または byte[] 以外の場合は常に、Camel PubSub コンポーネントは ObjectOutputStream を介して JDK オブジェクトのシリアル化を使用します。

このようなシリアル化は GraalVM ではまだサポートされていないため、このエクステンションはカスタムの Jackson ベースのシリアライザーを提供して、複雑なメッセージペイロードを JSON としてシリアル化します。

ペイロードにバイナリーデータが含まれている場合は、カスタムの Jackson シリアライザー/デシリアライザーを作成して処理する必要があります。これを行う方法については、Quarkus Jackson ガイド を参照してください。

2.33. gRPC

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

2.33.1. 含まれるもの

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

2.33.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-grpc</artifactId>
</dependency>

2.33.3. 使用方法

2.33.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 ファイルからコードを生成します。

2.33.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 です。

2.33.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
注記

プロパティーキー内の : 文字は \ でエスケープする必要があります。

2.33.3.2. ネイティブモードでのクラスパスリソースへのアクセス

gRPC コンポーネントには、リソースをクラスパスから解決するさまざまなオプションがあります。

  • keyCertChainResource
  • keyResource
  • serviceAccountResource
  • trustCertCollectionResource

これらのオプションをネイティブモードで使用する場合は、そのようなリソースがネイティブイメージに含まれていることを確認する必要があります。

これは、設定プロパティー quarkus.native.resources.includesapplication.properties に追加することで実現できます。たとえば、SSL/TLS キーと証明書を含めるには、次のように指定します。

quarkus.native.resources.includes = certs/*.pem,certs.*.key

2.33.4. Camel Quarkus の制限

2.33.4.1. Quarkus gRPC との統合はサポート対象外

現時点では、Camel Quarkus gRPC と Quarkus gRPC の統合はサポートされていません。クラスパスに camel-quarkus-grpcquarkus-grpc エクステンションの両方の依存関係がある場合、アプリケーションをコンパイルすると、ビルド時に問題が発生する可能性があります。

2.33.5. 追加の Camel Quarkus 設定

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

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

 

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.34. Gson

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

2.34.1. 含まれるもの

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

2.34.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-gson</artifactId>
</dependency>

2.34.3. 追加の Camel Quarkus 設定

2.34.3.1. ネイティブモードでのオブジェクトのマーシャリング/アンマーシャリング

ネイティブモードでオブジェクトをマーシャリングまたはアンマーシャリングする場合、シリアライズされたクラスはすべて リフレクションのために登録 する必要があります。そのため、GsonDataFormat.setUnmarshalType(…​)GsonDataFormat.setUnmarshalTypeName(…​)、さらに GsonDataFormat.setUnmarshalGenericType(…​) を使用する場合は、アンマーシャリングタイプとサブフィールドタイプをリフレクション用に登録する必要があります。この インテグレーションテスト で実際の例を参照してください。

2.35. HL7

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

2.35.1. 含まれるもの

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

2.35.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-hl7</artifactId>
</dependency>

2.35.3. Camel Quarkus の制限

MLLP と TCP を使用する場合には、Netty が Hl7 MLLP リスナーを実行する唯一のサポートされる手段です。現在、GraalVM ネイティブサポートがないため、Mina はサポートされません。

HL7MLLPNettyEncoderFactory および HL7MLLPNettyDecoderFactory コーデックのオプションのサポートは、プロジェクト pom.xml の依存関係を camel-quarkus-netty に追加することで取得できます。

2.36. HTTP

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

2.36.1. 含まれるもの

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

2.36.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-http</artifactId>
</dependency>

2.36.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.36.4. 追加の Camel Quarkus 設定

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

2.37. Infinispan

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

2.37.1. 含まれるもの

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

2.37.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-infinispan</artifactId>
</dependency>

2.37.3. 追加の Camel Quarkus 設定

2.37.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...
    }
}
2.37.3.2. ネイティブモードの Camel Infinispan InfinispanRemoteAggregationRepository

InfinispanRemoteAggregationRepository をネイティブモードで使用することを選択した場合は、ネイティブシリアライゼーションサポートを有効 にする必要があります。

2.38. Avro Jackson

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

2.38.1. 含まれるもの

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

2.38.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jackson-avro</artifactId>
</dependency>

2.39. Protobuf Jackson

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

2.39.1. 含まれるもの

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

2.39.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jackson-protobuf</artifactId>
</dependency>

2.40. Jackson

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

2.40.1. 含まれるもの

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

2.40.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jackson</artifactId>
</dependency>

2.40.3. 使用方法

2.40.3.1. Jackson ObjectMapper の設定

JacksonDataFormat が使用する ObjectMapper を設定するには、いくつかの方法があります。これらの概要を以下に示します。

2.40.3.1.1. JacksonDataFormat によって内部的に作成された ObjectMapper

デフォルトでは、JacksonDataFormat は独自の ObjectMapper を作成し、DataFormat のさまざまな設定オプションを使用して、追加の Jackson モジュール、きれいな印刷、およびその他の機能を設定します。

2.40.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)
    }
}
2.40.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)
    }
}

2.41. JacksonXML

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

2.41.1. 含まれるもの

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

2.41.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jacksonxml</artifactId>
</dependency>

2.42. Java jOOR DSL

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

2.42.1. 含まれるもの

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

2.42.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-java-joor-dsl</artifactId>
</dependency>

2.42.3. Camel Quarkus の制限

コンポーネントによってコンパイルされるクラスに追加されたアノテーションは、Quarkus によって無視されます。このエクステンションで部分的にサポートされている唯一のアノテーションは、ネイティブモードのリフレクションの設定を容易にするアノテーション RegisterForReflection です。ただし、要素 registerFullHierarchy はサポートされていないことに注意してください。

2.43. JAXB

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

2.43.1. 含まれるもの

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

2.43.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jaxb</artifactId>
</dependency>

2.43.3. 使用方法

2.43.3.1. 非 JAXB アノテーション付きクラスのネイティブモード ObjectFactory インスタンス化

JAXB アノテーションを持たない POJO クラスをインスタンス化するために、カスタム ObjectFactory で JAXB マーシャル操作を行う場合、それらの POJO クラスをネイティブモードでインスタンス化するために、リフレクションに登録する必要があります。たとえば、@RegisterForReflection アノテーションまたは設定プロパティー quarkus.camel.native.reflection.include-patterns を介した場合です。

詳細は、ネイティブモード のユーザーガイドを参照してください。

2.44. JDBC

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

2.44.1. 含まれるもの

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

2.44.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jdbc</artifactId>
</dependency>

2.44.3. 追加の Camel Quarkus 設定

2.44.3.1. データソースの設定

このエクステンションは、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 を解決できます。

2.44.3.1.1. Quarkus Dev Services によるゼロ設定

開発モードとテストモードでは、Configuration Free Databases を利用できます。必要なのは、ルート内でデフォルトのデータベースを参照することだけです。たとえば、to("jdbc:default") のようになります。

2.45. Jira

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

2.45.1. 含まれるもの

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

2.45.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jira</artifactId>
</dependency>

2.45.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.46. JMS

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

2.46.1. 含まれるもの

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

2.46.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jms</artifactId>
</dependency>

2.46.3. 使用方法

2.46.3.1. org.w3c.dom.Node を使用したメッセージマッピング

Camel JMS コンポーネントは、jakarta.jms.Message および org.apache.camel.Message 間のメッセージマッピングをサポートします。Camel メッセージ本文タイプ org.w3c.dom.Node を変換する場合は、camel-quarkus-xml-jaxp エクステンションがクラスパスに存在することを確認する必要があります。

2.46.3.2. jakarta.jms.ObjectMessage のネイティブモードのサポート

JMS メッセージペイロードを jakarta.jms.ObjectMessage として送信する場合、シリアル化のために登録する関連クラスに @RegisterForReflection(serialization = true) でアノテーションを付ける必要があります。

注記

このエクステンションは、quarkus.camel.native.reflection.serialization-enabled = true を自動的に設定します。詳細は、ネイティブモードのユーザーガイド を参照してください。

2.46.3.3. 接続プーリングと X/Open XA 分散トランザクションのサポート

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);
}

2.47. JPA

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

2.47.1. 含まれるもの

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

2.47.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jpa</artifactId>
</dependency>

2.47.3. 追加の Camel Quarkus 設定

このエクステンションは、Quarkus Hibernate ORM を活用して、Hibernate 経由で JPA 実装を提供します。

Hibernate とデータソースを設定する方法については、Quarkus Hibernate ORM のドキュメントを参照してください。

また、Quarkus TX API を活用して TransactionStrategy 実装を提供します。

単一の永続ユニットが使用される場合、Camel Quarkus JPA エクステンションは、自動的に JPA コンポーネントを EntityManagerFactory および TransactionStrategy で設定します。

2.47.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 などの一部のオプションはサポートされません。

2.48. JSLT

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

2.48.1. 含まれるもの

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

2.48.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jslt</artifactId>
</dependency>

2.48.3. ネイティブモードの allowContextMapAll オプション

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

2.48.4. 追加の Camel Quarkus 設定

2.48.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
2.48.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;
}

2.49. JSON Path

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

2.49.1. 含まれるもの

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

2.49.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jsonpath</artifactId>
</dependency>

2.50. JTA

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

2.50.1. 含まれるもの

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

2.50.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-jta</artifactId>
</dependency>

2.50.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")

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

ポリシー説明

PROPAGATION_MANDATORY

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

PROPAGATION_NEVER

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

PROPAGATION_NOT_SUPPORTED

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

PROPAGATION_REQUIRED

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

PROPAGATION_REQUIRES_NEW

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

PROPAGATION_SUPPORTS

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

2.51. Kafka

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

2.51.1. 含まれるもの

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

2.51.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-kafka</artifactId>
</dependency>

2.51.3. 使用方法

2.51.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 を使用して無効にできます。

2.51.4. 追加の Camel Quarkus 設定

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

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

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.52. Kamelet

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

2.52.1. 含まれるもの

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

2.52.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-kamelet</artifactId>
</dependency>

2.52.3. 使用方法

2.52.3.1. ビルド時に Kamelets をプリロードします

このエクステンションを使用すると、quarkus.camel.kamelet.identifiers プロパティーを使用して、ビルド時に一連の Kamelet をプリロードできます。

2.52.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 を事前にロードする必要があります。

2.52.4. 追加の Camel Quarkus 設定

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

lock quarkus.camel.kamelet.identifiers

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

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

string

 

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.53. Kubernetes

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

2.53.1. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-kubernetes</artifactId>
</dependency>

2.53.2. 追加の Camel Quarkus 設定

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

2.53.2.2. 特定のエンドポイントから消費するコンシューマがクラスタ内で 1 つだけであること

同じルートが複数の Pod にデプロイされている場合、このエクステンションを マスターのエクステンション と組み合わせて使用すると便利な場合があります。このようなセットアップでは、キャメルマスター namespace 全体で一度に 1 つのコンシューマーがアクティブになります。

たとえば、以下のルートを複数の Pod にデプロイするとします。

from("master:ns:timer:test?period=100").log("Timer invoked on a single pod at a time");

以下のようなプロパティーを使用して、kubernetes クラスターサービスを有効にすることができます。

quarkus.camel.cluster.kubernetes.enabled = true

その結果、1 つのコンシューマーが ns camel マスター namespace 全体でアクティブになります。これは、特定の時点で、単一のタイマーのみがクラスター全体でエクスチェンジを生成することを意味します。つまり、メッセージは一度に 1 つの Pod で 100 ミリ秒ごとにログに記録されます。

kubernetes クラスターサービスは、quarkus.camel.cluster.kubernetes.* プロパティーをさらに微調整できます。

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

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>

 

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.54. 言語

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

2.54.1. 含まれるもの

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

2.54.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-language</artifactId>
</dependency>

2.54.3. 使用方法

2.54.3.1. 必要な依存関係

言語エクステンションは、実行するスクリプトに Exchange を渡すことのみを処理します。言語を実装するエクステンションは依存関係として追加する必要があります。次のリストの言語が Core に実装されています。

  • Constant
  • ExchangeProperty
  • File
  • Header
  • Ref
  • Simple
  • Tokenize

他の言語を使用するには、対応する依存関係を追加する必要があります。詳細は、言語ガイド を参照してください。

2.54.3.2. ネイティブモード

ネイティブモードでクラスパスからスクリプトをロードする場合、スクリプトファイルへのパスを application.properties ファイルの quarkus.native.resources.includes プロパティーで指定する必要があります。以下に例を示します。

quarkus.native.resources.includes=script.txt

2.54.4. ネイティブモードの allowContextMapAll オプション

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

2.55. LDAP

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

2.55.1. 含まれるもの

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

2.55.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-ldap</artifactId>
</dependency>

2.55.3. 使用方法

2.55.3.1. ネイティブモードでの SSL の使用

カスタム SSLSocketFactory (Configuring SSL セクションにあるものなど) をネイティブモードで使用する場合は、クラスをリフレクション用に登録する必要があります。そうしないと、クラスがクラスパスで使用可能になりません。次のように、クラス定義の上に @RegisterForReflection アノテーションを追加します。

@RegisterForReflection
public class CustomSSLSocketFactory extends SSLSocketFactory {
    // The class definition is the same as in the above link.
}

2.56. Log

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

2.56.1. 含まれるもの

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

2.56.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-log</artifactId>
</dependency>

2.57. Mail

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

2.57.1. 含まれるもの

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

2.57.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-mail</artifactId>
</dependency>

2.58. 管理

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

2.58.1. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-management</artifactId>
</dependency>

2.58.2. 使用方法

Camel で管理対象 Bean を使用する方法については、Camel Manual の JMX セクション を参照してください。

2.58.2.1. JMX の有効化と無効化

JMX は、次のいずれかの方法で Camel-Quarkus で有効または無効にすることができます。

  1. camel-quarkus-management エクステンションを追加または削除する。
  2. camel.main.jmxEnabled 設定プロパティーをブール値に設定する。
  3. システムプロパティー -Dorg.apache.camel.jmx.disabled をブール値に設定する。
2.58.2.2. ネイティブモード

JDK 17/20/Mandrel 23.0 の GraalVM のネイティブ実行可能ファイルに 実験的な JMX サポートが追加されました。この機能を有効にするには、以下の設定プロパティーを application.properties に追加します。

quarkus.native.monitoring=jmxserver

詳細は、Quarkus native guide を参照してください。

2.59. MapStruct

Mapstruct を使用した型変換

2.59.1. 含まれるもの

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

2.59.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-mapstruct</artifactId>
</dependency>

2.59.3. 使用方法

2.59.3.1. アノテーションプロセッサー

MapStruct を使用するには、アノテーションプロセッサーを使用するようにビルドを設定する必要があります。

2.59.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>
2.59.3.1.2. Gradle
dependencies {
    annotationProcessor 'org.mapstruct:mapstruct-processor:{mapstruct-version}'
    testAnnotationProcessor 'org.mapstruct:mapstruct-processor:{mapstruct-version}'
}
2.59.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

2.60. Master

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

2.60.1. 含まれるもの

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

2.60.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-master</artifactId>
</dependency>

2.60.3. 追加の Camel Quarkus 設定

このエクステンションは、以下のエクステンションと組み合わせて使用できます。

2.61. Micrometer

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

2.61.1. 含まれるもの

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

2.61.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-micrometer</artifactId>
</dependency>

2.61.3. 使用方法

このエクステンションは Quarkus Micrometer を活用しています。Quarkus は、さまざまな Micrometer メトリクスレジストリー実装をサポートしています。

アプリケーションでは、使用する監視ソリューションに応じて、以下の依存関係、または quarkiverse ドキュメント に記載されている依存関係の 1 つを宣言する必要があります。

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

依存関係が宣言されていない場合、Micrometer エクステンションは主にテストに適した SimpleMeterRegistry インスタンスを作成します。

2.61.4. Camel Quarkus の制限

2.61.4.1. JMX での Micrometer 統計情報の公開

quarkus-micrometer-registry-jmx には現在ネイティブサポートがないため、JMX での Micrometer 統計の公開はネイティブモードでは利用できません。

2.61.4.2. Counter のデクリメントヘッダーは Prometheus によって無視されます

Prometheus バックエンドは、Counter メトリクスのインクリメント中に負の値を無視します。

2.61.4.3. JMX での統計の公開

Red Hat build of Apache Camel for Quarkus では、JmxMeterRegistry の登録が簡素化されています。io.quarkiverse.micrometer.registry:quarkus-micrometer-registry-jmx の依存関係を追加すると、JmxMeterRegistry が自動的に作成されます。

2.61.5. 追加の Camel Quarkus 設定

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

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

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.62. MicroProfile フォールトトレランス

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

2.62.1. 含まれるもの

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

2.62.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-microprofile-fault-tolerance</artifactId>
</dependency>

2.63. MicroProfile Health

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

2.63.1. 含まれるもの

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

2.63.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-microprofile-health</artifactId>
</dependency>

2.63.3. 使用方法

デフォルトでは、AbstractHealthCheck を拡張するクラスは liveness および readiness チェックの両方として登録されます。isReadiness メソッドを上書きして、この動作を制御できます。

アプリケーションによって提供されるチェックは自動的に検出され、Camel レジストリーにバインドされます。これらは、Quarkus ヘルスエンドポイント /q/health/live および /q/health/ready から利用できます。

カスタムの HealthCheckRepository 実装も提供でき、これらの実装も自動的に検出され、Camel レジストリーにバインドされます。

詳細は、Quarkus health guide を参照してください。

2.63.3.1. 提供されるヘルスチェック

一部のチェックはアプリケーションに自動的に登録されます。

2.63.3.1.1. Camel Context Health

Camel Context のステータスを検査して、ステータスが Started 以外の場合にヘルスチェックのステータスを DOWN にします。

2.63.3.1.2. Camel Route Health

各ルートのステータスを検査して、いずれかのルートのステータスが Started 以外の場合にヘルスチェックのステータスを DOWN にします。

2.63.4. 追加の Camel Quarkus 設定

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

lock quarkus.camel.health.enabled

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

boolean

true

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.64. Minio

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

2.64.1. 含まれるもの

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

2.64.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-minio</artifactId>
</dependency>

2.64.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

2.65. MLLP

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

2.65.1. 含まれるもの

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

2.65.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-mllp</artifactId>
</dependency>

2.65.3. 追加の Camel Quarkus 設定

  • defaultCharset コンポーネントオプションを使用する場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。

2.66. Mock

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

2.66.1. 含まれるもの

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

2.66.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-mock</artifactId>
</dependency>

2.66.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");
    }
}

2.66.4. Camel Quarkus の制限

(使用法で説明した) CDI Bean の注入は、ネイティブモードでは機能しません。

ネイティブモードでは、テストとテスト中のアプリケーションが 2 つの異なるプロセスで実行され、それらの間でモック Bean を共有することはできません (Quarkus ドキュメント を参照)。

2.67. MongoDB

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

2.67.1. 含まれるもの

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

2.67.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-mongodb</artifactId>
</dependency>

2.67.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 ドキュメントを参照してください。

2.68. MyBatis

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

2.68.1. 含まれるもの

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

2.68.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-mybatis</artifactId>
</dependency>

2.68.3. 追加の Camel Quarkus 設定

設定については、Quarkus MyBatis を参照してください。以下のオプションを有効にする必要があります。

quarkus.mybatis.xmlconfig.enable=true
quarkus.mybatis.xmlconfig.path=SqlMapConfig.xml
ヒント

quarkus.mybatis.xmlconfig.path は mybatis エンドポイントの configurationUri パラメーターと同じである必要があります。

2.69. Netty HTTP

Netty HTTP エクステンションは、Netty エクステンションに加えて HTTP トランスポートを提供します。

2.69.1. 含まれるもの

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

2.69.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-netty-http</artifactId>
</dependency>

2.69.3. ネイティブモードの transferException オプション

ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。

また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。

@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)

2.69.4. 追加の Camel Quarkus 設定

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

2.70. Netty

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

2.70.1. 含まれるもの

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

2.70.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-netty</artifactId>
</dependency>

2.71. OpenAPI Java

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

2.71.1. 含まれるもの

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

2.71.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-openapi-java</artifactId>
</dependency>

2.71.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 注入を使用することはできません。

2.72. OpenTelemetry

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

2.72.1. 含まれるもの

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

2.72.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-opentelemetry</artifactId>
</dependency>

2.72.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:*
2.72.3.1. エクスポーター

Quarkus OpenTelemetry のデフォルトは、OpenTelemetry で定義された標準の OTLP エクスポーターです。追加のエクスポーターは、Quarkiverse quarkus-opentelemetry-exporter プロジェクトで利用可能になります。

2.72.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 ガイドを参照してください。

2.72.4. 追加の Camel Quarkus 設定

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

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

 

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.73. Paho MQTT5

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

2.73.1. 含まれるもの

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

2.73.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-paho-mqtt5</artifactId>
</dependency>

2.74. Paho

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

2.74.1. 含まれるもの

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

2.74.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-paho</artifactId>
</dependency>

2.75. Platform HTTP

このエクステンションにより、HTTP リクエストを使用するために HTTP エンドポイントを作成できます。

これは、quarkus-vertx-http エクステンションによって提供される Eclipse Vert.x HTTP サーバー上にビルドされます。

2.75.1. 含まれるもの

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

2.75.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-platform-http</artifactId>
</dependency>

2.75.3. 使用方法

2.75.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}"));
2.75.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");
2.75.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);
                }
            });
        }
    });
2.75.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

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

プラットフォーム HTTP コンポーネントはリバースプロキシーとして機能できます。その場合、Exchange.HTTP_URIExchange.HTTP_HOST ヘッダーは、HTTP 要求のリクエスト行で受信した絶対 URL から入力されます。

エクスチェンジを元のサーバーに単純にリダイレクトする HTTP プロキシーの例を次に示します。

from("platform-http:proxy")
    .toD("http://"
        + "${headers." + Exchange.HTTP_HOST + "}");

2.75.4. 追加の Camel Quarkus 設定

2.75.4.1. プラットフォーム HTTP サーバー設定

プラットフォーム HTTP サーバーの設定は Quarkus によって管理されます。設定オプションの完全なリストについては、Quarkus HTTP 設定ガイド を参照してください。

Platform HTTP サーバーの SSL を設定するには 、SSL ガイドを使用した安全な接続 に従ってください。SSLContextParameters を使用した SSL 用のサーバーの設定は現在サポートされていないことに注意してください。

2.75.4.2. 文字エンコーディング

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

2.76. Quartz

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

2.76.1. 含まれるもの

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

2.76.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-quartz</artifactId>
</dependency>

2.76.3. 使用方法

2.77. Ref

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

2.77.1. 含まれるもの

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

2.77.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-ref</artifactId>
</dependency>

2.77.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");
    }
}

2.78. REST OpenApi

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

2.78.1. 含まれるもの

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

2.78.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-rest-openapi</artifactId>
</dependency>

2.78.3. 使用方法

2.78.3.1. 必要な依存関係

rest-openapi エクステンションを使用する場合は、RestProducerFactory 実装が使用可能である必要があります。現在知られている拡張子は次のとおりです。

  • camel-quarkus-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

2.79. Rest

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

2.79.1. 含まれるもの

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

2.79.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-rest</artifactId>
</dependency>

2.79.3. 追加の Camel Quarkus 設定

このエクステンションは、Platform HTTP エクステンションに依存し、REST トランスポートを提供するコンポーネントとして設定します。

2.79.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 ドキュメント には、これに関するいくつかの背景があります。

2.79.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");
        ...
    }
}

2.80. Salesforce

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

2.80.1. 含まれるもの

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

2.80.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-salesforce</artifactId>
</dependency>

2.80.3. 使用方法

2.80.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>

2.80.4. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.81. SAP

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

2.81.1. 含まれるもの

SAP エクステンションは、10 個の異なる SAP コンポーネントで構成されるパッケージです。sRFC、tRFC、および qRFC プロトコルをサポートするリモートファンクションコール (RFC) コンポーネントがあります。また、IDoc 形式のメッセージを使用して通信を容易にする IDoc コンポーネントがあります。このコンポーネントは、SAP Java Connector (SAP JCo) ライブラリーを使用して SAP との双方向通信を促進し、SAP IDoc ライブラリーを使用してドキュメントを中間ドキュメント (IDoc) 形式で送信します。

詳細は以下を参照してください。

2.81.2. Maven コーディネート

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-sap</artifactId>
</dependency>
2.81.2.1. SAP コンポーネントの追加のプラットフォーム制限

SAP コンポーネントはサードパーティーの JCo 3 および IDoc 3 ライブラリーに依存しているため、これらのライブラリーがサポートするプラットフォームにのみインストールできます。

2.81.2.2. SAP JCo および SAP IDoc ライブラリー

SAP コンポーネントを使用するための前提条件は、SAP Java Connector (SAP JCo) ライブラリーと SAP IDoc ライブラリーが Java ランタイムの lib/ ディレクトリーにインストールされていることです。ターゲットオペレーティングシステムに適した SAP ライブラリーのセットを SAP Service Marketplace からダウンロードしていることを確認する必要があります。

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

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

SAP JCo 3

sapjco3.jar

libsapjco3.so

sapjco3.jar

sapjco3.dll

SAP IDoc

sapidoc3.jar

sapidoc3.jar

2.81.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 リクエストを送信するキューを指定します。
2.81.3.1. RFC 宛先エンドポイントのオプション

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

名前デフォルト説明

stateful

false

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

transacted

false

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

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

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

名前デフォルト説明

stateful

false

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

propagateExceptions

false

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

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

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

名前デフォルト説明

stateful

false

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

propagateExceptions

false

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

2.81.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 と通信します。
2.81.3.5. SAP RFC 宛先エンドポイント

RFC 宛先エンドポイントは、SAP へのアウトバウンド通信をサポートします。これにより、これらのエンドポイントは、SAP の ABAP 関数モジュールへの RFC 呼び出しを行うことができます。RFC 宛先エンドポイントは、SAP インスタンスへの特定の接続を介して特定の ABAP 関数への RFC 呼び出しを行うように設定されています。RFC 宛先は、アウトバウンド接続の論理的な指定であり、一意の名前を持っています。RFC 宛先は、宛先データ と呼ばれる一連の接続パラメーターによって指定されます。

RFC 宛先エンドポイントは、受信した IN-OUT エクスチェンジの入力メッセージから RFC リクエストを抽出し、そのリクエストを関数呼び出しで SAP にディスパッチします。関数呼び出しからのレスポンスは、エクスチェンジの出力メッセージで返されます。SAP RFC 宛先エンドポイントはアウトバウンド通信のみをサポートするため、RFC 宛先エンドポイントは producer の作成のみをサポートします。

2.81.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 の作成のみをサポートします。

2.81.3.7. SAP IDoc および IDoc リストの宛先エンドポイント

IDoc 宛先エンドポイントは、SAP へのアウトバウンド通信をサポートします。SAP は、IDoc メッセージに対してさらに処理を実行できます。IDoc ドキュメントはビジネストランザクションを表し、非 SAP システムと簡単にエクスチェンジできます。IDoc 宛先は、宛先データ と呼ばれる一連の接続パラメーターによって指定されます。

IDoc リスト宛先エンドポイントは、処理するメッセージが IDoc ドキュメントの リスト で構成されていることを除けば、IDoc 宛先エンドポイントと似ています。

2.81.3.8. SAP IDoc リストサーバーエンドポイント

IDoc リストサーバーエンドポイントは、SAP からのインバウンド通信をサポートし、Camel ルートが SAP システムから IDoc ドキュメントのリストを受信できるようにします。IDoc リストサーバーは、サーバーデータ と呼ばれる一連の接続パラメーターによって指定されます。

2.81.3.9. メタデータリポジトリー

メタデータリポジトリーは、次の種類のメタデータを格納するために使用されます。

汎用モジュールのインタフェース説明
このメタデータは、JCo および ABAP ランタイムによって使用され、RFC 呼び出しをチェックして、それらの呼び出しをディスパッチする前に、通信パートナー間でタイプセーフなデータ転送を保証します。リポジトリーには、リポジトリーデータが取り込まれます。リポジトリーデータは、名前付き関数テンプレートのマップです。関数テンプレートには、関数モジュールとの間で渡されるすべてのパラメーターとその入力情報を記述するメタデータが含まれており、関数テンプレートが説明する関数モジュールの一意の名前が付けられています。
IDoc タイプの説明
このメタデータは、IDoc ランタイムによって使用され、IDoc ドキュメントが通信パートナーに送信される前に正しくフォーマットされていることを確認します。基本的な IDoc タイプは、名前、許可されたセグメントのリスト、およびセグメント間の階層関係の説明で構成されます。いくつかの追加の制約をセグメントに課すことができます。セグメントは必須またはオプションにすることができます。また、各セグメントの最小/最大範囲を指定することができます (そのセグメントの許容反復回数を定義します)。

したがって、SAP 宛先およびサーバーエンドポイントは、RFC 呼び出しを送受信し、IDoc ドキュメントを送受信するために、リポジトリーへのアクセスを必要とします。RFC 呼び出しの場合、エンドポイントによって呼び出されて処理されるすべての機能モジュールのメタデータは、リポジトリー内に存在する必要があります。IDoc エンドポイントの場合、エンドポイントによって処理されるすべての IDoc タイプおよび IDoc タイプ拡張のメタデータは、リポジトリー内に存在する必要があります。宛先およびサーバーエンドポイントによって使用されるリポジトリーの場所は、それぞれの接続の宛先データおよびサーバーデータで指定されます。

SAP 宛先エンドポイントの場合、使用するリポジトリーは通常、SAP システムに存在し、接続先の SAP システムにデフォルト設定されます。このデフォルトでは、宛先データに明示的な設定は必要ありません。さらに、宛先エンドポイントが行うリモート関数呼び出しのメタデータは、それが呼び出す既存の関数モジュールのリポジトリーにすでに存在します。したがって、宛先エンドポイントによって行われる呼び出しのメタデータは、SAP コンポーネントで設定する必要はありません。

一方、サーバーエンドポイントによって処理される関数呼び出しのメタデータは、通常、SAP システムのリポジトリーには存在せず、代わりに SAP コンポーネントに存在するリポジトリーによって提供される必要があります。SAP コンポーネントは、名前付きメタデータリポジトリーのマップを維持します。リポジトリーの名前は、メタデータを提供するサーバーの名前に対応しています。

2.81.4. 設定

SAP コンポーネントは、宛先データ、サーバーデータ、およびリポジトリーデータを格納する 3 つのマップを維持します。宛先データストアサーバーデータストア は、SAP コンポーネントに自動的に注入される特別な設定オブジェクト SapConnectionConfiguration で設定されます。リポジトリーデータストア は、関連する SAP コンポーネントで直接設定する必要があります。

2.81.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)

2.81.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
2.81.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 ランタイムを再プロビジョニングして再起動する必要があります。

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

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

名前

デフォルト値

説明

クライアント

 

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 です)。

2.81.4.2.3. 接続オプション

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

名前

デフォルト値

説明

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 です。

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

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

名前

デフォルト値

説明

peakLimit

0

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

poolCapacity

1

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

expirationTime

 

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

expirationPeriod

 

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

maxGetTime

 

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

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

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

名前

デフォルト値

説明

sncMode

 

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

sncPartnername

 

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

sncQop

 

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

sncMyname

 

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

sncLibrary

 

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

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

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

名前

デフォルト値

説明

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 を参照してください。

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

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

名前

デフォルト値

説明

trace

 

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

cpicTrace

 

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

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

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

名前

デフォルト値

説明

gwhost

 

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

gwserv

 

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

progid

 

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

repositoryDestination

 

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

connectionCount

 

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

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

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

名前

デフォルト値

説明

sncMode

 

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

sncQop

 

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

sncMyname

 

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

sncLib

 

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

2.81.4.3.3. その他のオプション

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

名前

デフォルト値

説明

saprouter

 

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

maxStartupDelay

 

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

trace

 

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

workerThreadCount

 

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

workerThreadMinCount

 

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

2.81.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);
    }
2.81.4.4.1. 関数テンプレートのプロパティー

汎用モジュールのインタフェースは、RFC コールでデータが汎用モジュールとの間でやり取りされる 4 つのパラメーターリストで構成されています。各パラメーターリストは 1 つ以上のフィールドで構成され、それぞれが RFC コールで転送される名前付きパラメーターです。次のパラメーターリストと例外リストがサポートされています。

  • インポートパラメーターリスト には、RFC コールで汎用モジュールに送信されるパラメーター値が含まれています。
  • エクスポートパラメーターリスト には、RFC コールで汎用モジュールによって返されるパラメーター値が含まれています。
  • 変更パラメーター一覧 には、RFC コールで汎用モジュールとの間で送受信されるパラメーター値が含まれています。
  • テーブルパラメーター一覧 には、RFC コールで汎用モジュールとの間で送受信される内部テーブル値が含まれています。
  • 汎用モジュールのインタフェースは、モジュールが RFC コールで呼び出されたときに発生する可能性のある ABAP 例外の 例外リスト からも設定されます。

関数テンプレートは、関数インターフェイスの各パラメーターリスト内のパラメーターの名前と型、および関数によって出力される ABAP 例外を記述します。関数テンプレートオブジェクトは、次の表に示すように、メタデータオブジェクトの 5 つのプロパティーリストを保持します。

プロパティー

説明

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(...);
2.81.4.4.2. リストフィールドのメタデータプロパティー

リストフィールドメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMeataDataImpl は、パラメーターリスト内のフィールドの名前とタイプを指定します。基本パラメーターフィールド (CHARDATEBCDTIMEBYTENUMFLOATINTINT1INT2DECF16DECF34STRINGXSTRING) の場合、リストフィールドメタデータオブジェクトに設定できる設定プロパティーを次の表に示します。

名前

デフォルト値

説明

name

-

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

type

-

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

byteLength

-

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

unicodeByteLength

-

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

decimals

0

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

任意

false

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

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

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

名前

デフォルト値

説明

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);
2.81.4.4.3. レコードのメタデータのプロパティー

レコードメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl は、ネストされた STRUCTURE または TABLE パラメーターの行の名前と内容を指定します。レコードメタデータオブジェクトは、レコードフィールドメタデータオブジェクトのリスト org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl を維持します。これは、ネストされた構造またはテーブル行に存在するパラメーターを指定します。

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

名前

デフォルト値

説明

name

-

レコードの名前。

recordFieldMetaData

-

レコードフィールドメタデータオブジェクトのリスト、org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl。構造体に含まれるフィールドを指定します。

注記

レコードメタデータオブジェクトのすべてのプロパティーが必要です。

レコードメタデータの例

次の例は、レコードメタデータオブジェクトを設定する方法を示しています。

    RecordMetaData connectionInfo = new RecordMetaDataImpl();
    connectionInfo.setName("CONNECTION_INFO");
    connectionInfo.setRecordFieldMetaData(...);
2.81.4.4.4. レコードフィールドのメタデータプロパティー

レコードフィールドメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl は、構造体でパラメーターフィールドの名前とタイプを指定します。

レコードフィールドメタデータオブジェクトは、ネストされた構造またはテーブル行内の個々のフィールド位置のオフセットを追加で指定する必要があることを除いて、パラメーターフィールドメタデータオブジェクトに似ています。個々のフィールドの非 Unicode オフセットと Unicode オフセットは、構造体または行内の前のフィールドの非 Unicode バイト長と Unicode バイト長の合計から計算して指定する必要があります。

注記

ネストされた構造およびテーブル行のフィールドのオフセットを適切に指定しないと、基礎となる JCo および ABAP ランタイムのパラメーターのフィールドストレージが重複し、RFC コールでの値の適切な転送が妨げられるます。

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

名前

デフォルト値

説明

name

-

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

type

-

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

byteLength

-

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

unicodeByteLength

-

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

byteOffset

-

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

unicodeByteOffset

-

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

decimals

0

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

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

名前

デフォルト値

説明

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

2.81.5. メッセージヘッダー

SAP コンポーネントは、次のメッセージヘッダーをサポートしています。

ヘッダー

説明

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 エンドポイントのアプリケーションリリース (存在する場合)。

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

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

プロパティー

説明

CamelSap.destinationPropertiesMap

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

CamelSap.serverPropertiesMap

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

2.81.7. RFC のメッセージボディー

2.81.7.1. リクエストおよびレスポンスオブジェクト

SAP エンドポイントは、SAP リクエストオブジェクトを含むメッセージボディーを含むメッセージを受信することを想定しており、SAP レスポンスオブジェクトを含むメッセージボディーを含むメッセージを返します。SAP のリクエストとレスポンスは、各フィールドが事前定義されたデータ型を持つ名前付きフィールドを含む固定マップデータ構造です。

SAP リクエストとレスポンスの名前付きフィールドは、SAP エンドポイントに固有であり、各エンドポイントが受け入れる SAP リクエストとレスポンスのパラメーターを定義することに注意してください。SAP エンドポイントは、それに固有のリクエストとレスポンスオブジェクトを作成するファクトリーメソッドを提供します。

public class SAPEndpoint ... {
    ...
    public Structure getRequest() throws Exception;

    public Structure getResponse() throws Exception;
    ...
}
2.81.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 の値を含むフィールドを含めることができます。

注記

これらの型のインスタンスを作成して構造体に追加する必要はありません。これらのフィールド値のインスタンスは、必要に応じて、囲んでいる構造にアクセスするときにオンデマンドで作成されます。

2.81.7.3. フィールドの種類

SAP リクエストまたはレスポンスの構造オブジェクト内に存在するフィールドは、基本 または 複合 のいずれかです。基本フィールドには単一のスカラー値が含まれますが、複合フィールドには基本タイプまたは複合タイプのフィールドが 1 つ以上含まれます。

2.81.7.3.1. 基本フィールドの種類

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

フィールドタイプ

対応 Java 型

Byte Length

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': 可変長バイト配列。

2.81.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 に対応します。
2.81.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 として表されます。
2.81.7.3.4. 16 進フィールドタイプ

16 進数フィールドには生のバイナリーデータが含まれます。次の 16 進数フィールドタイプがサポートされています。

BYTE
BYTE フィールドは、基礎となる JCo および ABAP ランタイムにバイト配列として格納される固定サイズのバイト文字列であり、ABAP タイプ X に対応します。BYTE フィールドは、関連する byteLength および unicodeByteLength プロパティーでフィールド長を宣言します。BYTE フィールドの場合、これらのプロパティーは 1 ~ 65535 バイトの値を持つことができ、両方のプロパティーが同じ値になります。BYTE フィールドの値は、Java では byte オブジェクトとして表されます。
2.81.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 オブジェクトとして表されます。
2.81.7.3.6. 複雑なフィールドタイプ

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

フィールドタイプ

対応 Java 型

Byte Length

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': テーブル

2.81.7.3.7. 構造体フィールドタイプ

STRUCTURE 項目には構造オブジェクトが含まれ、基礎となる JCo および ABAP ランタイムに ABAP 構造レコードとして格納されます。ABAP タイプ u または v のいずれかに対応します。STRUCTURE 項目の値は、Java ではインターフェイス org.fusesource.camel.component.sap.model.rfc.Structure を持つ構造オブジェクトとして表されます。

2.81.7.3.8. テーブルフィールドタイプ

TABLE フィールドにはテーブルオブジェクトが含まれ、基礎となる JCo および ABAP ランタイムに ABAP 内部テーブルとして格納されます。ABAP タイプ h に対応します。フィールドの値は、インタフェース org.fusesource.camel.component.sap.model.rfc.Table を持つテーブルオブジェクトによって Java で表されます。

2.81.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 のドキュメントを参照してください。

注記

間違った型の行構造値を追加または設定しようとすると、例外が出力されます。

2.81.8. IDoc のメッセージ本文

2.81.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
2.81.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();

2.81.9. ドキュメント属性

IDoc ドキュメント属性の表に、Document オブジェクトに設定できる制御レコード属性を示します。

表2.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

テスト

テストフラグ

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

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

// Java
document.setIDocType("FLCUSTOMER_CREATEFROMDATA01");
document.setIDocTypeExtension("");
document.setMessageType("FLCUSTOMER_CREATEFROMDATA");
2.81.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>

2.81.10. トランザクションサポート

2.81.10.1. BAPI トランザクションモデル

SAP コンポーネントは、SAP とのアウトバウンド通信用に BAPI トランザクションモデルをサポートしています。true に設定されたトランザクションオプションを含む URL を持つ宛先エンドポイントは、必要に応じて、エンドポイントのアウトバウンド接続でステートフルセッションを開始し、Camel Synchronization オブジェクトをエクスチェンジに登録します。この Synchronization オブジェクトは、BAPI サービスメソッド BAPI_TRANSACTION_COMMIT を呼び出し、メッセージエクスチェンジの処理が完了するとステートフルセッションを終了します。メッセージエクスチェンジの処理が失敗した場合、Synchronization オブジェクトは BAPI サーバーメソッド BAPI_TRANSACTION_ROLLBACK を呼び出し、ステートフルセッションを終了します。

2.81.10.2. RFC トランザクションモデル

tRFC プロトコルは、一意のトランザクション識別子 (TID) で各トランザクション要求を識別することにより、AT-MOST-ONCE の配信と処理の保証を実現します。TID は、プロトコルで送信される各要求に付随します。tRFC プロトコルを使用する送信側アプリケーションは、要求を送信するときに、要求の各インスタンスを一意の TID で識別する必要があります。アプリケーションは、特定の TID を持つリクエストを複数回送信できますが、プロトコルは、リクエストが受信側システムで配信され、処理されるのは多くても 1 回であることを保証します。アプリケーションは、要求の送信時に通信エラーまたはシステムエラーが発生した場合に、指定された TID を使用してリクエストを再送信することを選択できます。したがって、そのリクエストが受信側システムで配信および処理されたかどうかは不明です。通信エラーが発生したときにリクエストを再送信することにより、tRFC プロトコルを使用するクライアントアプリケーションは、そのリクエストの配信と処理を確実に 1 回だけ保証できます。

2.81.10.3. どのトランザクションモデルを使用するか?

BAPI トランザクションは、SAP データベースで BAPI メソッドまたは RFC 関数によって実行される永続的なデータ変更に ACID 保証を課すという意味で、アプリケーションレベルのトランザクションです。RFC トランザクションは、BAPI メソッドや RFC 機能への要求に対して配信保証 (AT-MOST-ONCE、EXACTLY-ONCE、EXACTLY-ONCE-IN-ORDER) を課すという意味で、通信トランザクションです。

2.81.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 ランタイムにインストールする必要があります。

2.81.10.5. トランザクション RFC サーバーエンドポイント

次のサーバーエンドポイントは、RFC トランザクションをサポートしています。

  • sap-trfc-server

トランザクションリクエストを処理する Camel エクスチェンジで処理エラーが発生すると、Camel は標準のエラー処理メカニズムを通じて処理エラーを処理します。エクスチェンジを処理する Camel ルートがエラーを呼び出し元に伝播するように設定されている場合、エクスチェンジを開始した SAP サーバーエンドポイントは失敗を記録し、送信側の SAP システムにエラーが通知されます。送信側の SAP システムは、同じ TID を持つ別のトランザクションリクエストを送信して応答し、リクエストを再度処理できます。

2.81.11. RFC の XML シリアライゼーション

SAP 要求および応答オブジェクトは、これらのオブジェクトを XML ドキュメントとの間でシリアル化できるようにする XML シリアル化形式をサポートしています。

2.81.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 自体の名前です。

2.81.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>
2.81.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 を指定して構造をマーシャリングおよびアンマーシャリングする場合に重要になります。

2.81.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 を指定して構造をマーシャリングおよびアンマーシャリングする場合に重要になります。

2.81.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"/>
2.81.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"

2.81.12. IDoc の XML シリアル化

IDoc メッセージ本文は、組み込み型コンバーターを使用して、XML 文字列形式にシリアル化できます。

2.81.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///
2.81.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">
2.81.12.3. XML 形式のサンプル IDoc メッセージ本文

IDoc メッセージを String に変換すると、ルート要素が idoc:Document (単一のドキュメントの場合) または idoc:DocumentList (ドキュメントのリストの場合) のいずれかである XML ドキュメントにシリアライズされます。これは、idoc:Document 要素にシリアライズされた単一の IDoc ドキュメントであることを示しています。

例2.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>

2.81.13. 例 1: SAP からのデータの読み取り

この例は、SAP から FlightCustomer ビジネスオブジェクトデータを読み取るルートを示しています。ルートは、データを取得するために SAP 同期 RFC 宛先エンドポイントを使用して、FlightCustomer BAPI メソッド BAPI_FLCUST_GETLIST を呼び出します。

2.81.13.1. ルートの Java DSL

サンプルルートの Java DSL は次のとおりです。

from("direct:getFlightCustomerInfo")
    .to("bean:createFlightCustomerGetListRequest")
    .to("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST")
    .to("bean:returnFlightCustomerInfo");
2.81.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>
2.81.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);
}
2.81.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);

}

2.81.14. 例 2: SAP へのデータの書き込み

この例は、SAP で FlightTrip ビジネスオブジェクトインスタンスを作成するルートを示しています。ルートは、FlightTrip BAPI メソッド BAPI_FLTRIP_CREATE を呼び出し、宛先エンドポイントを使用してオブジェクトを作成します。

2.81.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");
2.81.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>
2.81.14.3. トランザクションサポート

SAP エンドポイントの URL では、transacted オプションが true に設定されていることに注意してください。このオプションを有効にすると、エンドポイントは、RFC 呼び出しを呼び出す前に SAP トランザクションセッションが開始されていることを確認します。このエンドポイントの RFC は SAP で新しいデータを作成するため、ルートの変更を SAP で永続的にするには、このオプションが必要です。

2.81.14.4. リクエストパラメーターの設定

createFlightTripRequest および returnFlightTripResponse Bean は、前の例で示したのと同じ一連の操作に従って、リクエストパラメーターを SAP リクエストに入力し、SAP レスポンスからレスポンスパラメーターをそれぞれ展開します。

2.81.15. 例 3: SAP からのリクエストの処理

この例では、SAP から BOOK_FLIGHT RFC へのリクエストを処理するルートを示します。これは、ルートによって実装されます。さらに、JAXB を使用して SAP リクエストオブジェクトとレスポンスオブジェクトをカスタム Bean にアンマーシャリングおよびマーシャリングする、コンポーネントの XML シリアライゼーションサポートを示します。

このルートは、旅行代理店 FlightCustomer に代わって FlightTrip ビジネスオブジェクトを作成します。ルートは、最初に、SAP サーバーエンドポイントによって受信された SAP リクエストオブジェクトをカスタム JAXB Bean に非整列化します。次に、このカスタム Bean はエクスチェンジで 3 つのサブルートにマルチキャストされ、フライト旅行の作成に必要な旅行代理店、フライト接続、乗客情報が収集されます。最後のサブルートは、前の例で示したように、SAP でフライトトリップオブジェクトを作成します。最後のサブルートは、SAP レスポンスオブジェクトにマーシャリングされ、サーバーエンドポイントによって返されるカスタム JAXB Bean も作成して返します。

2.81.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);
2.81.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>
2.81.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;

    ...
}
2.81.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;

    ...
}
注記

レスポンスオブジェクトの複雑なパラメーターフィールドは、応答の子要素としてシリアル化されます。

2.81.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;

    ...
}
2.81.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;

    ...
}
2.81.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;

    ...
}

2.82. XQuery

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

2.82.1. 含まれるもの

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

2.82.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-saxon</artifactId>
</dependency>

2.82.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

2.83. Scheduler

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

2.83.1. 含まれるもの

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

2.83.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-scheduler</artifactId>
</dependency>

2.84. SEDA

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

2.84.1. 含まれるもの

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

2.84.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-seda</artifactId>
</dependency>

2.85. Slack

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

2.85.1. 含まれるもの

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

2.85.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-slack</artifactId>
</dependency>

2.85.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.86. SNMP

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

2.86.1. 含まれるもの

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

2.86.2. Maven コーディネート

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-snmp</artifactId>
</dependency>

2.87. SOAP dataformat

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

2.87.1. 含まれるもの

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

2.87.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-soap</artifactId>
</dependency>

2.88. Splunk

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

2.88.1. 含まれるもの

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

2.88.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-splunk</artifactId>
</dependency>

2.88.3. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.89. SQL

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

2.89.1. 含まれるもの

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

2.89.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-sql</artifactId>
</dependency>

2.89.3. 追加の Camel Quarkus 設定

2.89.3.1. データソースの設定

このエクステンションは、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 コンポーネントのドキュメントを参照してください。

2.89.3.1.1. Quarkus Dev Services によるゼロ設定

開発モードとテストモードでは、Configuration Free Databases を利用できます。Camel SQL コンポーネントは、選択した JDBC ドライバータイプに一致するデータベースのローカルコンテナー化インスタンスを指す DataSource を使用するように自動的に設定されます。

2.89.3.2. SQL スクリプト

クラスパスからスクリプトファイルを参照するために sql または sql-stored エンドポイントを設定する場合は、以下の設定プロパティーを設定して、それらがネイティブモードで利用できるようにします。

quarkus.native.resources.includes = queries.sql, sql/*.sql
2.89.3.3. ネイティブモードでの SQL 集約リポジトリー

ネイティブモードで JdbcAggregationRepository などの SQL 集約リポジトリーを使用するには、ネイティブのシリアライズサポートを有効化 する必要があります。

さらに、エクスチェンジボディがカスタムタイプである場合、クラス宣言に @RegisterForReflection(serialization = true) のアノテーションを付けてシリアライズ用に登録する必要があります。

2.90. Telegram

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

2.90.1. 含まれるもの

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

2.90.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-telegram</artifactId>
</dependency>

2.90.3. 使用方法

2.90.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>

2.90.5. ネイティブモードの SSL

このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=trueapplication.properties に追加する必要はありません。Quarkus SSL ガイド も参照してください。

2.91. タイマー

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

2.91.1. 含まれるもの

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

2.91.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-timer</artifactId>
</dependency>

2.92. Validator

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

2.92.1. 含まれるもの

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

2.92.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-validator</artifactId>
</dependency>

2.93. Velocity

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

2.93.1. 含まれるもの

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

2.93.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-velocity</artifactId>
</dependency>

2.93.3. 使用方法

2.93.3.1. ネイティブモードのドメインオブジェクトとしてのカスタムボディ

カスタムオブジェクトをメッセージ本文として使用し、ネイティブモードのテンプレートでそのプロパティーを参照する場合、すべてのクラスをリフレクション用に登録する必要があります (ドキュメント を参照)。

以下に例を示します。

@RegisterForReflection
public interface CustomBody {
}

2.93.4. ネイティブモードの allowContextMapAll オプション

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

2.93.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

2.94. Vert.x HTTP クライアント

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

2.94.1. 含まれるもの

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

2.94.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-vertx-http</artifactId>
</dependency>

2.94.3. ネイティブモードの transferException オプション

ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。

また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。

@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)

2.94.4. 追加の Camel Quarkus 設定

2.94.5. ネイティブモードの allowJavaSerializedObject オプション

ネイティブモードで allowJavaSerializedObject オプションを使用する場合、シリアル化のサポートを有効にする必要がある場合があります。詳細は、ネイティブモードのユーザーガイド を参照してください。

2.94.5.1. 文字エンコーディング

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

2.95. Vert.x WebSocket

このエクステンションを使用すると、WebSocket サーバーとして、または既存の WebSocket に接続するクライアントとして機能する WebSocket エンドポイントを作成できます。

これは、quarkus-vertx-http エクステンションによって提供される Eclipse Vert.x HTTP サーバー上にビルドされます。

2.95.1. 含まれるもの

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

2.95.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-vertx-websocket</artifactId>
</dependency>

2.95.3. 使用方法

2.95.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 サーバー設定値の値と正確に一致する必要があります。一致しないと、実行時に例外が出力されます。

2.95.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 サーバーへのメッセージを生成する場合は、常にホスト名とポート (必要な場合) を指定する必要があります。

2.95.4. 追加の Camel Quarkus 設定

2.95.4.1. Vert.x WebSocket サーバーの設定

Vert.x WebSocket サーバーの設定は Quarkus によって管理されます。設定オプションの完全なリストについては、Quarkus HTTP 設定ガイド を参照してください。

Vert.x WebSocket サーバーの SSL を設定するには、SSL によるセキュアな接続に関するガイド に従ってください。SSLContextParameters を使用した SSL 用のサーバーの設定は現在サポートされていないことに注意してください。

2.95.4.2. 文字エンコーディング

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

2.96. XML IO DSL

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

2.96.1. 含まれるもの

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

2.96.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-xml-io-dsl</artifactId>
</dependency>

2.96.3. 追加の Camel Quarkus 設定

2.96.3.1. XML ファイルのエンコーディング

デフォルトでは、一部の XML ファイルエンコーディングはそのままではネイティブモードで機能しない場合があります。修正方法は、文字エンコーディング のセクションを確認してください。

2.97. XML JAXP

XML JAXP タイプコンバーターおよびパーサー

2.97.1. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-xml-jaxp</artifactId>
</dependency>

2.98. XPath

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

2.98.1. 含まれるもの

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

2.98.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-xpath</artifactId>
</dependency>

2.98.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

2.99. XSLT Saxon

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

2.99.1. 含まれるもの

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

2.99.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-xslt-saxon</artifactId>
</dependency>

2.100. XSLT

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

2.100.1. 含まれるもの

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

2.100.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-xslt</artifactId>
</dependency>

2.100.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 モードでのみサポートされています。

2.100.3.1. 設定

TransformerFactory 機能は、次のプロパティーを使用して設定できます。

quarkus.camel.xslt.features."http\://javax.xml.XMLConstants/feature/secure-processing"=false
2.100.3.2. エクステンション機能のサポート

Xalan のエクステンション機能 は、次の場合にのみ正しく機能します。

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

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

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

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>

 

{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。

2.101. YAML DSL

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

2.101.1. 含まれるもの

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

2.101.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-yaml-dsl</artifactId>
</dependency>

2.101.3. 使用方法

2.101.3.1. ネイティブモード

以下の構造を Camel YAML DSL マークアップ内で定義する場合は、リフレクション用のクラスを登録する必要があります。詳細は、ネイティブモード のガイドを参照してください。

2.101.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 {
}
2.101.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 {
}

2.102. Zip デフレート圧縮

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

2.102.1. 含まれるもの

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

2.102.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-zip-deflater</artifactId>
</dependency>

2.103. Zip ファイル

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

2.103.1. 含まれるもの

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

2.103.2. Maven コーディネート

code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成

または、既存のプロジェクトに座標を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-zipfile</artifactId>
</dependency>

法律上の通知

Copyright © 2024 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 は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.