Axis2 uses CommonsHTTPTransportSender by default, which is based on commons-httpclient-3.1. At transport level, there’re two types of timeouts that can be set:
1. Socket Timeout
2. Connection Timeout
Here’s how you can configure the above ones:
Way #1: Configuring timeouts in axis2.xml
Socket Timeout
<parameter name=”SO_TIMEOUT”>some_integer_value</parameter>Connection timeout
<parameter name=”CONNECTION_TIMEOUT”>some_integer_value</parameter>
Way #2: Configuring timeouts in code
…
Options options = new Options();
options.setProperty(HTTPConstants.SO_TIMEOUT, new Integer(timeOutInMilliSeconds));
options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, new Integer(timeOutInMilliSeconds));// or
options.setTimeOutInMilliSeconds(timeOutInMilliSeconds);
…
Real-life code: How to set timeout for a Axis2 Stub?
long timeout = 2 * 60 * 1000; // Two minutes Stub stub = new TestStub(); stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(soTimeout); //or long timeout = 2 * 60 * 1000; // Two minutes Stub stub = new TestStub(); stub._getServiceClient().getOptions().setProperty( HTTPConstants.SO_TIMEOUT, new Integer(timeOutInMilliSeconds)); stub._getServiceClient().getOptions().setProperty( HTTPConstants.CONNECTION_TIMEOUT, new Integer(timeOutInMilliSeconds));
Reference
Axis2 HTTP Transport –Â http://axis.apache.org/axis2/java/core/docs/http-transport.html
What is the default if I don’t set a timeout?
I think it must be an infinite time unless we set it
Something doesn’t make sense. In your code, you’re setting three timeouts:
1- stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(soTimeout);
2- stub._getServiceClient().getOptions().setProperty(
HTTPConstants.SO_TIMEOUT, new Integer(timeOutInMilliSeconds));
3- stub._getServiceClient().getOptions().setProperty(
HTTPConstants.CONNECTION_TIMEOUT, new Integer(timeOutInMilliSeconds));
Don’t the first and the second timeout refer to an SO timeout? If that’s correct, then why setting it twice?
Didn’t you notice an //or in the code?