Ich versuche, Web-Service-Anrufe von meinem Client mithilfe von WSS4J mit Kennwortauszug WS-Sicherheitsbits zu versehen. Ich generierte die Client-Klassen von der WSDL unter Verwendung von WSDL4J von Axis und befolgte die Anweisungen zum Hinzufügen der "Password Digest" -Köpfe der WS-Security zu der SOAP-Nachricht unter Verwendung von WSS4J, kehrte jedoch mit der Fehlermeldung "Ein Fehler wurde beim Verarbeiten der Kopfzeile gefunden" zurück. Das Hinzufügen von Debug-Nachrichten sieht nicht so aus, als ob mein CallbackHandler jemals getroffen wird. Mache ich etwas sehr falsch? Oder fehlt mir ein Setup-Stück, das in der WSS4J-Dokumentation unerklärt bleibt?Sichere Web-Service-Aufrufe mit WSS4J return "Es wurde ein Fehler beim Verarbeiten des <wsse: Security> -Headers entdeckt"
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);
}
}
}
}