18.4. エンドポイントオプション
CXF エンドポイントは、URI 構文を使用して設定されます。
cxf:beanId:address
パスおよびクエリーパラメーターを使用します。
18.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
beanId (共通) | 既存の設定済み CxfEndpoint を検索するには。bean: を接頭辞として使用する必要があります。 | String | |
住所 (サービス) | サービス公開アドレス。 | String |
18.4.2. クエリーパラメーター (35 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
dataFormat (共通) | CXF エンドポイントでサポートされるデータタイプメッセージ。 列挙値:
| 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 がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| 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 |
serviceName
と portName
は QNames であるため、これらを指定する場合は、上記の例に示すように {namespace} を前に付けてください。
18.4.3. データ形式の説明
Apache Camel では、Camel CXF コンポーネントがルートを Web サービスと統合するための鍵となります。Camel CXF コンポーネントを使用して、次のいずれかの方法で使用できる CXF エンドポイントを作成できます。
- consumer — (ルートの開始時) は、ルートと統合される Web サービスインスタンスを表します。ルートに挿入されるペイロードのタイプは、エンドポイントの dataFormat オプションの値によって異なります。
- producer — (ルートの他のポイントで) WS クライアントプロキシーを表し、現在の交換オブジェクトをリモート Web サービスでの操作呼び出しに変換します。現在の交換の形式は、エンドポイントの dataFormat 設定と一致する必要があります。
DataFormat | 説明 |
---|---|
| POJO (Plain old Java objects) は、ターゲットサーバーで呼び出されるメソッドへの Java パラメーターです。プロトコル JAX-WS ハンドラーと論理 JAX-WS ハンドラーの両方がサポートされています。 |
|
|
|
|
|
|
交換プロパティー CamelCXFDataFormat
を取得することで、交換のデータ形式モードを判別できます。交換キー定数は org.apache.camel.component.cxf.common.message.CxfConstants.DATA_FORMAT_PROPERTY
で定義されています。
18.4.4. CXF の LoggingOutInterceptor を RAW モードで有効にする方法
CXF の LoggingOutInterceptor
は、ロギングシステム (Java Util Logging) に送信されるアウトバウンドメッセージを出力します。LoggingOutInterceptor
は PRE_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 エンドポイントで消費する必要がある場合、relayHeaders
を true
に設定する必要があります。デフォルト値。
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"/>
ここでヘッダーをリレー/ドロップする方法を示すテストを見てください。
-
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
で設定できます。
名前 | 必須 | 説明 |
---|---|---|
| いいえ |
すべてのメッセージヘッダーは、メッセージヘッダーフィルターによって処理されます タイプ: |
| いいえ |
すべてのメッセージヘッダーが伝達されます (メッセージヘッダーフィルターによる処理なし) タイプ: |
| いいえ |
アクティベーション名前空間で 2 つのフィルターが重複する場合、プロパティーはその処理方法を制御します。値が |