https soap API にアクセスしようとしています。サーバーから証明書を取得し、JRE cacerts に追加しました (証明書はキーストアで確認できます)。スタンドアロン クラスを実行し、SOAP サービスにアクセスしています。「401 認証が必要です」というエラーが表示されます。資格情報が正しいと確信しています (大文字と小文字も区別されます)。
なぜ以下の例外をスローするのか疑問に思っています:
- ERROR:return code: 401
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head> <title>401 Authorization Required</title> </head>
<body> <h1>Authorization Required</h1> <p>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.</p>
</body>
</html> return code: 401 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>401 Authorization Required</title> </head>
<body> <h1>Authorization Required</h1> <p>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.</p> </body></html>
注: 1) ユーザー名とパスワードの値は文字列です。暗号化する必要がありますか (クライアントを Java アプリケーションとして実行しているため)。webapp (https) として実行しようとしましたが、それでも同じ例外が発生します。2) システムからブラウザー (ユーザー名と pwd を使用) 経由で SOAP エンドポイントにアクセスできるため、ネットワーク関連の問題を除外できます。
// Code snippet
PSPServiceLocator pfspLocator = new PSPServiceLocator();
pfspLocator.setPSPPortEndpointAddress(strNewAddress);
PSPPort pfspPort = pfspLocator.getPSPPort();
PSPBindingStub pfspStub = (PSPBindingStub)pfspPort;
// Force HTTP/1.0
pfspStub._setProperty(
org.apache.axis.MessageContext.HTTP_TRANSPORT_VERSION, org.apache.axis.transport.http.HTTPConstants.HEADER_PROTOCOL_V10);
// Configure Basic or Digest Authentication
pfspStub.setUsername(userName); // string value
pfspStub.setPassword(password); // string value
int timeout = 1000;
pfspStub.setTimeout(timeout);
String strResultXML = pfspPort.cliRun(cmd);