webservice客户端超时

这篇博客探讨了在使用Axis2生成WebService客户端时遇到的超时问题。作者指出,默认的通讯超时时间为30秒,这可能导致某些长耗时操作失败。文章通过分析jar包源码,展示了如何找到并调整这个超时设置。
摘要由CSDN通过智能技术生成

使用axis2生成webserice客户端时,在引用的jar包axis2-kernel下的org.apache.axis2.client.Options类中默认设置通讯超时时间为30s,jar包源码如下,可以看到默认时间为final常量:

package org.apache.axis2.client;

public class Options implements Externalizable,SafeSerializable{

public static final int DEFAULT_TIMEOUT_MILLISECONDS=30000;
private long timeOutInMilliSeconds=-1L;

public long getTimeOutInMilliSeconds(){
	if((this.timeOutInMilliSeconds==-1L)&&(this.parent!=null)){
		return this.parent.getTimeOutInMilliSeconds();
	}
	return this.parent.getTimeOutInMilliSeconds()==-1L?30000L:this.timeOutInMilliSeconds;
}
}
为了在外部能够设置超时时间,添加了一下代码【默认超时时间同jar包中原来30s同】:

private long TimeOut=30000L;
public long getTimeOut(){
	return TimeOut;
}
public void setTimeOut(long timeOut){
	if(TimeOut>0L){
		TimeOut=timeOut;
	}else{
		TimeOut=30000L;
	}
}
public long getTimeOutInMilliSeconds(){
	if((this.timeOutInMilliSeconds==-1L)&&(this.parent!=null)){
		return this.parent.getTimeOutInMilliSeconds();
	}
	return this.parent.getTimeOutInMilliSeconds()==-1L?getTimeOut():this.timeOutInMilliSeconds;
}
在客户端中手动设置超时时间,例如使用AXIS2生成的客户端【比如ReqS500000001Stub类】
在其构造方法中找到ServiceClient类的实例,有如下代码

_serviceClient=new org.apache.axis2.client.ServiceClient(configurationContext,_service);
然后手动添加超时时间代码【注意数据类型】,比如设置为60s:

_serviceClient.getOptions().setTimeOut(60000L)
现在超时时间就能按照实际需求进行设置了。

仅用交流,如果不妥,望指正





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值