shaiksha
shaiksha

Reputation: 1003

How to set connection timeout and request timeout for my webservice call in java

I have a requirement where i need to do communicate with a thirdparty webservices for performing certain tasks.

First i need to send login soap request to session control manager webservice to get the session ID.

using that session ID i need to send the actual soap request for performing the task to webservices 2.

At the end i need to send logout soap request to the session control manager webservices.

Also i need to set the connection timeout and request timeout for each call.

  1. How do we set connection timeout and request timeout for the soap webservice call?
  2. As i will be calling the webservice 3 times do i need to set the connection timeout/request timeout everytime? Below is the sample code

`

public static void main(String args[]) throws Exception {

SOAPMessage loginMessage = null;
SOAPMessage operationMessage = null;
SOAPMessage logoutMessage = null;

SOAPMessage loginResp  = null;
SOAPMessage operationResp  = null;
SOAPMessage logoutResp  = null;
String loginResponse = null;
String logoutResponse = null;
String operationResponse = null;

SOAPConnectionFactory connectionFactory = SOAPConnectionFactory.newInstance();
/**
 * Get SOAP connection.
 */
SOAPConnection soapConnection = connectionFactory.createConnection();

//Sending Login request

loginResp=soapConnection.call(loginMessage, "https://IP:port/Login");

ByteArrayOutputStream os = new ByteArrayOutputStream();
loginResp.writeTo(os);

loginResponse = os.toString();

System.out.println("The Login call has been made");
System.out.println("The response message is : " + loginResponse);

if (checkForValidResponse(loginResponse, "LoginResponse"))
{
    System.out.println("The call is successful");

    operationResp = soapConnection.call(operationMessage, "https://IP:port/Login");

    os.reset();
    operationResp.writeTo(os);
    operationResponse = os.toString();

    System.out.println("The operation call has been made");
    System.out.println("The response message is : " + loginResponse);

    if(checkForValidResponse(operationResponse, "OperationResponse")){
        System.out.println("The operation call is successful");

    }else{
        System.out.println("The Operation Call was not successful");
    }

}else{
    System.out.println("The Login Call was not successful");

}

logoutResp=soapConnection.call(logoutMessage, "https://IP:port/Login");

os.reset();
logoutResp.writeTo(os);

logoutResponse = os.toString();

System.out.println("The Logout call has been made");
System.out.println("The response message is : " + logoutResponse);

if (checkForValidResponse(logoutResponse, "LogoutResponse"))
{
    System.out.println("The Logout call was successful");
}else{
    System.out.println("The Logout call was Unsuccessful");
}


soapConnection.close();
 }

  private static Boolean checkForValidResponse(String resp, String responseRootNode) throws Exception {

System.out.println("Expected Body Element:" +responseRootNode);

if(resp.contains(responseRootNode) && !resp.contains("Fault")){
    System.out.println("Received Valid Response" );
    return true ;

}
else{
    System.out.println("Fault found in Response");
    return false;
}
}`

Upvotes: 1

Views: 20447

Answers (1)

fabfas
fabfas

Reputation: 2228

Create your own URLStreamHandler so that you can set URLConnection parameters e.g. connection timeout, read timeout

API Specifications for the URL:

SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
// creating URL from string represtation
URL endpoint = new URL(null,
      "http://example.com/path/to/webservice",
      new URLStreamHandler() {
        @Override
        protected URLConnection openConnection(URL url) throws IOException {
          URL target = new URL(url.toString());
          URLConnection connection = target.openConnection();
          // Connection settings
          connection.setConnectTimeout(10000); // 10 sec
          connection.setReadTimeout(60000); // 1 min
          return(connection);
        }
      });

SOAPMessage result = connection.call(soapMessage, endpoint);

Upvotes: 3

Related Questions