18.4. エンドポイントオプション


CXF エンドポイントは、URI 構文を使用して設定されます。

cxf:beanId:address

パスおよびクエリーパラメーターを使用します。

18.4.1. パスパラメーター (2 パラメーター)

名前説明デフォルトタイプ

beanId (共通)

既存の設定済み CxfEndpoint を検索するには。bean: を接頭辞として使用する必要があります。

 

String

住所 (サービス)

サービス公開アドレス。

 

String

18.4.2. クエリーパラメーター (35 パラメーター)

名前説明デフォルトタイプ

dataFormat (共通)

CXF エンドポイントでサポートされるデータタイプメッセージ。

列挙値:

  • PAYLOAD
  • RAW
  • MESSAGE
  • CXF_MESSAGE
  • POJO

POJO

DataFormat

ラップスタイル (共通)

パラメーターが SOAP 本文でどのように表現されるかを記述する WSDL スタイル。値が false の場合、CXF は document-literal のラップされていないスタイルを選択します。値が true の場合、CXF は document-literal のラップされたスタイルを選択します。

 

Boolean

bridgeErrorHandler (consumer)

consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer (上級))

consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer (上級))

consumer がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

cookieHandler (producer)

HTTP セッションを維持するように Cookie ハンドラーを設定します。

 

CookieHandler

defaultOperationName (producer)

このオプションは、リモートサービスを呼び出す CxfProducer によって使用されるデフォルトの operationName を設定します。

 

String

defaultOperationNamespace (producer)

このオプションは、リモートサービスを呼び出す CxfProducer によって使用されるデフォルトの operationNamespace を設定します。

 

String

hostnameVerifier (producer)

使用するホスト名ベリファイア。# 表記を使用して、レジストリーから HostnameVerifier を参照します。

 

HostnameVerifier

lazyStartProducer (producer)

最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。

false

boolean

sslContextParameters (producer)

Camel SSL 設定リファレンス。# 表記を使用して、SSL コンテキストを参照します。

 

SSLContextParameters

ラップ (producer)

CXF エンドポイント producer が呼び出す操作の種類。

false

boolean

synchronous (producer (上級))

同期処理を厳密に使用するかどうかを設定します。

false

boolean

allowStreaming (上級)

このオプションは、CXF コンポーネントが PAYLOAD モードで実行されている場合に、着信メッセージを DOM 解析して DOM 要素にするか、場合によってはストリーミングを許可する javax.xml.transform.Source オブジェクトとしてペイロードを保持するかを制御します。

 

Boolean

bus (上級)

カスタム設定の CXF バスを使用するには。

 

バス

continuationTimeout (上級)

このオプションは、CXF サーバーが Jetty またはサーブレットトランスポートを使用している場合にデフォルトで CxfConsumer で使用できる CXF 継続タイムアウトを設定するために使用されます。

30000

long

cxfBinding (上級)

カスタム CxfBinding を使用して、Camel メッセージと CXF メッセージ間のバインディングを制御します。

 

CxfBinding

cxfConfigurer (上級)

このオプションは、プログラムによる方法での CXF エンドポイントの設定をサポートする org.apache.camel.component.cxf.CxfEndpointConfigurer の実装を適用できます。ユーザーは、CxfEndpointConfigurer の configure{ServerClient} メソッドを実装することで、CXF サーバーとクライアントを設定できます。

 

CxfConfigurer

defaultBus (上級)

CXF エンドポイントが独自にバスを作成するときに、デフォルトのバスを設定します。

false

boolean

headerFilterStrategy (上級)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

mergeProtocolHeaders (上級)

プロトコルヘッダーをマージするかどうか。有効にすると、Camel と CXF の間でヘッダーを伝播する際の一貫性と類似性が高まります。詳細については、CAMEL-6393 を参照してください。

false

boolean

mtomEnabled (上級)

MTOM (添付ファイル) を有効にします。これには、POJO または PAYLOAD データ形式モードを使用する必要があります。

false

boolean

properties (上級)

マップのキーと値のペアを使用して、追加の CXF オプションを設定します。たとえば、SOAP 障害でスタックトレースを有効にするには、properties.faultStackTraceEnabled=true とします。

 

マップ

skipPayloadMessagePartCheck (上級)

SOAP メッセージの検証を無効にするかどうかを設定します。

false

boolean

loggingFeatureEnabled (logging)

このオプションは、インバウンドおよびアウトバウンドの SOAP メッセージをログに書き込む CXF ログ機能を有効にします。

false

boolean

loggingSizeLimit (logging)

ロギング機能が有効になっているときにロガーが出力するバイト数の合計サイズを制限するには、制限なしの場合は -1 を指定します。

49152

int

skipFaultLogging (ロギング)

このオプションは、PhaseInterceptorChain がキャッチした Fault のログ記録をスキップするかどうかを制御します。

false

boolean

password (セキュリティー)

このオプションは、CXF クライアントのパスワードの基本認証情報を設定するために使用されます。

 

String

username (セキュリティー)

このオプションは、CXF クライアントのユーザー名の基本認証情報を設定するために使用されます。

 

String

bindingId (service)

使用するサービスモデルの bindingId。

 

String

portName (サービス)

このサービスが実装しているエンドポイント名で、wsdl:portname にマップされます。ns:PORT_NAME の形式で、ns はこのスコープで有効な名前空間接頭辞です。

 

String

publishedEndpointUrl (service)

このオプションは、サービスアドレス URL と wsd でアクセスできる WSDL から発行された endpointUrl をオーバーライドできます。

 

String

serviceClass (サービス)

JSR181 アノテーションを持つかどうかにかかわらず、SEI (Service Endpoint Interface) クラスのクラス名。

 

クラス

サービス名 (サービス)

このサービスが実装しているサービス名で、wsdl:servicename にマップされます。

 

String

wsdlURL (サービス)

WSDL のロケーション。クラスパス、ファイルシステム、またはリモートでホストできます。

 

String

serviceNameportNameQNames であるため、これらを指定する場合は、上記の例に示すように {namespace} を前に付けてください。

18.4.3. データ形式の説明

Apache Camel では、Camel CXF コンポーネントがルートを Web サービスと統合するための鍵となります。Camel CXF コンポーネントを使用して、次のいずれかの方法で使用できる CXF エンドポイントを作成できます。

  • consumer — (ルートの開始時) は、ルートと統合される Web サービスインスタンスを表します。ルートに挿入されるペイロードのタイプは、エンドポイントの dataFormat オプションの値によって異なります。
  • producer — (ルートの他のポイントで) WS クライアントプロキシーを表し、現在の交換オブジェクトをリモート Web サービスでの操作呼び出しに変換します。現在の交換の形式は、エンドポイントの dataFormat 設定と一致する必要があります。
DataFormat説明

POJO

POJO (Plain old Java objects) は、ターゲットサーバーで呼び出されるメソッドへの Java パラメーターです。プロトコル JAX-WS ハンドラーと論理 JAX-WS ハンドラーの両方がサポートされています。

PAYLOAD

PAYLOAD は、CXF エンドポイントのメッセージ設定が適用された後のメッセージペイロード (soap:body の内容) です。Protocol JAX-WS ハンドラーのみがサポートされています。論理 JAX-WS ハンドラーはサポートされていません。

RAW

RAW モードは、トランスポート層から受信した生のメッセージストリームを提供します。ストリームに触れたり変更したりすることはできません。この種の DataFormat を使用している場合、CXF インターセプターの一部が削除されるため、camel-cxf consumer の後に SOAP ヘッダーが表示されません。JAX-WS ハンドラーはサポートされていません。

CXF_MESSAGE

CXF_MESSAGE を使用すると、トランスポート層からのメッセージを生の SOAP メッセージに変換することで、CXF インターセプターの全機能を呼び出すことができます。

交換プロパティー CamelCXFDataFormat を取得することで、交換のデータ形式モードを判別できます。交換キー定数は org.apache.camel.component.cxf.common.message.CxfConstants.DATA_FORMAT_PROPERTY で定義されています。

18.4.4. CXF の LoggingOutInterceptor を RAW モードで有効にする方法

CXF の LoggingOutInterceptor は、ロギングシステム (Java Util Logging) に送信されるアウトバウンドメッセージを出力します。LoggingOutInterceptorPRE_STREAM フェーズにあるため (ただし、PRE_STREAM フェーズは RAW モードでは削除されます)、WRITE フェーズ中に実行されるように LoggingOutInterceptor を設定する必要があります。以下に例を示します。

@Bean
public CxfEndpoint serviceEndpoint(LoggingOutInterceptor loggingOutInterceptor) {
    CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint();
    cxfEndpoint.setAddress("http://localhost:" + port
                            + "/services" + SERVICE_ADDRESS);
    cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.HelloService.class);
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("dataFormat", "RAW");
    cxfEndpoint.setProperties(properties);
    cxfEndpoint.getOutInterceptors().add(loggingOutInterceptor);
    return cxfEndpoint;
}


@Bean
public LoggingOutInterceptor loggingOutInterceptor() {
    LoggingOutInterceptor logger = new LoggingOutInterceptor("write");
    return logger;
}

18.4.5. RelayHeaders オプションの説明

JAXWS WSDL ファーストの開発者の観点から見ると、帯域内 ヘッダーと 帯域外 ヘッダーがあります。

インバンド ヘッダーは、SOAP ヘッダーなどのエンドポイントの WSDL バインディングコントラクトの一部として明示的に定義されるヘッダーです。

アウトオブバンド ヘッダーは、ネットワーク経由でシリアル化されるヘッダーですが、明示的に WSDL バインディングコントラクトの一部ではありません。

ヘッダーの中継/フィルタリングは双方向です。

ルートに CXF エンドポイントがあり、開発者が SOAP ヘッダーなどのオンザワイヤヘッダーをルートに沿ってリレーして、たとえば別の JAXWS エンドポイントで消費する必要がある場合、relayHeaderstrue に設定する必要があります。デフォルト値。

18.4.6. POJO モードでのみ使用可能

relayHeaders=true は、ヘッダーをリレーする意図を表します。特定のヘッダーが中継されるかどうかの実際の決定は、MessageHeadersRelay インターフェイスを実装するプラグ可能なインスタンスに委譲されます。MessageHeadersRelay の具体的な実装を調べて、ヘッダーを中継する必要があるかどうかを判断します。既知の SOAP 名前空間にバインドする SoapMessageHeadersRelay の実装がすでにあります。現在、帯域外ヘッダーのみがフィルタリングされ、relayHeaders=true の場合、帯域内ヘッダーは常に中継されます。ネームスペースがランタイムに不明なヘッダーがワイヤ上にある場合、フォールバック DefaultMessageHeadersRelay が使用されます。これにより、すべてのヘッダーの中継が単純に許可されます。

RelayHeaders=false 設定は、帯域内および帯域外のすべてのヘッダーをドロップする必要があることを指定します。

独自の MessageHeadersRelay 実装をプラグインして、リレーのリストをオーバーライドまたは追加することができます。プリロードされたリレーインスタンスをオーバーライドするには、MessageHeadersRelay 実装がオーバーライドしようとしている名前空間と同じ名前空間を提供していることを確認してください。また、オーバーライドするリレーは、オーバーライドしようとしているすべての名前空間にサービスを提供する必要があることに注意してください。そうしないと、インスタンスマッピングをリレーする名前空間にあいまいさが生じるため、ルートの起動時に実行時例外が出力されます。

<cxf:cxfEndpoint ...>
   <cxf:properties>
     <entry key="org.apache.camel.cxf.message.headers.relays">
       <list>
         <ref bean="customHeadersRelay"/>
       </list>
     </entry>
   </cxf:properties>
 </cxf:cxfEndpoint>
 <bean id="customHeadersRelay" class="org.apache.camel.component.cxf.soap.headers.CustomHeadersRelay"/>

ここでヘッダーをリレー/ドロップする方法を示すテストを見てください。

https://github.com/apache/camel/blob/main/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/CxfMessageHeadersRelayTest.java

  • POJO および PAYLOAD モードがサポートされています。POJO モードでは、CXF によってインバンドヘッダーが処理され、ヘッダーリストから削除されているため、フィルタリングに使用できるのはアウトオブバンドメッセージヘッダーのみです。インバンドヘッダーは、POJO モードで MessageContentList に組み込まれます。camel-cxf コンポーネントは、インバンドヘッダーを MessageContentList から削除しようとします。インバンドヘッダーのフィルタリングが必要な場合は、PAYLOAD モードを使用するか、(非常に簡単な) CXF インターセプター/JAXWS ハンドラーを CXF エンドポイントにプラグインしてください。
  • メッセージヘッダーリレーメカニズムは CxfHeaderFilterStrategy にマージされました。relayHeaders オプション、そのセマンティクス、およびデフォルト値は同じままですが、CxfHeaderFilterStrategy のプロパティーです。以下はその設定例です。
@Bean
public HeaderFilterStrategy dropAllMessageHeadersStrategy() {
    CxfHeaderFilterStrategy headerFilterStrategy = new CxfHeaderFilterStrategy();
    headerFilterStrategy.setRelayHeaders(false);
    return headerFilterStrategy;
}

その後、エンドポイントは CxfHeaderFilterStrategy を参照できます。

@Bean
public CxfEndpoint routerNoRelayEndpoint(HeaderFilterStrategy dropAllMessageHeadersStrategy) {
    CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint();
    cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.soap.headers.HeaderTester.class);
    cxfEndpoint.setAddress("/CxfMessageHeadersRelayTest/HeaderService/routerNoRelayEndpoint");
    cxfEndpoint.setWsdlURL("soap_header.wsdl");
    cxfEndpoint.setEndpointNameAsQName(
        QName.valueOf("{http://apache.org/camel/component/cxf/soap/headers}SoapPortNoRelay"));
    cxfEndpoint.setServiceNameAsQName(SERVICENAME);
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("dataFormat", "PAYLOAD");
    cxfEndpoint.setProperties(properties);
    cxfEndpoint.setHeaderFilterStrategy(dropAllMessageHeadersStrategy);
    return cxfEndpoint;
}

@Bean
public CxfEndpoint serviceNoRelayEndpoint(HeaderFilterStrategy dropAllMessageHeadersStrategy) {
    CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint();
    cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.soap.headers.HeaderTester.class);
    cxfEndpoint.setAddress("http://localhost:" + port + "/services/CxfMessageHeadersRelayTest/HeaderService/routerNoRelayEndpointBackend");
    cxfEndpoint.setWsdlURL("soap_header.wsdl");
    cxfEndpoint.setEndpointNameAsQName(
        QName.valueOf("{http://apache.org/camel/component/cxf/soap/headers}SoapPortNoRelay"));
    cxfEndpoint.setServiceNameAsQName(SERVICENAME);
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("dataFormat", "PAYLOAD");
    cxfEndpoint.setProperties(properties);
    cxfEndpoint.setHeaderFilterStrategy(dropAllMessageHeadersStrategy);
    return cxfEndpoint;
}

次に、ルートを次のように設定します。

rom("cxf:bean:routerNoRelayEndpoint")
    .to("cxf:bean:serviceNoRelayEndpoint");
  • MessageHeadersRelay インターフェイスがわずかに変更され、名前が MessageHeaderFilter に変更されました。CxfHeaderFilterStrategy のプロパティーです。ユーザー定義のメッセージヘッダーフィルターを設定する例を次に示します。
@Bean
public HeaderFilterStrategy customMessageFilterStrategy() {
    CxfHeaderFilterStrategy headerFilterStrategy = new CxfHeaderFilterStrategy();
    List<MessageHeaderFilter> headerFilterList = new ArrayList<MessageHeaderFilter>();
    headerFilterList.add(new SoapMessageHeaderFilter());
    headerFilterList.add(new CustomHeaderFilter());
    headerFilterStrategy.setMessageHeaderFilters(headerFilterList);
    return headerFilterStrategy;
}
  • relayHeaders に加えて、次のプロパティーを CxfHeaderFilterStrategy で設定できます。
名前必須説明

relayHeaders

いいえ

すべてのメッセージヘッダーは、メッセージヘッダーフィルターによって処理されます タイプ: booleanデフォルト: true

relayAllMessageHeaders

いいえ

すべてのメッセージヘッダーが伝達されます (メッセージヘッダーフィルターによる処理なし) タイプ: booleanデフォルト: false

allowFilterNamespaceClash

いいえ

アクティベーション名前空間で 2 つのフィルターが重複する場合、プロパティーはその処理方法を制御します。値が true の場合、最後のものが優先されます。値が false の場合、例外が出力されます Type : boolean Default : false

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.