Webservice mit HTTPS
Habe ich einen externen web-service, es funktioniert über https, kann ich generieren von java-Klassen mit wsimport aber wenn ich invnoke der service, den ich erhalten die Folgen Ausnahme:
Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.UnknownHostException: ECM01
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)...
Caused by: java.net.UnknownHostException: ECM01
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
Meiner Klasse, den Dienst aufzurufen ist so etwas wie dieses:
public static void main(String[] args) {
ColleagueServiceService cs = new ColleagueServiceService();
ColleagueService service = cs.getColleagueServicePort();
try {
service.getColleagues("user", "password", 1);
} catch (Exception_Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
Ich versuchte, die verwenden, SoapUI zum Aufruf des webservice, aber es zeigt noch eine Ausnahme:
Tue Dec 18 09:40:06 BRST 2012:ERROR:org.apache.http.conn.HttpHostConnectException: Connection to https://my.webservice.url.com refused
org.apache.http.conn.HttpHostConnectException: Connection to https://my.webservice.url.com refused
at com.eviware.soapui.impl.wsdl.support.http.SoapUIMultiThreadedHttpConnectionManager$SoapUIClientConnectionOperator.openConnection(SoapUIMultiThreadedHttpConnectionManager.java:321)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$Helper.execute(HttpClientSupport.java:236)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport.execute(HttpClientSupport.java:345)
at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:241)
at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)...
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)...
BEARBEITET:
Dieser webservice ist von mir, aber es ist in einen externen server, ich sah meine Klasse ColleagueService(ich war es nicht, die Tat) ist es annoted mit:
@WebService(serviceName="ColleagueServiceService")
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class ColleagueService {
Die generierte wsdl-ich habe diesen:
<port binding="tns:ColleagueServiceBinding" name="ColleagueServicePort">
<soap:address location="http://ECM01:80/services/ColleagueService"/>
</port>
Externen server(client) hat einen jboss-server und ein apache-http-server der http-server umleiten alle requestes per ProxyPass mit Pfad /Dienstleistungen/jboss-server (jboss-server ist der host ECM01), sowieso die wsdl ist falsch, da die Dienste https und in der wsdl-ich habe http
Kann jemand helfen? Danke.
- PS: ich kann auf my.webservice.url.com/ColleagueService?wsdl im browser.
- Sind Sie zufällig hinter einem proxy?
- Ja, in meinem intranet ein proxy.
- Und die URL, die Sie schlagen externen Netzwerk? In diesem Fall müssen Sie Ihre HTTP-client-code, der sich bewusst für den proxy-host, port und ggf. auth.
- Ja, die URL ist extern auf mein Netzwerk, Wie mache ich das? Kann ich mit wsimport -httpproxy?
- Ja, das wäre wohl das naheliegendste Ansatz, wenn Sie generiert haben Ihre Artefakte mit
wsimport
schon. - Noch nicht, fügte ich httpproxy und die Fehler sind immer noch die gleichen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist das der host angegeben, die in der WSDL? Suchen Sie nach einem Abschnitt wie diesem:
Wenn ja, haben Sie, um legen Sie den Endpunkt auf den Hafen:
Diese werden zusätzlich andere Aufgaben wie die Bereitstellung einer proxy-Konfiguration als Anders R. Bystrup erwähnt und (vielleicht) konfigurieren von SSL-client-Zertifikate.
Ist es vollkommen normal, für die WSDL nicht um die Reale service-Endpunkt. Überall dort, wo ich gearbeitet habe, eine bekannte bad-URI verwendet (z.B. localhost, wo alles verteilt auf verschiedenen Rechnern.) Kunden können den Endpunkt explizit über einen Konfigurations-Mechanismus (siehe oben den code für ein JAX-WS-client.) Dies ermöglicht Flexibilität bei der Entwicklung und verhindert, dass die falschen host verwendet wird, während die Inszenierung von der Entwicklung bis zur Produktion.
Sagte, bei der Verwendung von automatisch generierten WSDLs ich denke, wie der SOAP-address-element generiert wird, ist eine Implementierung detail Ihrer JAX-WS-Implementierung. Ich bin mir nicht sicher, wie ich habe nie auf ihn verlassen. Ich würde Sie bitte der Dokumentation zu Ihrem container-Implementierung.