通過代理模式改變WebService的連接時間和接收超時時間

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);
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章