初期化の時点で両方の経路を設定します。サービスに実際に渡された IAM オーセンティケーターを使ってください。

import java.net.InetSocketAddress;
import java.net.Proxy;
import com.ibm.cloud.sdk.core.http.HttpConfigOptions;

var proxy = new Proxy(
    Proxy.Type.HTTP,
    new InetSocketAddress("proxy.example.net", 8080));

authenticator.setProxy(proxy);

var options = new HttpConfigOptions.Builder()
    .proxy(proxy)
    .build();
service.configureClient(options);

ここで authenticator と service はアプリケーションに既に存在するオブジェクトです。トークン取得やサービス要求が始まる前に設定を適用し、通常の証明書検証は有効なままにします。アプリケーションが両方の宛先にパブリックな HTTP エンドポイントを使える場合、候補アドレスはHTTP プロキシ一覧にあります。

2 つの割り当ては別々の要求を対象にします。authenticator.setProxy は IAM トークンの経路を対象とし、service.configureClient はプロキシをサービスのトランスポートに適用します。一方を設定しても、もう一方の経路は確立されません。

失敗した場合は、失敗した要求に示されたホストを特定します。トークン取得の成功は問題をサービス経路に絞り込みますが、その経路がプロキシ設定を受け取ったことを証明するものではありません。

HttpConfigOptions は IBM Java SDK Core に由来します。古い ConversationService のサンプルを流用する場合は、古いサービス固有のネットワーククラスをコピーするのではなく、アプリケーションが選択した Core パッケージとサービス世代を使ってください。

関連記事