package org.zstack.header.rest; import org.springframework.http.HttpEntity; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; import org.zstack.header.core.Completion; import javax.servlet.http.HttpServletRequest; import java.util.Map; import java.util.concurrent.TimeUnit; public interface RESTFacade { void asyncJsonPost(String url, Object body, Map<String, String> headers, AsyncRESTCallback callback, TimeUnit unit, long timeout); void asyncJsonPost(String url, Object body, AsyncRESTCallback callback, TimeUnit unit, long timeout); void asyncJsonPost(String url, String body, AsyncRESTCallback callback, TimeUnit unit, long timeout); void asyncJsonPost(String url, String body, Map<String, String> headers, AsyncRESTCallback callback, TimeUnit unit, long timeout); void asyncJsonPost(String url, Object body, Map<String, String> headers, AsyncRESTCallback callback); void asyncJsonPost(String url, Object body, AsyncRESTCallback callback); void asyncJsonPost(String url, String body, AsyncRESTCallback callback); <T> T syncJsonPost(String url, Object body, Class<T> returnClass); <T> T syncJsonPost(String url, String body, Class<T> returnClass); <T> T syncJsonPost(String url, String body, Map<String, String> headers, Class<T> returnClass); HttpEntity<String> httpServletRequestToHttpEntity(HttpServletRequest req); RestTemplate getRESTTemplate(); void echo(String url, Completion callback); void echo(String url, Completion callback, long inverval, long timeout); Map<String, HttpCallStatistic> getStatistics(); <T> void registerSyncHttpCallHandler(String path, Class<T> objectType, SyncHttpCallHandler<T> handler); String getBaseUrl(); String getSendCommandUrl(); String getCallbackUrl(); String makeUrl(String path); void installBeforeAsyncJsonPostInterceptor(BeforeAsyncJsonPostInterceptor interceptor); // timeout are in milliseconds static RestTemplate createRestTemplate(int readTimeout, int connectTimeout) { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); factory.setReadTimeout(readTimeout); factory.setConnectTimeout(connectTimeout); return new RestTemplate(factory); } }