'How to define timeout for webservice client in websphere

Our application is hosted in websphere, my webservice client (jax-ws) is making webservice call to remote server. I will need to define timeout for this webservice call. I tried different way to set timeout up with no luck. here is what i tried:

    Map<String, Object> requestContext = ((BindingProvider) binding).getRequestContext();
    requestContext.put("com.ibm.websphere.webservices.jaxws.asynctimeout", 15000); 

or

    Map<String, Object> requestContext = ((BindingProvider) binding).getRequestContext();
    requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 15000);
    requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 15000); 

None of them works

Any one can give hint, how to setup timeout for webservice client in websphere?

Thx



Solution 1:[1]

because Jax-WS in WAS relies on Axis 2 I believe you could use standard Axis 2 approach to do that, try(From axis 2 docs):

Timeout Configuration

Two timeout instances exist in the transport level, Socket timeout and Connection timeout. These can be configured either at deployment or run time. If configuring at deployment time, the user has to add the following lines in axis2.xml.

For Socket timeout:

<parameter name="SO_TIMEOUT">some_integer_value</parameter>
For Connection timeout:

 <parameter name="CONNECTION_TIMEOUT">some_integer_value</parameter>

For runtime configuration, it can be set as follows within the client stub: ...

Options options = new Options();
options.setProperty(HTTPConstants.SO_TIMEOUT, new Integer(timeOutInMilliSeconds));
options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, new Integer(timeOutInMilliSeconds));

// or
options.setTimeOutInMilliSeconds(timeOutInMilliSeconds);
...

If you want more information check: http://axis.apache.org/axis2/java/core/docs/http-transport.html

Also:

http://wso2.org/library/209

http://singztechmusings.wordpress.com/2011/05/07/how-to-configure-timeout-duration-at-client-side-for-axis2-web-services/

If you're using ServiceClient check this thread please: Axis2 ServiceClient options ignore timeout

Please let me know if it worked ;)

Solution 2:[2]

You should set JVM properties mentioned in following link -

https://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/rwbs_jaxwstimeouts.html

bindingProvider.getRequestContext().put(com.ibm.wsspi.webservices.Constants.CONNECTION_TIMEOUT_PROPERTY, timeout);
bindingProvider.getRequestContext().put(com.ibm.wsspi.webservices.Constants.RESPONSE_TIMEOUT_PROPERTY, timeout);

Set timeout in seconds as String.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Community
Solution 2 tiwari.vikash