7 Replies Latest reply on Sep 30, 2010 7:53 AM by marcoben73

    Error doing multiple calls to web service

    marcoben73
      I'm testing JBossWS to access a remote web service.
      Just for test I'm using a java console application; I run it with sun jdk 6.0.17 with classpath jboss-eap-5.0/jboss-as/client/*.jar (linux)
      I've created stubs client classes with wsconsume.

      If a make a single call all works fine.

      MyWebServices service = new MyWebServices();
      MYSOAPHandlerResolver handlerResolver = new MYSOAPHandlerResolver();
      service.setHandlerResolver(handlerResolver);
      MyWebServicesPT port = service.getMYWebServicesPort();
      port.call1();
      // OK

      If a make more than one call, only the first ones works fine.

      MyWebServices service = new MyWebServices();
      MYSOAPHandlerResolver handlerResolver = new MYSOAPHandlerResolver();
      service.setHandlerResolver(handlerResolver);
      MyWebServicesPT port = service.getMYWebServicesPort();
      port.call1();
      // OK
      port.call2();
      // after 80 seconds I got an exception (please note that I don't see any network activity with wireshark)
      javax.xml.ws.WebServiceException: java.io.IOException: Could not transmit message
           at org.jboss.ws.core.jaxws.client.ClientImpl.handleRemoteException(ClientImpl.java:310)
           at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:243)
           at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:162)
           at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:148)
           at $Proxy15.commandCryptic(Unknown Source)
           at it.celeweb.otagw.adapter.amadeus.test.AmadeusClient.main(AmadeusClient.java:77)
      Caused by: java.io.IOException: Could not transmit message
           at org.jboss.ws.core.client.HTTPRemotingConnection.invoke(HTTPRemotingConnection.java:253)
           at org.jboss.ws.core.client.SOAPProtocolConnectionHTTP.invoke(SOAPProtocolConnectionHTTP.java:71)
           at org.jboss.ws.core.CommonClient.invoke(CommonClient.java:339)
           at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:231)
           ... 4 more
      Caused by: org.jboss.remoting.CannotConnectException: Can not connect http client invoker after 1 attempt(s)
           at org.jboss.remoting.transport.http.HTTPClientInvoker.makeInvocation(HTTPClientInvoker.java:250)
           at org.jboss.remoting.transport.http.HTTPClientInvoker.transport(HTTPClientInvoker.java:162)
           at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:167)
           at org.jboss.remoting.Client.invoke(Client.java:1917)
           at org.jboss.remoting.Client.invoke(Client.java:768)
           at org.jboss.ws.core.client.HTTPRemotingConnection.invoke(HTTPRemotingConnection.java:232)
           ... 7 more
      Caused by: java.net.SocketException: Unexpected end of file from server
           at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)
           at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
           at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:766)
           at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
           at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
           at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
           at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318)
           at org.jboss.remoting.transport.http.HTTPClientInvoker.getResponseCode(HTTPClientInvoker.java:1269)
           at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:351)
           at org.jboss.remoting.transport.http.HTTPClientInvoker.makeInvocation(HTTPClientInvoker.java:232)
           ... 12 more

      During the debugging of the problem, I found a strange workaround: putting a sleeb after each call.

      MyWebServices service = new MyWebServices();
      MYSOAPHandlerResolver handlerResolver = new MYSOAPHandlerResolver();
      service.setHandlerResolver(handlerResolver);
      MyWebServicesPT port = service.getMYWebServicesPort();
      port.call1();
      // OK
      Thread.Sleep(5000);
      port.call2();
      // OK
      Thread.Sleep(5000);
      port.call3();
      // OK
      Thread.Sleep(5000);
      port.call4();

      For me is not acceptable this workaround due to performance requirement of the application I'm writing.

      Someone can give me some hits about how to investigate this strange behaviour?

      Could you explain me this strange behaviour?