src/java.management.rest/share/classes/com/oracle/jmx/remote/rest/http/HttpUtil.java
author hb
Mon, 25 Dec 2017 20:42:05 +0530
branchjmx-rest-api
changeset 55994 9721e36abeb0
child 55995 a798bdd52997
permissions -rw-r--r--
Implementation of GET for new APIs Implemented paging and filtering for GET
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     1
package com.oracle.jmx.remote.rest.http;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     2
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     3
import com.oracle.jmx.remote.rest.json.JSONObject;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     4
import com.sun.net.httpserver.Headers;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     5
import com.sun.net.httpserver.HttpExchange;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     6
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     7
import javax.management.remote.rest.PlatformRestAdapter;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     8
import java.io.*;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
     9
import java.net.URI;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    10
import java.net.URL;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    11
import java.net.URLDecoder;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    12
import java.net.URLEncoder;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    13
import java.util.Base64;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    14
import java.util.LinkedHashMap;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    15
import java.util.List;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    16
import java.util.Map;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    17
import java.util.stream.Collectors;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    18
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    19
public class HttpUtil {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    20
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    21
    public static String getRequestCharset(HttpExchange ex) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    22
        String charset = null;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    23
        List<String> contentType = ex.getRequestHeaders().get("Content-type");
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    24
        if (contentType != null) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    25
            for (String kv : contentType) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    26
                for (String value : kv.split(";")) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    27
                    value = value.trim();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    28
                    if (value.toLowerCase().startsWith("charset=")) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    29
                        charset = value.substring("charset=".length());
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    30
                    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    31
                }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    32
            }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    33
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    34
        return charset;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    35
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    36
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    37
    public static String getAcceptCharset(HttpExchange ex) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    38
        List<String> acceptCharset = ex.getRequestHeaders().get("Accept-Charset");
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    39
        if (acceptCharset != null && acceptCharset.size() > 0) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    40
            return acceptCharset.get(0);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    41
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    42
        return null;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    43
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    44
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    45
    public static String getGetRequestResource(HttpExchange ex) throws UnsupportedEncodingException {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    46
        String charset = getRequestCharset(ex);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    47
        String httpHandlerPath = ex.getHttpContext().getPath();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    48
        String requestURIpath = ex.getRequestURI().getPath();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    49
        String getRequestPath = requestURIpath.substring(httpHandlerPath.length());
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    50
        if (charset != null) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    51
            return URLDecoder.decode(getRequestPath, charset);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    52
        } else {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    53
            return getRequestPath;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    54
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    55
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    56
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    57
    public static String getGetRequestQuery(HttpExchange ex) throws UnsupportedEncodingException {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    58
        String charset = getRequestCharset(ex);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    59
        String query = ex.getRequestURI().getQuery();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    60
        if (charset != null && query != null) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    61
            return URLDecoder.decode(query, charset);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    62
        } else {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    63
            return query;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    64
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    65
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    66
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    67
    public static Map<String, String> getGetRequestQueryMap(HttpExchange ex)
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    68
            throws UnsupportedEncodingException {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    69
        String charset = getRequestCharset(ex);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    70
        String query = ex.getRequestURI().getQuery();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    71
        if (charset != null && query != null) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    72
            query = URLDecoder.decode(query, charset);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    73
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    74
        Map<String, String> queryParams = new LinkedHashMap<>();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    75
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    76
        if (query == null || query.isEmpty()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    77
            return queryParams;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    78
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    79
        String[] params = query.trim().split("&");
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    80
        for (String param : params) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    81
            int idx = param.indexOf('=');
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    82
            queryParams.put(param.substring(0, idx), param.substring(idx + 1));
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    83
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    84
        return queryParams;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    85
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    86
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    87
    public static String getCredentials(HttpExchange exchange) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    88
        Headers rmap = exchange.getRequestHeaders();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    89
        String auth = rmap.getFirst("Authorization");
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    90
        if (auth != null && !auth.isEmpty()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    91
            int sp = auth.indexOf(' ');
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    92
            byte[] b = Base64.getDecoder().decode(auth.substring(sp + 1));
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    93
            String authCredentials = new String(b);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    94
            return authCredentials;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    95
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    96
        return "";
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    97
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    98
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    99
    public static String readRequestBody(HttpExchange he) throws IOException {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   100
        String charset = getRequestCharset(he);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   101
        StringBuilder stringBuilder = new StringBuilder();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   102
        InputStreamReader in = charset != null ? new InputStreamReader(he.getRequestBody(), charset) : new InputStreamReader(he.getRequestBody());
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   103
        BufferedReader br = new BufferedReader(in);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   104
        String line;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   105
        while ((line = br.readLine()) != null) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   106
            String decode = charset != null ? URLDecoder.decode(line, charset) : line;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   107
            stringBuilder.append(decode);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   108
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   109
        return stringBuilder.toString();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   110
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   111
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   112
    public static void sendResponse(HttpExchange exchange, HttpResponse response) throws IOException {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   113
        String charset = getRequestCharset(exchange);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   114
        String acceptCharset = HttpUtil.getAcceptCharset(exchange);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   115
        if (acceptCharset != null) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   116
            charset = acceptCharset;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   117
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   118
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   119
        // Set response headers explicitly
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   120
        String msg = charset == null ? response.getResponse() : URLEncoder.encode(response.getResponse(), charset);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   121
        byte[] bytes = msg.getBytes();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   122
        Headers resHeaders = exchange.getResponseHeaders();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   123
        resHeaders.add("Content-Type", "application/json; charset=" + charset);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   124
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   125
        exchange.sendResponseHeaders(response.getCode(), bytes.length);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   126
        try (OutputStream os = exchange.getResponseBody()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   127
            os.write(bytes);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   128
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   129
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   130
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   131
    public static <T> List<T> filterByPage(HttpExchange exchange, List<T> input, int pageSize) throws UnsupportedEncodingException {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   132
        if (input.size() <= pageSize) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   133
            return input;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   134
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   135
        Map<String, String> queryParams = HttpUtil.getGetRequestQueryMap(exchange);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   136
        int currPage = 1;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   137
        if (queryParams != null && !queryParams.isEmpty()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   138
            String pageStr = queryParams.get("page");
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   139
            if (pageStr != null && !pageStr.isEmpty()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   140
                currPage = Integer.parseInt(pageStr);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   141
                currPage = currPage > 1 ? currPage : 1;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   142
            }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   143
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   144
        int start = (currPage - 1) * pageSize;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   145
        int end = Math.min(input.size(), start + pageSize);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   146
        if (start < end) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   147
            return input.subList(start, end);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   148
        } else {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   149
            return null;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   150
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   151
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   152
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   153
    public static <T> JSONObject getPaginationLinks(HttpExchange exchange, List<T> input, int pageSize) throws UnsupportedEncodingException {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   154
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   155
        if (pageSize >= input.size()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   156
            return null;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   157
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   158
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   159
        Map<String, String> queryParams = HttpUtil.getGetRequestQueryMap(exchange);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   160
        int currPage = 1;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   161
        if (queryParams != null && !queryParams.isEmpty()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   162
            String pageStr = queryParams.get("page");
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   163
            if (pageStr != null && !pageStr.isEmpty()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   164
                currPage = Integer.parseInt(pageStr);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   165
            }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   166
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   167
        String path = PlatformRestAdapter.getAuthority() + exchange.getRequestURI().getPath() + "?";
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   168
        Map<String, String> queryMap = getGetRequestQueryMap(exchange);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   169
        if (queryMap != null) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   170
            queryMap.remove("page");
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   171
            if (!queryMap.isEmpty()) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   172
                String query = queryMap.keySet().stream()
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   173
                        .map(k -> k + "=" + queryMap.get(k))
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   174
                        .collect(Collectors.joining("&"));
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   175
                path = path + query + "&";
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   176
            }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   177
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   178
        int totalPages = (input.size() % pageSize == 0) ? input.size() / pageSize : input.size() / pageSize + 1;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   179
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   180
        JSONObject jobj = new JSONObject();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   181
        jobj.put("first", path.replaceAll(".$", ""));
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   182
        if (currPage == 2) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   183
            jobj.put("prev", path.replaceAll(".$", ""));
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   184
        } else if (currPage > 2) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   185
            jobj.put("prev", path + "page=" + (currPage - 1));
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   186
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   187
        if (currPage < totalPages) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   188
            jobj.put("next", path + "page=" + (currPage + 1));
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   189
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   190
        jobj.put("last", path + "page=" + totalPages);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   191
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   192
        return jobj;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   193
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   194
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   195
    public static String escapeUrl(String input) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   196
        try {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   197
            URL url = new URL(input);
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   198
            URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   199
            return uri.toURL().toString();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   200
        } catch (Exception ex) {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   201
            ex.printStackTrace();
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   202
            return null;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   203
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   204
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   205
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   206
}