Example:
public interface MemberAcctClient {
MemberAcctDetail queryMemberAcct(String memberId, String productCode, boolean create);
}
public class MemberAcctClientImpl implements MemberAcctClient {
@Autowired
private MemberAcctProxyUtil memberAcctProxyUtil;
@Override
public MemberAcctDetail queryMemberAcct(String memberId,
String productCode, boolean create) {
return memberAcctProxyUtil.getInstance().queryMemberAcct(memberId, productCode, create);
}
}
public class MemberAcctProxyUtil extends ProxyUtil {
private MemberAcctService memberAcctService;
private String serviceAddress;
private long timeout = 15000;
public MemberAcctService getInstance(){
if(null == memberAcctService){
memberAcctService = (MemberAcctService) buildInst(serviceAddress, MemberAcctService.class, timeout);
}
return memberAcctService;
}
public void setTimeout(long timeout) {
this.timeout = timeout;
}
public void setServiceAddress(String serviceAddress) {
this.serviceAddress = serviceAddress;
}
}
public class ProxyUtil {
/**
* 構建接入點實例
*
* @param addr 接入地址
* @param clazz 指定類型
* @return 實例
*/
protected Object buildInst(String addr, Class<?> clazz,long timeout) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(clazz);
factory.setAddress(addr);
Object object = factory.create();
configPolicy(object,timeout);
return object;
}
/**
* 設置服務的客戶端策略
* 連接時間: 默認=30s 設置爲15s,
* 接收超時時間: 默認=60s 設置爲15s
* 自動分組:默認=true 設置爲false
* 是否保持連接:使用默認設置=true
*
*
* @param service 服務實例
*/
private void configPolicy(Object service,long timeout) {
Client clientP = ClientProxy.getClient(service);
HTTPConduit http = (HTTPConduit) clientP.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(timeout);
httpClientPolicy.setReceiveTimeout(timeout);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
}
}
通過代理模式改變WebService的連接時間和接收超時時間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.