WSS4Jを使用して、クライアントからのWebサービス呼び出しにパスワードダイジェストWS-Securityビットを追加しようとしています。AxisのWSDL4Jを使用してWSDLからクライアントクラスを生成し、WSS4Jを使用してWS-Securityの「パスワードダイジェスト」ヘッダーをSOAPメッセージに追加する手順に従いましたが、「ヘッダーの処理中にエラーが検出されました」というエラーメッセージが返されます。デバッグメッセージを追加すると、CallbackHandlerがヒットしているようには見えません。私は何か非常に間違ったことをしていますか?または、WSS4Jのドキュメントで説明されていないセットアップ部分が欠落していますか?
class CSProvider {
public CS get(CSService csService, URL url, String username)
throws ServiceException {
CS csPort = csService.getCSPort(url);
((Stub) csPort)._setProperty(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
((Stub) csPort)._setProperty(WSHandlerConstants.USER, username);
((Stub) csPort)._setProperty(UsernameToken.PASSWORD_TYPE, WSConstants.PW_DIGEST);
((Stub) csPort)._setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, "com.example.namespace.to.PasswordCallbackHandler");
return csPort;
}
}
public class PasswordCallbackHandler implements CallbackHandler {
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (Callback callback : callbacks) {
if (callback instanceof WSPasswordCallback) {
((WSPasswordCallback) callback).setPassword(PasswordStore.getPassword());
} else {
throw new UnsupportedCallbackException(callback);
}
}
}
}