私はSOAP Webサービス用のクライアントを構築しています。私はWSDLからJaxWS Webサービスクライアントを構築するように指示して、クライアントコードのほとんどをIntelliJ IDEAで自動生成しました。JaxWS:基本認証を使用したWebサービス
ウェブサービスはさまざまなURL(テスト、統合、制作)で動作するため、クライアントでサービスURLを設定できる必要があります。私のコードは次のようになります:
String urlString = props.getProperty(URL);
service = new RequestMultiTransportService(new URL(urlString),
new QName("http://some.uri.com/",
"RequestMultiTransportService"));
Boolean useBasicAuth = Boolean.parseBoolean(props.getProperty(BASICAUTH));
RequestMultiTransport rmt = service.getRequestMultiTransportPort();
if (useBasicAuth) {
String user = props.getProperty(AUTHUSER);
String pw = props.getProperty(AUTHPW);
Map requestContext = ((BindingProvider)rmt).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, user);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pw);
}
ProvisioningResponse response = rmt.send("some", "params", "...");
ご覧のとおり、サービスには基本認証が必要な場合があります。実際のリクエストに対して基本認証を設定することはできますが、WSDLファイル(コンストラクタRequestMultiTransportService
で行われます)のロード用に設定することはできません。 RequestMultiTransportService
はIDEAによって自動生成され、コンストラクタはスーパーコンストラクタを呼び出すだけで、javax.xml.ws.Service
の1つです。
Webサービスに基本認証が必要な場合は、urlString
にあるWSDLファイルを取得するためのユーザー/パスワードが提供されないため、コードが失敗します。 WSDLファイルをローカルに保存し、URLにfile://
というURLを指定することで、考えられる回避策が考えられました。しかし、WSDLファイルで定義されているサービスロケーションが異なり、WSDLファイルからロードされたservice
オブジェクトのサービスURLを変更できないように見えるため、これは私の要件を満たしません。
基本認証でWSDLファイルを取得するソリューションはありますか?
JAX-WSはバグのように見えません(最も関連性の高いものは[JAX_WS-1]です(http://java.net/jira/browse/JAX_WS-1?focusedCommentId= 15246#action_15246))。 JAX-WSは終わりにURLConnectionを使用するので、回避策は[Authenticator'](http://stackoverflow.com/a/496707/267197)を使用することです。 –
これが可能かもしれませんが、回避策はグローバルプロパティを設定し、同じ環境で実行される他のサービスを妨害する可能性があるという問題があります。 – flyx
JAX-WSのバグを起こすだけです。おそらくこれはあなたができる最高のものです。 –