WS Timeout

I created a WS Connector from a WSDL File

When I try to run two specific methods (this error only occurs in two of about ten methods the WS offers), i get the following error:

com.wm.app.b2b.service.ServiceException:
java.net.SocketTimeoutException: Read Timed Out

The problem is this error occurs almost instantly after I run the service (he doesn’t wait enought time for a time out), and also the WS method is executed on the other side (that is, the methods is completed in the server).
Also if I try to run the WS using soapUI or any other program for running WS, it work perfectly, and doesn’t return this error.

Any ideas?

Thank you

When you step through the flow generated by the web service connector wizard, at what point does the error occur? Assuming that it is on the call to pub.client:soapHTTP or pub.client:soapRPC, have you examined the soap message that is being sent to the provider of the service to determine whether it is properly formed?

Lots of threads here on the weaknesses of the web services connector wizard. It just creates a starter Flow service for you. Sometimes those Flow services even work. Often they need tweaking to work and always you need to add logic to parameterize the soap endpoint (extracted from the WSDL) and to add additional error handling and logging.

Mark

Actually it is on soapHTTP call that the error occurs.
I’ve check the SOAP message and the difference from using directly soapUI, is very little and ignorable (like namespaces)

Thanks anyway,
I’ll try working on the knowledge that the WS Connector doesn’t do a 100% job

So, you have a WSDL describing a Web Service containing 10 operations. Eight of Flows generated by the web service connector can successfully invoke operations, but two fail immediately with some timeout error.

Here’s what I would do to isolate the problem:

  1. Download and install a web services testing tool such as the Personal Edition of CrossCheck Network’s SOAPSonar
  2. Point it at the WSDL to generate a test case for each operation in the Web Service
  3. Run the tests for the operations that fail when invoked from WSC-generated Flow services
  4. If the test succeeds look at the soap request that successfully invoked the operation and compare that to the contents of the soapRequestData variable in your generated Flow service immedately prior to your call to pub.client:soapHTTP.
  5. If the test fails, then work with the provider of the service to understand why. When you can successfully invoke each operation from a testing tool, then you will be able to do so from Developer / IS as long as you can produce the same SOAP request.

Hope that helps,

Mark

Hi,

I tried doing what you suggested,
I saw the differences, but I can’t change the SOAP request on WM (when he call soapHTTP I get a not SOAP error)
Instead I tried using the SOAP message generated on WM in soapUI (a software very much like SOAP Sonar, but free) and the call worked perfectly.
So I assume the SOAP message used by WM is correct.

Not quite sure what you are saying.

If your Flow creates a soapRequest that can be pasted into Sonar or soapUI or whatever to successfully invoke that operation, then it should, of course, also work if posted from Integration Server. (Same message sent to the same place should produce same outcome).

Confirm that the endpoint address (URL) in your flow is correct and that any required authentication is supplied.

Is this operation being invoked over HTTP or HTTPS?

Mark

Hi,

It’s working with HTTP

I understand what you are saying, it should work, but it isn’t.

I’ve been doing more tests, and this is what I found

Altought I get the SocketTimeoutException the WS method runs (that is, the Data is created on the server)
I have another method, that is Listing the data created, and sometimes when I run this method I get the same exception, but if I run a second time (in a row) it work.

The problem is that the methods that never run I can’t call it with the same data (because the second time I run it, the data already exists in the server).

Is this a known issue on the WM Integration Server? Having to run a service twice to get the correct result?
Can I do a flush or whatever on the beggining of the service, so one time is enough?

Thanks once again

I don’t understand what you are saying here.

Imagine the WS Method creates some data in a Database.

When I call the WS with WM I get the error (Read Timed Out).

But if I take a look in the database, I see that the data was created. Which means that the WS Method was in fact invoked.

So I guess something went wrong, on the WS reply.

What is the HTTP return code when the web service operation is called from your Flow service?

Is the operation being called over HTTPS or HTTP?

You haven’t mentioned what version of IS you are using. If 6.5 or later set the “loadAs” parameter to byteArrayStream.

Mark

What is the HTTP return code when the web service operation is called from your Flow service?

I don’t have a return code, because the WS Connector throws an Exception. So there is no HTTP Return Code

Is the operation being called over HTTPS or HTTP?

It’s being called by regular HTTP

You haven’t mentioned what version of IS you are using.

I’m working on version 6.1

Thank you