Ich habe eine Anwendung, die in einen der Webdienste von SharePoint integriert werden muss. Dieser Webservice ist nicht frei zugänglich und muss authentifiziert werden.
Als solches gibt das Standard-Plugin wsdl2java Maven in meiner Anwendung einen HTTP 401-Fehler aus, wenn die Phase generate-sources ausgeführt wird.
Gibt es eine Möglichkeit, Maven / POM so einzurichten, dass ich einen Benutzer / ein Passwort angeben kann, der die Stubs erzeugt?
Ich habe einige Antworten darauf gefunden, dass dies nicht möglich ist, aber alle Antworten älter als 1 Jahr sind. Ich habe nicht gefunden, ob Maven ein Update dazu veröffentlicht hat. Eine Option besteht darin, eine lokale Kopie der WSDL zu speichern (wie vorgeschlagen, hier ), aber ich möchte vermeiden, lokale Kopien zu haben.
Weil du CXF erwähnt hast, meinst du wohl cxf-codegen-plugin. Es ist ein bisschen wie ein Hack, aber es funktioniert.
HTTP-Authentifizierungsdaten können mit java.net.Authenticator bereitgestellt werden. Man muss nur seine eigene Authenticator-Klasse definieren, die die getPasswordAuthentication (..) -Methode überschreibt. Dann muss es als Standardauthentifizierer eingestellt werden. Soweit ich weiß, kann es nicht deklarativ (zum Beispiel mit Umgebungseigenschaften) nur programmgesteuert mit Authenticator.setDefault (..).
Um Authenticator.setDefault (..) aufzurufen, würde ich den CXF-Erweiterungsmechanismus verwenden. Erstellen Sie ein separates Maven-Projekt mit ähnlicher Klasse:
%Vor%und Datei src \ main \ resources \ META-INF \ cxf \ bus-extensions.txt mit Inhalt:
%Vor%Fügen Sie dann das neu erstellte Projekt als Abhängigkeit zum cxf-codegen-plugin hinzu:
%Vor%Auf diese Weise wird AuthenticatorReplacer vom CXF-Erweiterungsmechanismus initialisiert und ersetzt den Standardauthentifizierer durch unseren.
Eine saubere Alternative zur Lösung von @Dawid Pytel wäre die Ausführung dieser Klasse während des Lebenszyklus der automatischen Klassengenerierung der WSDL-Klasse:
%Vor% Wichtig: Ihre AuthenticatorReplacer
muss eine main(String[] args)
Klasse sein und den Code innerhalb ausführen.
Ich habe verifiziert, dass Dawids Lösung funktioniert. Alternativ können Sie SoapUI verwenden, um die wsdl abzurufen und zwischenzuspeichern und dann mithilfe der SoapUi-Codegenerierungsunterstützung cxf zum Generieren des Codes zu verwenden.
Dawids Lösung funktioniert auch für mich. Es ist jedoch ein wenig schwierig. In Eclipse beschwört die pom.xml immer wieder, dass "wsdl2java fehlgeschlagen ist: Erweiterungsklasse AuthenticatorReplacer konnte nicht geladen werden". Sie müssen diese Fehlermeldung ignorieren und die Befehlszeile verwenden:
mvn generate-sources
Die Java-Klassen werden dann erfolgreich generiert.
Tags und Links maven cxf pom.xml basic-authentication