Subversion Repositories SmartDukaan

Rev

Rev 22877 | Rev 23509 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21557 ashik.ali 1
package com.spice.profitmandi.common.web.client;
2
 
3
import java.io.BufferedReader;
4
import java.io.IOException;
5
import java.io.InputStream;
6
import java.io.InputStreamReader;
22215 ashik.ali 7
import java.io.UnsupportedEncodingException;
8
import java.util.ArrayList;
9
import java.util.List;
21557 ashik.ali 10
import java.util.Map;
11
import java.util.Set;
12
 
13
import org.apache.http.HttpResponse;
22215 ashik.ali 14
import org.apache.http.NameValuePair;
21557 ashik.ali 15
import org.apache.http.client.ClientProtocolException;
16
import org.apache.http.client.HttpClient;
22215 ashik.ali 17
import org.apache.http.client.entity.UrlEncodedFormEntity;
21557 ashik.ali 18
import org.apache.http.client.methods.HttpGet;
22215 ashik.ali 19
import org.apache.http.client.methods.HttpPost;
20
import org.apache.http.client.methods.HttpUriRequest;
23502 ashik.ali 21
import org.apache.http.conn.HttpHostConnectException;
22
import org.apache.http.entity.ContentType;
23
import org.apache.http.entity.StringEntity;
21557 ashik.ali 24
import org.apache.http.impl.client.HttpClients;
22215 ashik.ali 25
import org.apache.http.message.BasicNameValuePair;
21557 ashik.ali 26
import org.slf4j.Logger;
27
import org.slf4j.LoggerFactory;
28
import org.springframework.http.HttpStatus;
29
import org.springframework.web.util.UriComponentsBuilder;
30
 
31
import com.spice.profitmandi.common.ResponseCodeHolder;
32
import com.spice.profitmandi.common.enumuration.SchemeType;
33
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23502 ashik.ali 34
import com.spice.profitmandi.common.util.StringUtils;
21557 ashik.ali 35
 
36
public class RestClient {
37
 
38
	private static final Logger LOGGER = LoggerFactory.getLogger(RestClient.class);
39
 
40
	private HttpClient httpClient;
41
	private SchemeType scheme;
42
	private String hostName;
43
	private int port;
44
	private final String url;
22215 ashik.ali 45
	//private HttpHeaders headers;
21557 ashik.ali 46
	public RestClient(SchemeType scheme, String hostName, int port){
47
		this.scheme = scheme;
48
		this.hostName = hostName;
49
		this.port = port;
23502 ashik.ali 50
		this.url = scheme.getValue() == null ? SchemeType.HTTP.toString() : scheme.getValue()  + hostName + ":" + port + "/";
22215 ashik.ali 51
		//this.headers = new HttpHeaders();
21557 ashik.ali 52
		this.httpClient = HttpClients.createDefault();
22215 ashik.ali 53
		//headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);
21557 ashik.ali 54
	}
55
	public SchemeType getScheme() {
56
		return scheme;
57
	}
58
	public String getHostName() {
59
		return hostName;
60
	}
61
	public int getPort() {
62
		return port;
63
	}
64
	public String getUrl() {
65
		return url;
66
	}
22215 ashik.ali 67
	public String get(String uri, Map<String, String> params, Map<String, String> headers)
23502 ashik.ali 68
		throws ProfitMandiBusinessException, HttpHostConnectException{
21557 ashik.ali 69
		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url + uri);
70
		Set<String> keys = params.keySet();
71
		for(String key : keys){
22341 amit.gupta 72
			builder.queryParam(key, params.get(key));
21557 ashik.ali 73
		}
22345 amit.gupta 74
		HttpGet request = new HttpGet(builder.build().encode().toUri());
22215 ashik.ali 75
		for(Map.Entry<String, String> entry : headers.entrySet()){
22339 amit.gupta 76
			request.setHeader(entry.getKey(), entry.getValue());
22215 ashik.ali 77
		}
78
		return this.execute(request);
79
	}
22233 amit.gupta 80
 
81
	public String get(String uri, Map<String, String> params)
23502 ashik.ali 82
			throws ProfitMandiBusinessException, HttpHostConnectException{
22233 amit.gupta 83
		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url + uri);
84
		Set<String> keys = params.keySet();
85
		for(String key : keys){
22341 amit.gupta 86
			builder.queryParam(key, params.get(key));
22233 amit.gupta 87
		}
22343 amit.gupta 88
		HttpGet request = new HttpGet(builder.build().encode().toUri());
22233 amit.gupta 89
		return this.execute(request);
90
	}
22215 ashik.ali 91
 
92
	public String execute(HttpUriRequest request)
23502 ashik.ali 93
			throws ProfitMandiBusinessException, HttpHostConnectException{
22215 ashik.ali 94
		LOGGER.info("Connecting to server at url {}",request.getURI());
21557 ashik.ali 95
		try {
96
			HttpResponse response = httpClient.execute(request);
97
			String responseString = this.toString(response.getEntity().getContent());
22877 amit.gupta 98
			LOGGER.info("Got response from server with responseCode {}", response.getStatusLine().getStatusCode());
21557 ashik.ali 99
			if(response.getStatusLine().getStatusCode() == HttpStatus.OK.value()){
100
				return responseString;
101
			}else{
22215 ashik.ali 102
				throw new ProfitMandiBusinessException("", "", "GE_1005");
21557 ashik.ali 103
			}
23502 ashik.ali 104
		}catch(HttpHostConnectException httpHostConnectException) {
105
			LOGGER.error("Connection Timeout Exception", httpHostConnectException);
106
			throw httpHostConnectException;
21557 ashik.ali 107
		} catch (ClientProtocolException e) {
22215 ashik.ali 108
			LOGGER.error("Client Error : ",e);
109
			throw new RuntimeException(ResponseCodeHolder.getMessage("GE_1006"));
21557 ashik.ali 110
		} catch (IOException e) {
22215 ashik.ali 111
			LOGGER.error("IO Error : ", e);
112
			throw new RuntimeException(ResponseCodeHolder.getMessage("GE_1006"));
23502 ashik.ali 113
		} 
21557 ashik.ali 114
	}
22215 ashik.ali 115
 
116
	public String post(String uri, Map<String, String> params, Map<String, String> headers)
23502 ashik.ali 117
			throws ProfitMandiBusinessException, HttpHostConnectException{
22215 ashik.ali 118
		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url + uri);
119
		List<NameValuePair> bodyParameters = new ArrayList<NameValuePair>();
120
		for(Map.Entry<String, String> entry : params.entrySet()){
121
			bodyParameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
122
		}
123
 
124
		LOGGER.info("Body Parameters {}", params);
22343 amit.gupta 125
		HttpPost request = new HttpPost(builder.build().encode().toUri());
22215 ashik.ali 126
		for(Map.Entry<String, String> entry : headers.entrySet()){
127
			request.setHeader(entry.getKey(), entry.getValue());
128
		}
129
 
130
		try{
131
			request.setEntity(new UrlEncodedFormEntity(bodyParameters));
132
		}catch (UnsupportedEncodingException unsupportedEncodingException) {
133
			LOGGER.error("Encoding error : ", unsupportedEncodingException);
134
			throw new RuntimeException(ResponseCodeHolder.getMessage("GE_1006"));
135
		}
136
 
137
 
138
		return this.execute(request);
139
 
140
	}
141
 
23502 ashik.ali 142
	public String postJson(String uri, Map<String, String> params, Map<String, String> headers)
143
			throws ProfitMandiBusinessException, HttpHostConnectException{
144
		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url + uri);
145
		List<NameValuePair> bodyParameters = new ArrayList<NameValuePair>();
146
		for(Map.Entry<String, String> entry : params.entrySet()){
147
			bodyParameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
148
		}
149
 
150
		String jsonString = null;
151
		try {
152
			jsonString = StringUtils.toString(params);
153
		} catch (Exception e) {
154
			e.printStackTrace();
155
		}
156
 
157
 
158
		StringEntity requestEntity = new StringEntity(
159
			    jsonString,
160
			    ContentType.APPLICATION_JSON);
161
 
162
		LOGGER.info("Body {}", jsonString);
163
		HttpPost request = new HttpPost(builder.build().encode().toUri());
164
		for(Map.Entry<String, String> entry : headers.entrySet()){
165
			request.setHeader(entry.getKey(), entry.getValue());
166
		}
167
 
168
		request.setEntity(requestEntity);
169
 
170
 
171
 
172
		return this.execute(request);
173
 
174
	}
175
 
21557 ashik.ali 176
	private String toString(InputStream inputStream){
177
		BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
178
		StringBuilder responseString = new StringBuilder();
179
		String line = null;
180
		try {
181
			while((line = reader.readLine()) != null){
182
				responseString.append(line);
183
			}
184
			inputStream.close();
185
		} catch (IOException e) {
186
			throw new RuntimeException();
187
		}
188
		return responseString.toString();
189
	}
190
}