Konfigurieren Sie Maven für die Verwendung von CXF wsdl2java mit der Standardauthentifizierung

8

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.

    
user1817897 12.11.2012, 11:27
quelle

4 Antworten

8

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.

    
Dawid Pytel 26.12.2012 18:55
quelle
2

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.

    
membersound 04.11.2015 12:49
quelle
0

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.

Ссылка

    
Robert Hutto 13.08.2014 15:28
quelle
-1

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.

    
Lao Pan 13.03.2015 19:04
quelle
yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '372665',
    'url' => 'configure-maven-to-use-cxf-wsdl2java-with-basic-authentication',
];

$_COOKIE = [
    'advanced-frontend' => '4d9a930ea5f6b73c41d3998a4f6877c8',
    '_csrf-frontend' => '10526d47279d2e707aa200ad6c298a8106751bf4600388a272e69dbd1f5f3f55a:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"-fWdM_zYoFvYzwyzoYvgTufzhV7ieRel";}',
];

$_SESSION = [
    '__flash' => [],
];