ザネリは列車を見送った

ブログという名の備忘録

Axis/Axis2/JAX-WS で Basic/Digest 認証

Axis 編

普通にアクセスしようとすると以下のエラーが出る。

Exception in thread "main" AxisFault
 faultCode: {http://xml.apache.org/axis/}HTTP
 faultSubcode: 
 faultString: (401)Unauthorized
 faultActor: 
 faultNode: 
 faultDetail: 
    {}:リターンコード:  401

NTLM 認証対応と全く同じ方法でBasic 認証, Digest 認証ともに対応できた。
ちなみに Basic 認証の場合のみ、commons-httpclient のエンジンを使わなくてもいいようだ。

Axis2

普通にアクセスしようとすると以下のエラーが出る。

Exception in thread "main" org.apache.axis2.AxisFault: Transport error: 401 Error: Unauthorized

Axis2 の場合、認証方式をHttpTransportProperties.Authenticatorの中から指定する必要がある。
以下のサンプルでは Basic 認証のみ設定している。

JAX-WS

JAX-WS で作成した Web サービスクライアントは、実行時に WSDL を見に行っている。
(正直これは不要だと思う。スタブを生成した時点でいらなくなるはずだし)
認証が WSDL の URL にもかかっている場合には以下のエラーが出る。
まず WSDL の URL にアクセスしに行き、失敗すると ?wsdl パラメータをつけて再度アクセスを試みているようだ。

Exception in thread "main" com.sun.xml.internal.ws.wsdl.parser.InaccessibleWSDLException: 2 counts of InaccessibleWSDLException.

java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8080/WS/ZaneliWS.wsdl
java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8080/WS/ZaneliWS.wsdl?wsdl

認証が WSDL にはかかっておらず、Webサービスエンドポイントにかかっている場合には以下のエラーが出る。

Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 401: Unauthorized

対応方法は2通りある。
[WebService][JAX-WS] ベーシック認証が設定されているWebサービスへのアクセス方法などを参考に以下のように設定してみたが、
これでは WSDL に認証がかかっていない Basic 認証のみに対応できているようだった。

WSDL にも認証がかかっている場合やエンドポイントのみであっても Digest 認証の場合では、
JAX-WS Sharepoint 401 Unauthorized NTLMなどを参考に以下のようにして、成功を確認した。