Wie zu verwenden wsimport, wenn der server erwartet, dass client-Zertifikat?
Ich habe eine web-service über die gegenseitige SSL-Authentifizierung. Ich kann access es ganz gut im browser, wenn ich den client das Zertifikat installiert.
Ich muss in der Lage sein um Zugriff auf diese mit wsimport
für die Generierung der Java-code zum Zugriff auf den Dienst.
Wie kann ich meine Anmeldeinformationen, so dass ich Zugriff auf die URL mit wsimport
?
Hier ist ein Beispiel von, was ich versuche, aber es mal aufgrund der Unfähigkeit, sich zu authentifizieren.
wsimport ./sample.wsdl -p com.company.ws.sample -Xnocompile -d ./src -extension -keep -XadditionalHeaders
Vielen Dank für jede Hilfe
Edit:
Dies ist, was wsimport
druckt. Die WSDL ist definitiv gültig, und bei der gegebenen Lage, ist es eine Frage der, herauszufinden, wie pass in meine Anmeldeinformationen für die Authentifizierung:
wsimport https://wsdl.location.com?WSDL -p com.company.ws.sample -Xnocompile
-d ./src -extension -keep -XadditionalHeaders
parsing WSDL...
[ERROR] Received fatal alert: handshake_failure
Failed to read the WSDL document: "https://wsdl.location.com?WSDL", because 1) could
not find the document; /2) the document could not be read; 3) the root element of
the document is not <wsdl:definitions>.
[ERROR] failed.noservice=Could not find wsdl:service in the provided WSDL(s):
At least one WSDL with at least one service definition needs to be provided.
Failed to parse the WSDL.
- teilen Sie die Fehler - /exception-stacktrace, denen Sie sich anderen hilft, das problem zu verstehen.
- Ich habe aktualisiert die post, um mehr details zeigen. Dank
- ibswings.blogspot.in/2008/12/... versuchen Sie, diese
- Habe versucht, die gleichen Ergebnisse...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie direkt aufrufen des WsImport java-Klasse (Quelle) und fügen Sie die JVM notwendig, Argumente für Java-wissen, wo man suchen-client-Zertifikate.
Etwas wie
sollte den trick tun.
Exception in thread "main" java.lang.NoSuchFieldError: theInstance
, aber ich habe eine alternative gefunden.Habe ich es geschafft, dies zu tun, indem Sie die Einstellung der Umgebungsvariable _JAVA_OPTIONS mit all den zusätzlichen " Eigenschaften von system zu passieren; als Windows-batch-Datei sieht es wie folgt aus (setzen Sie Ihr Passwort entsprechend:
Für geistige Gesundheit Willen, die Java-Optionen in der lange 'set' - Linie sind:
Können Sie oder können nicht brauchen, um specift die
trustStore
Einstellung; ich hatte, als ich habe ein paar installiert und Java wurde die Abholung der falsch cacerts-Datei für mich.Ebenso werden Sie nicht brauchen, die
keyStorePassword
wenn der keystore ist nicht Passwort geschützt. FürkeyStoreType
haben, müssen Sie diese angeben, wenn Sie keinen Zugriff auf einen Java-keystore.Letztlich die einzige "Pflicht" - option ist die
keyStore
die legt fest, wo das client-Zertifikat und Schlüssel zu Leben (und es ist nur obligatorisch, wenn das client-Zertifikat ist nicht in einem der core-Java-Zertifikat-stores). So wie es da steht, das Beispiel oben ist für ein client-Zertifikat in eine PFX-Datei generiert durch einen Export aus dem Windows certificate store.Fand ich viel einfacher (keine Notwendigkeit zu spielen, mit -D, - classpath, ...) zu:
1. laden Sie die wsdl per ssl-Verbindung mit Ihrem browser (installieren Sie das Zertifikat in Ihrem Standard-browser durch doppelklicken auf den keystore) oder-noch einfacher-mit soapUI (installieren Sie die keystore-via config/ssl), zeigt die wsdl-Inhalt
2. führen Sie das wsimport gegen die heruntergeladen wsdl
Das ist alles.
-wsdllocation <actualWsdlLocationURI>
zuwsimport
weil sonst die generierte webservice-Klassen auf den absoluten lokalen Pfad der wsdl.