Problem beim Aufruf von web-Services aus der JBOSS-EJB-Service
Habe ich eine einfache web-service-sitzen auf unserem internen Netzwerk. Ich verwendet, SOAPUI, um ein bisschen zu testen, generiert das service-Klassen aus der WSDL ein , und schrieb einige java-code zum Zugriff auf den Dienst. Alles ging, wie erwartet, da war ich in der Lage zu erstellen, die service-proxy-Klassen und telefonieren. Ziemlich einfaches Zeug. Nur die speed bump war immer java, um das Zertifikat von der Maschine, die Bereitstellung des web-service. Das war kein technisches problem, sondern eher meine mangelnde Erfahrung mit SSL-basierte web-services.
Jetzt auf mein problem. Ich codiert ein einfaches EJB-service und Einsatz in JBoss Application Server 4.3 und bekomme jetzt den folgenden Fehler im code, der zuvor funktioniert hat.
12:21:50,235 WARN [ServiceDelegateImpl] Cannot access wsdlURL: https://WS-Test/TestService/v2/TestService?wsdl
Kann ich den Zugriff auf die wsdl-Datei von einem web-browser auf dem gleichen Rechner laufen, wie der application server mit der URL in der Fehlermeldung. Ich kann auch den code ausführen, der Zugriff auf den webservice außerhalb des application server auf demselben Computer wie den Anwendungsserver ( nur nicht von innen ). Ich bin an einem Verlust, wohin Sie gehen von hier aus. Ich drehte mich auf die debug-Protokolle in JBOSS und bekam nichts mehr als das, was ich oben zeigte. Ich habe getan, einige suchen auf dem Netz und fand den gleichen Fehler in einigen Fragen, aber diese Fragen waren keine Antworten. Die web-services-Klassen generiert, wo mit JAX-WS 2.2 mit dem wsimport ant-Aufgabe, und legte in einem Glas enthalten ist, ist in der ejb-Paket. JBoss bereitgestellt wird, in der RHEL 5.4. Ich stellte diese auf der Das JBOSS-community-forum hatte aber bisher keine Antworten schreiben.
InformationsquelleAutor Rob Goodwin | 2010-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie einen Blick auf ServiceDelegateImpl es versucht zu tun:
InputStream is = Wert im Feld wsdlurl.openStream();
wo der Wert im Feld wsdlurl ist ein nicht-null -
URL
. Das heißt, das Problem liegt in deropenStream()
. Ich erwarte, dass das problem mit der https-root-Zertifikat; ich kann mir vorstellen, dass JBoss hat seinen eigenen store für akzeptable root-Zertifikate irgendwo, und dass Ihre Wurzel nicht dort.Was ich tun würde, um dies zu testen ist, zur Bereitstellung des service auf einem HTTP-server, und stellen Sie den Wert im Feld wsdlurl eine
http
URL. Wenn das funktioniert, ist die SSL-Schicht.Wenn es ist die SSL-Schicht, versuchen Sie es manuell hinzufügen, wie man einen Schlüsselspeicher, indem Sie diese auf der Befehlszeile, wie in der Antwort zu diese Frage ALSO.
Ja der Fehler ist, dass die Tatsache, dass der JBoss nicht Vertrauen web-services-Maschine. JBoss schluckt die Ausnahme, die gibt das problem Weg. Indem Sie versuchen, öffnen Sie den Bach, wie Sie angeben, von oben erzeugt die folgende Ausnahme. javax.net.ssl.SSLHandshakeException: Sonne.Sicherheit.validator.ValidatorException: PKIX path building failed: sun.Sicherheit.Anbieter.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target So, sobald ich herausfinden, wie man richtig die JBoss-server Vertrauen in die web-services-server-Zertifikat, werde ich veröffentlichen, und markieren Sie diese als beantwortet
Goodwin Das SO Frage, auf die ich verlinkt sollte in der Lage sein zu beantworten. Im Prinzip können Sie importieren von vertrauenswürdigen root-Zertifikate in Schlüsselspeicher für die Verwendung von JBoss. Natürlich können Sie auch schalten Sie die SSL-validator-Implementierung und-design ist es, alles zu akzeptieren, aber das ist eine Art hack 🙂
Das problem war, wie erwartet, JBoss wurde mit seinen eigenen Zertifikatspeicher (key und trust). Also habe ich Sie angegeben ist, auf der Kommandozeile –Djavax.net... aber wusste nicht, dass das überschrieben werden, in einigen anderen nicht-standard-Platz durch ein anderes startup-Skript. Aber mit der " - Djavax.net.debug=ssl-line in deinem vorgeschlagenen link die keystore-es war mit angemeldet war. Eine einfache find/grep, und ich war in der Lage zu finden, die problematische Schrift. Ich habe das server-Zertifikat des web-service wurde ich wollen einen Aufruf in diesem keystore und jetzt bin ich gut zu gehen – vielen Dank für Ihren Vorschlag.
Goodwin Froh zu hören, dass Sie das problem gelöst. Diese Dinge sind nicht leicht zu finden 🙂 All hail to grep -r -H!!!
InformationsquelleAutor extraneon