7

I've a external web service, it's works over https, I can generate java classes with wsimport but when I invnoke the service I recive the follow exception:

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)

My class that invoke the service is something like this:

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();
    }
}

I tryed use SoapUI to call the webservice, but it shows another exception:

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)...

EDITED:

This webservice is mine, but it's in a external server, I saw my class ColleagueService(it wasn't me who did) it's annoted with:

@WebService(serviceName="ColleagueServiceService")
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class ColleagueService {

The generated wsdl I've this:

<port binding="tns:ColleagueServiceBinding" name="ColleagueServicePort">
    <soap:address location="http://ECM01:80/services/ColleagueService"/>
</port>

The external server(a client) has a jboss server and an apache http server, the http server redirect all requestes by ProxyPass with path /services/ to jboss server (jboss server is the host ECM01), anyway the wsdl is wrong because the services is https and in wsdl I've http

Can anyone help? Thank you.

Lucas Merencia
  • 752
  • 2
  • 5
  • 19

1 Answers1

9

Caused by: java.net.UnknownHostException: ECM01

Is this the host specified in the WSDL? Look for a section like this:

<wsdl:port binding="tns:FooBinding" name="FooPort">
  <soap:address location="https://ECM01/FooService"/>
</wsdl:port>

If so, you will have to set the endpoint on the port:

BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext()
    .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint);

This will be in addition other tasks like providing a proxy configuration as Anders R. Bystrup mentions and (maybe) configuring SSL client certificates.


It is perfectly normal for the WSDL not to reflect the real service endpoint. Anywhere I've worked, a known bad URI is used (e.g. localhost where everything is distributed on different hosts.) Clients can set the endpoint explicitly via a configuration mechanism (see the above code for a JAX-WS client.) This allows flexibility during development and prevents the wrong host being used during staging from development to production.

That said, when using auto-generated WSDLs I think how the SOAP address element is generated is an implementation detail of your JAX-WS implementation. I'm not certain as I've never relied on it. I would refer to the documentation of your container implementation.

Community
  • 1
  • 1
McDowell
  • 107,573
  • 31
  • 204
  • 267
  • Thanks @McDowller, I think you found my problem,I think my wsdl is wrong, can you help me? See what I've edited on post. – Lucas Merencia Dec 18 '12 at 16:47
  • Thank you. This worked. Strangely. This only happened to me once we were using an apache proxy to serve the WSDL & it's service. – mwangi Jul 24 '18 at 15:51