我正在尝试使用 WSS4J 将密码摘要 WS-Security 位添加到来自我的客户端的 Web 服务调用。我使用 Axis 的 WSDL4J 从 WSDL 生成客户端类,并按照说明使用 WSS4J 将 WS-Security 的“Password Digest”标头添加到 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);
}
}
}
}