• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 7273
  • Last Modified:

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

0
manyam537
Asked:
manyam537
  • 5
  • 5
1 Solution
 
Ajay-SinghCommented:
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
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
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

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 5
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now