150.18. 高度な使用方法
HTTP プロデューサーをさらに制御する必要がある場合は、さまざまなクラスを設定してカスタム動作を提供できる HttpComponent
を使用する必要があります。
150.18.1. MaxConnectionsPerHost の設定
HTTP コンポーネントには、特定のコンポーネントのさまざまなグローバル設定を設定できる org.apache.commons.httpclient.HttpConnectionManager
があります。
グローバルとは、コンポーネントが作成するすべてのエンドポイントが同じ共有 HttpConnectionManager
を持つことを意味します。したがって、ホストごとの最大接続数に別の値を設定する場合は、通常使用するエンドポイント URI では なく、HTTP コンポーネントで定義する必要があります。ですから、次のようになります。
まず、Spring XML で http
コンポーネントを定義します。はい、同じスキーム名 http
を使用します。それ以外の場合、Camel は自動検出し、デフォルト設定でコンポーネントを作成します。必要なのは、これを却下して、オプションを設定できるようにすることです。以下のサンプルでは、最大接続数をデフォルトの 2 ではなく 5 に設定しています。
そして、ルートで通常どおりに使用できます。
150.18.2. プリエンプティブ認証の使用
あるエンドユーザーが、HTTPS での認証に問題があると報告しました。HTTPS サーバーが HTTP コード 401 Authorization Required を返さないことを発見したとき、問題は最終的に解決されました。解決策は、次の URI オプションを設定することでした: httpClient.authenticationPreemptive=true
150.18.3. リモートサーバーからの自己署名証明書の受け入れ
Apache Commons HTTP API でこれを行う方法を概説するいくつかのコードを含むメーリングリストディスカッションのこの リンク を参照してください。
150.18.4. HTTP クライアントの SSL の設定
JSSE 設定ユーティリティーの使用
Camel 2.8 の時点で、HTTP4 コンポーネントは Camel JSSE Configuration Utility を介した SSL/TLS 設定をサポートしています。このユーティリティーは、記述する必要があるコンポーネント固有のコードの量を大幅に削減し、エンドポイントおよびコンポーネントレベルで設定できます。次の例は、HTTP4 コンポーネントでユーティリティーを使用する方法を示しています。
このコンポーネントで使用される Apache HTTP クライアントのバージョンは、グローバルな "プロトコル" レジストリーから SSL/TLS 情報を解決します。このコンポーネントは、Camel JSSE 設定ユーティリティーの使用をサポートするために、HTTP クライアントのプロトコルソケットファクトリーの実装 org.apache.camel.component.http.SSLContextParametersSecureProtocolSocketFactory
を提供します。次の例は、プロトコルレジストリーを設定し、登録されたプロトコル情報をルートで使用する方法を示しています。
KeyStoreParameters ksp = new KeyStoreParameters(); ksp.setResource("/users/home/server/keystore.jks"); ksp.setPassword("keystorePassword"); KeyManagersParameters kmp = new KeyManagersParameters(); kmp.setKeyStore(ksp); kmp.setKeyPassword("keyPassword"); SSLContextParameters scp = new SSLContextParameters(); scp.setKeyManagers(kmp); ProtocolSocketFactory factory = new SSLContextParametersSecureProtocolSocketFactory(scp); Protocol.registerProtocol("https", new Protocol( "https", factory, 443)); from("direct:start") .to("https://mail.google.com/mail/").to("mock:results");
Apache HTTP クライアントを直接設定する
基本的に camel-http コンポーネントは Apache HTTP クライアントの上に構築されており、カスタム org.apache.camel.component.http.HttpClientConfigurer
を実装して、http クライアントを完全に制御する必要がある場合に設定を行うことができます。
ただし、キーストアとトラストストアを指定する だけ の場合は、Apache HTTP HttpClientConfigurer
を使用してこれを行うことができます。次に例を示します。
Protocol authhttps = new Protocol("https", new AuthSSLProtocolSocketFactory( new URL("file:my.keystore"), "mypassword", new URL("file:my.truststore"), "mypassword"), 443); Protocol.registerProtocol("https", authhttps);
次に、HttpClientConfigurer
を実装するクラスを作成し、上記の例に従ってキーストアまたはトラストストアを提供する https プロトコルを登録する必要があります。次に、キャメルルートビルダークラスから次のように接続できます。
HttpComponent httpComponent = getContext().getComponent("http", HttpComponent.class); httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
Spring DSL を使用してこれを行う場合、URI を使用して HttpClientConfigurer
を指定できます。以下に例を示します。
<bean id="myHttpClientConfigurer" class="my.https.HttpClientConfigurer"> </bean> <to uri="https://myhostname.com:443/myURL?httpClientConfigurerRef=myHttpClientConfigurer"/>
上記のように HttpClientConfigurer を実装し、キーストアとトラストストアを設定する限り、問題なく動作します。