Setting Connection timeout for SOAPConnection

I have the below method to call the web service method. Some times when it is not able to connect to the web service as the server may be down, it is just hanging for (atleast more than an hour). I just want to set the time outs, so that if it will not get the response in that specified time I have to cancel the waiting.


protected SOAPMessage sendSOAPRequest(SOAPMessage message, String recipient) throws Exception {
URL urlEndpoint = new URL(recipient)
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();           
        SOAPConnection con = scf.createConnection();
        SOAPMessage replyMessage = con.call(message, urlEndpoint);
return replyMessage 
}

Open in new window

manyam537Asked:
Who is Participating?
 
Ajay-SinghConnect With a Mentor Commented:
Since, SOAP uses jave.net.URLConnection underneath, you can set the system parameters for connection timeout with
is going to be valid for SOAP as well. You can set the following parameters

-Dsun.net.client.defaultConnectTimeout=

-Dsun.rmi.transport.proxy.connectTimeout=
0
 
manyam537Author Commented:
Ajay,

If I want to set timeout of 5 minutes  , will this be Ok.

System.setProperty("sun.net.client.defaultConnectTimeout", "5 * 60 * 1000");
  System.setProperty("sun.rmi.transport.proxy.connectTimeout",  "5 * 60 * 1000");

Thanks
TirupatiReddy
0
 
Ajay-SinghCommented:
Sure, it sounds good.
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
manyam537Author Commented:
Ajay,

  I will try that. Before that I implemented in a different way, I don't know why it is not working.

When I run through debug mode, it should come to openConnection method of GGHttpStreamHandler class below when it calls (HttpSOAPConnection) con.call . But it's not coming. Can you please tell me why ?

Thanks
TirupatiReddy
protected SOAPMessage sendSOAPRequest(SOAPMessage message, String recipient) throws Exception {
 
        URL urlEndpoint = null;
 
        GGHttpStreamHandler handler = new GGHttpStreamHandler();
 
        urlEndpoint = new URL((URL) null, recipient, handler);
    
 
        SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
       
        SOAPConnection con = scf.createConnection();
 
        SOAPMessage replyMessage = con.call(message, urlEndpoint);
return replyMessage;
}
 
 
public class GGHttpStreamHandler extends URLStreamHandler {
 
    protected URLConnection openConnection(URL url) throws IOException {
        HttpURLConnection conn = new GGHttpURLConnection(url);
        conn.setConnectTimeout(10 * 60 * 1000);
        conn.setReadTimeout(10 * 60 * 1000);
        return conn;
    }
}

Open in new window

0
 
Ajay-SinghCommented:
> SOAPMessage replyMessage = con.call(message, urlEndpoint);

The method call takes, object as second argument. I believe its not making use of the stream handler you are setting.
You can set StreamHandlerFactory (that would create StreamHandler), by calling
  java.net.URL.setURLStreamHandlerFactory(URLStreamHandlerFactory)
0
 
manyam537Author Commented:
Ajay,

  Will the system properties that were set will work for Https connection also.
0
 
manyam537Author Commented:
Ajay,

Will both are same or the first one will not work.

System.setProperty("sun.net.client.defaultConnectTimeout", "5 * 60 * 1000")

OR

System.setProperty("sun.net.client.defaultConnectTimeout", "600000")

0
 
Ajay-SinghCommented:
> Will the system properties that were set will work for Https connection also.
Yes it should.
0
 
manyam537Author Commented:
Ajay,

Last question before accepting and closing this question.

How should I create HttpsURLConnection object with URL object.

0
 
Ajay-SinghCommented:
I have modified your code a little to handle https protocol. But you need implement GGHttpsURLConnection class
public class GGHttpStreamHandler extends URLStreamHandler {
 
    protected URLConnection openConnection(URL url) throws IOException {
        if("http".equalsIgnoreCase(url.getProtocol())) {
          HttpURLConnection conn = new GGHttpURLConnection(url);
          conn.setConnectTimeout(10 * 60 * 1000);
          conn.setReadTimeout(10 * 60 * 1000);
          return conn;
        }
        else if("https".equalsIgnoreCase(url.getProtocol())) {
          HttpsURLConnection conn = new GGHttpsURLConnection(url); //You may have to change this class as well.
          conn.setConnectTimeout(10 * 60 * 1000);
          conn.setReadTimeout(10 * 60 * 1000);
          return conn;
        }
    }
}

Open in new window

0
 
Tuno85Commented:
I was wondering how do you implement the two timeout methods in GGHttpsURLConnection?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.