ca6d68380e8a3291950c7e27fa602766cece2c4c
[controller.git] / opendaylight / commons / httpclient / src / main / java / org / opendaylight / controller / commons / httpclient / HTTPClient.java
1 package org.opendaylight.controller.commons.httpclient;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.HashMap;\r
5 import java.util.Iterator;\r
6 import java.util.List;\r
7 \r
8 import org.apache.http.Header;\r
9 import org.apache.http.HeaderIterator;\r
10 import org.apache.http.HttpEntity;\r
11 import org.apache.http.client.ClientProtocolException;\r
12 import org.apache.http.client.config.RequestConfig;\r
13 import org.apache.http.client.methods.CloseableHttpResponse;\r
14 import org.apache.http.client.methods.HttpDelete;\r
15 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;\r
16 import org.apache.http.client.methods.HttpGet;\r
17 import org.apache.http.client.methods.HttpPost;\r
18 import org.apache.http.client.methods.HttpPut;\r
19 import org.apache.http.client.methods.HttpRequestBase;\r
20 import org.apache.http.entity.StringEntity;\r
21 import org.apache.http.impl.client.CloseableHttpClient;\r
22 import org.apache.http.impl.client.HttpClients;\r
23 import org.apache.http.util.EntityUtils;\r
24 \r
25 public class HTTPClient {\r
26     static public HTTPResponse sendRequest(HTTPRequest request) throws Exception {\r
27 \r
28         CloseableHttpClient httpclient = HttpClients.createDefault();\r
29         if (httpclient == null)\r
30             throw new ClientProtocolException("Couldn't create an HTTP client");\r
31         RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(request.getTimeout())\r
32             .setConnectTimeout(request.getTimeout()).build();\r
33         HttpRequestBase httprequest;\r
34         String method = request.getMethod();\r
35 \r
36         if (method.equalsIgnoreCase("GET")) {\r
37             httprequest = new HttpGet(request.getUri());\r
38         } else if (method.equalsIgnoreCase("POST")) {\r
39             httprequest = new HttpPost(request.getUri());\r
40             if (request.getEntity() != null) {\r
41                 StringEntity sentEntity = new StringEntity(request.getEntity());\r
42                 sentEntity.setContentType(request.getContentType());\r
43                 ((HttpEntityEnclosingRequestBase) httprequest).setEntity(sentEntity);\r
44             }\r
45         } else if (method.equalsIgnoreCase("PUT")) {\r
46             httprequest = new HttpPut(request.getUri());\r
47             if (request.getEntity() != null) {\r
48                 StringEntity sentEntity = new StringEntity(request.getEntity());\r
49                 sentEntity.setContentType(request.getContentType());\r
50                 ((HttpEntityEnclosingRequestBase) httprequest).setEntity(sentEntity);\r
51             }\r
52         } else if (method.equalsIgnoreCase("DELETE")) {\r
53             httprequest = new HttpDelete(request.getUri());\r
54         } else {\r
55             httpclient.close();\r
56             throw new IllegalArgumentException("This profile class only supports GET, POST, PUT, and DELETE methods");\r
57         }\r
58         httprequest.setConfig(requestConfig);\r
59 \r
60         // add request headers\r
61         Iterator<String> headerIterator = request.getHeaders().keySet().iterator();\r
62         while (headerIterator.hasNext()) {\r
63             String header = headerIterator.next();\r
64             Iterator<String> valueIterator = request.getHeaders().get(header).iterator();\r
65             while (valueIterator.hasNext()) {\r
66                 httprequest.addHeader(header, valueIterator.next());\r
67             }\r
68         }\r
69 \r
70         CloseableHttpResponse response = httpclient.execute(httprequest);\r
71         try {\r
72             HttpEntity receivedEntity = response.getEntity();\r
73             int httpResponseCode = response.getStatusLine().getStatusCode();\r
74             HTTPResponse ans = new HTTPResponse();\r
75             HashMap<String, List<String>> headerMap = new HashMap<String, List<String>>();\r
76 \r
77             // copy response headers\r
78             HeaderIterator it = response.headerIterator();\r
79             while (it.hasNext()) {\r
80                 Header h = it.nextHeader();\r
81                 String name = h.getName();\r
82                 String value = h.getValue();\r
83                 if (headerMap.containsKey(name))\r
84                     headerMap.get(name).add(value);\r
85                 else {\r
86                     List<String> list = new ArrayList<String>();\r
87                     list.add(value);\r
88                     headerMap.put(name, list);\r
89                 }\r
90             }\r
91             ans.setHeaders(headerMap);\r
92 \r
93             if (httpResponseCode > 299) {\r
94                 ans.setStatus(httpResponseCode);\r
95                 ans.setEntity(response.getStatusLine().getReasonPhrase());\r
96                 return ans;\r
97             }\r
98             ans.setStatus(response.getStatusLine().getStatusCode());\r
99             if (receivedEntity != null)\r
100                 ans.setEntity(EntityUtils.toString(receivedEntity));\r
101             else\r
102                 ans.setEntity(null);\r
103             return ans;\r
104         } finally {\r
105             response.close();\r
106         }\r
107     }\r
108 }\r