使用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)
现在超时时间就能按照实际需求进行设置了。
仅用交流,如果不妥,望指正