From 388048bb5ae47da92343750a82460a082bc5bbc2 Mon Sep 17 00:00:00 2001 From: Ovear Date: Wed, 20 Mar 2019 15:13:08 +0800 Subject: [PATCH] =?UTF-8?q?1)=E6=9B=B4=E6=96=B0=E8=85=BE=E8=AE=AF=E4=BA=91?= =?UTF-8?q?API=EF=BC=8C=E4=BF=AE=E5=A4=8D=E2=80=9C=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E8=A2=AB=E6=8B=92=E7=BB=9D=EF=BC=8C=E8=AF=A5=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=8F=AA=E5=85=81=E8=AE=B8=E7=89=B9=E5=AE=9A=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E2=80=9D=E7=9A=84=E9=97=AE=E9=A2=98=202)?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=86=85=E7=BD=AE=E7=9A=84=E8=85=BE=E8=AE=AF?= =?UTF-8?q?=E4=BA=91API=203)=E6=9B=B4=E6=96=B0=E5=88=B0v0.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 +- src/main/java/com/qcloud/Common/Request.java | 251 --- src/main/java/com/qcloud/Common/Sign.java | 93 - .../java/com/qcloud/Module/APIGateway.java | 12 - src/main/java/com/qcloud/Module/Account.java | 7 - src/main/java/com/qcloud/Module/Base.java | 91 - src/main/java/com/qcloud/Module/Batch.java | 12 - src/main/java/com/qcloud/Module/Bgpip.java | 7 - src/main/java/com/qcloud/Module/Bill.java | 7 - src/main/java/com/qcloud/Module/Bm.java | 7 - src/main/java/com/qcloud/Module/Bmeip.java | 7 - src/main/java/com/qcloud/Module/Bmlb.java | 7 - src/main/java/com/qcloud/Module/Bmvpc.java | 7 - src/main/java/com/qcloud/Module/Cbs.java | 7 - src/main/java/com/qcloud/Module/Cdb.java | 7 - src/main/java/com/qcloud/Module/Cdn.java | 33 - .../java/com/qcloud/Module/CloudAudit.java | 12 - src/main/java/com/qcloud/Module/Cmem.java | 8 - src/main/java/com/qcloud/Module/Cns.java | 7 - src/main/java/com/qcloud/Module/Cvm.java | 8 - src/main/java/com/qcloud/Module/Dfw.java | 15 - src/main/java/com/qcloud/Module/Eip.java | 7 - .../java/com/qcloud/Module/Feecenter.java | 7 - src/main/java/com/qcloud/Module/Image.java | 7 - src/main/java/com/qcloud/Module/Lb.java | 7 - src/main/java/com/qcloud/Module/Live.java | 7 - src/main/java/com/qcloud/Module/Market.java | 7 - src/main/java/com/qcloud/Module/Monitor.java | 7 - src/main/java/com/qcloud/Module/Partners.java | 15 - src/main/java/com/qcloud/Module/Scaling.java | 7 - src/main/java/com/qcloud/Module/Scf.java | 15 - src/main/java/com/qcloud/Module/Sec.java | 7 - src/main/java/com/qcloud/Module/Snapshot.java | 7 - src/main/java/com/qcloud/Module/Sts.java | 7 - src/main/java/com/qcloud/Module/Tdsql.java | 8 - src/main/java/com/qcloud/Module/Tmt.java | 15 - src/main/java/com/qcloud/Module/Trade.java | 7 - src/main/java/com/qcloud/Module/Vod.java | 7 - src/main/java/com/qcloud/Module/Vpc.java | 7 - src/main/java/com/qcloud/Module/Wenzhi.java | 7 - src/main/java/com/qcloud/Module/Yunsou.java | 7 - .../com/qcloud/QcloudApiModuleCenter.java | 73 - .../java/com/qcloud/Utilities/Base64.java | 99 - .../com/qcloud/Utilities/Json/JSONArray.java | 977 ---------- .../qcloud/Utilities/Json/JSONException.java | 43 - .../com/qcloud/Utilities/Json/JSONObject.java | 1695 ----------------- .../com/qcloud/Utilities/Json/JSONString.java | 18 - .../qcloud/Utilities/Json/JSONStringer.java | 78 - .../qcloud/Utilities/Json/JSONTokener.java | 446 ----- .../com/qcloud/Utilities/Json/JSONWriter.java | 327 ---- src/main/java/com/qcloud/Utilities/MD5.java | 66 - src/main/java/com/qcloud/Utilities/SHA1.java | 72 - .../machinetranslators/TencentTranslate.java | 50 +- 53 files changed, 31 insertions(+), 4688 deletions(-) delete mode 100755 src/main/java/com/qcloud/Common/Request.java delete mode 100755 src/main/java/com/qcloud/Common/Sign.java delete mode 100755 src/main/java/com/qcloud/Module/APIGateway.java delete mode 100755 src/main/java/com/qcloud/Module/Account.java delete mode 100755 src/main/java/com/qcloud/Module/Base.java delete mode 100755 src/main/java/com/qcloud/Module/Batch.java delete mode 100755 src/main/java/com/qcloud/Module/Bgpip.java delete mode 100755 src/main/java/com/qcloud/Module/Bill.java delete mode 100755 src/main/java/com/qcloud/Module/Bm.java delete mode 100755 src/main/java/com/qcloud/Module/Bmeip.java delete mode 100755 src/main/java/com/qcloud/Module/Bmlb.java delete mode 100755 src/main/java/com/qcloud/Module/Bmvpc.java delete mode 100755 src/main/java/com/qcloud/Module/Cbs.java delete mode 100755 src/main/java/com/qcloud/Module/Cdb.java delete mode 100755 src/main/java/com/qcloud/Module/Cdn.java delete mode 100755 src/main/java/com/qcloud/Module/CloudAudit.java delete mode 100755 src/main/java/com/qcloud/Module/Cmem.java delete mode 100755 src/main/java/com/qcloud/Module/Cns.java delete mode 100755 src/main/java/com/qcloud/Module/Cvm.java delete mode 100755 src/main/java/com/qcloud/Module/Dfw.java delete mode 100755 src/main/java/com/qcloud/Module/Eip.java delete mode 100755 src/main/java/com/qcloud/Module/Feecenter.java delete mode 100755 src/main/java/com/qcloud/Module/Image.java delete mode 100755 src/main/java/com/qcloud/Module/Lb.java delete mode 100755 src/main/java/com/qcloud/Module/Live.java delete mode 100755 src/main/java/com/qcloud/Module/Market.java delete mode 100755 src/main/java/com/qcloud/Module/Monitor.java delete mode 100755 src/main/java/com/qcloud/Module/Partners.java delete mode 100755 src/main/java/com/qcloud/Module/Scaling.java delete mode 100755 src/main/java/com/qcloud/Module/Scf.java delete mode 100755 src/main/java/com/qcloud/Module/Sec.java delete mode 100755 src/main/java/com/qcloud/Module/Snapshot.java delete mode 100755 src/main/java/com/qcloud/Module/Sts.java delete mode 100755 src/main/java/com/qcloud/Module/Tdsql.java delete mode 100755 src/main/java/com/qcloud/Module/Tmt.java delete mode 100755 src/main/java/com/qcloud/Module/Trade.java delete mode 100755 src/main/java/com/qcloud/Module/Vod.java delete mode 100755 src/main/java/com/qcloud/Module/Vpc.java delete mode 100755 src/main/java/com/qcloud/Module/Wenzhi.java delete mode 100755 src/main/java/com/qcloud/Module/Yunsou.java delete mode 100755 src/main/java/com/qcloud/QcloudApiModuleCenter.java delete mode 100755 src/main/java/com/qcloud/Utilities/Base64.java delete mode 100755 src/main/java/com/qcloud/Utilities/Json/JSONArray.java delete mode 100755 src/main/java/com/qcloud/Utilities/Json/JSONException.java delete mode 100755 src/main/java/com/qcloud/Utilities/Json/JSONObject.java delete mode 100755 src/main/java/com/qcloud/Utilities/Json/JSONString.java delete mode 100755 src/main/java/com/qcloud/Utilities/Json/JSONStringer.java delete mode 100755 src/main/java/com/qcloud/Utilities/Json/JSONTokener.java delete mode 100755 src/main/java/com/qcloud/Utilities/Json/JSONWriter.java delete mode 100755 src/main/java/com/qcloud/Utilities/MD5.java delete mode 100755 src/main/java/com/qcloud/Utilities/SHA1.java diff --git a/build.gradle b/build.gradle index b99ae72..3f169b9 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ buildscript { } } -version = '0.1' +version = '0.3' configurations { provided @@ -62,6 +62,9 @@ dependencies { testCompile 'org.madlonkay.supertmxmerge:supertmxmerge:2.0.1' integrationTestCompile 'org.testng:testng:6.9.10' integrationTestCompile 'com.alibaba:fastjson:1.2.17' + + // https://mvnrepository.com/artifact/com.tencentcloudapi/tencentcloud-sdk-java + compile group: 'com.tencentcloudapi', name: 'tencentcloud-sdk-java', version: '3.0.56' } //test.useTestNG() diff --git a/src/main/java/com/qcloud/Common/Request.java b/src/main/java/com/qcloud/Common/Request.java deleted file mode 100755 index 9a684ed..0000000 --- a/src/main/java/com/qcloud/Common/Request.java +++ /dev/null @@ -1,251 +0,0 @@ -package com.qcloud.Common; - -import java.io.BufferedReader; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLEncoder; -import java.util.Map; -import java.util.Random; -import java.util.TreeMap; - -import javax.net.ssl.HttpsURLConnection; - -import com.qcloud.Utilities.MD5; - -/** - * @brief 请求调用类 - * @author robinslsun - */ -public class Request { - protected static String requestUrl = ""; - protected static String rawResponse = ""; - protected static String version = "SDK_JAVA_2.0.5"; - protected static int connectTimeout = 5000; // ms - protected static int readTimeout = 90000; // ms - - public static String getRequestUrl() { - return requestUrl; - } - - public static String getRawResponse() { - return rawResponse; - } - - public static String generateUrl(TreeMap params, - String secretId, String secretKey, String requestMethod, - String requestHost, String requestPath) { - if (!params.containsKey("SecretId")) - params.put("SecretId", secretId); - - if (!params.containsKey("Nonce")) - params.put("Nonce", - new Random().nextInt(java.lang.Integer.MAX_VALUE)); - - if (!params.containsKey("Timestamp")) - params.put("Timestamp", System.currentTimeMillis() / 1000); - - params.put("RequestClient", version); - - String plainText = Sign.makeSignPlainText(params, requestMethod, - requestHost, requestPath); - - String signatureMethod = "HmacSHA1"; - if(params.containsKey("SignatureMethod") && params.get("SignatureMethod").toString().equals("HmacSHA256")) - { - signatureMethod = "HmacSHA256"; - } - - try { - params.put("Signature", Sign.sign(plainText, secretKey, signatureMethod)); - } catch (Exception e) { - e.printStackTrace(); - } - - String url = "https://" + requestHost + requestPath; - if (requestMethod.equals("GET")) { - url += Sign.buildParamStr1(params,requestMethod); - } - - return url; - } - - public static String send(TreeMap params, String secretId, - String secretKey, String requestMethod, String requestHost, - String requestPath, String fileName) { - if (!params.containsKey("SecretId")) - params.put("SecretId", secretId); - - if (!params.containsKey("Nonce")) - params.put("Nonce", - new Random().nextInt(java.lang.Integer.MAX_VALUE)); - - if (!params.containsKey("Timestamp")) - params.put("Timestamp", System.currentTimeMillis() / 1000); - - params.put("RequestClient", version); - params.remove("Signature"); - String plainText = Sign.makeSignPlainText(params, requestMethod, - requestHost, requestPath); - - String signatureMethod = "HmacSHA1"; - if(params.containsKey("SignatureMethod") && params.get("SignatureMethod").toString().equals("HmacSHA256")) - { - signatureMethod = "HmacSHA256"; - } - - try { - params.put("Signature", Sign.sign(plainText, secretKey, signatureMethod)); - } catch (Exception e) { - e.printStackTrace(); - } - - String url = "https://" + requestHost + requestPath; - - return sendRequest(url, params, requestMethod, fileName); - } - - public static String sendRequest(String url, - Map requestParams, String requestMethod, - String fileName) { - String result = ""; - BufferedReader in = null; - String paramStr = ""; - - for (String key : requestParams.keySet()) { - if (!paramStr.isEmpty()) { - paramStr += '&'; - } - try { - paramStr += key + '=' - + URLEncoder.encode(requestParams.get(key).toString(),"utf-8"); - } catch (UnsupportedEncodingException e) { - result = "{\"code\":-2300,\"location\":\"com.qcloud.Common.Request:129\",\"message\":\"api sdk throw exception! " - + e.toString().replace("\"", "\\\"") + "\"}"; - } - } - - try { - - if (requestMethod.equals("GET")) { - if (url.indexOf('?') > 0) { - url += '&' + paramStr; - } else { - url += '?' + paramStr; - } - } - requestUrl = url; - String BOUNDARY = "---------------------------" - + MD5.stringToMD5( - String.valueOf(System.currentTimeMillis())) - .substring(0, 15); - URL realUrl = new URL(url); - URLConnection connection = null; - if (url.toLowerCase().startsWith("https")) { - HttpsURLConnection httpsConn = (HttpsURLConnection) realUrl - .openConnection(); - - /*httpsConn.setHostnameVerifier(new HostnameVerifier() { - public boolean verify(String hostname, SSLSession session) { - return true; - } - });*/ - connection = httpsConn; - } else { - connection = realUrl.openConnection(); - } - - // 设置通用的请求属性 - connection.setRequestProperty("accept", "*/*"); - connection.setRequestProperty("connection", "Keep-Alive"); - connection.setRequestProperty("user-agent", - "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); - // 设置链接主机超时时间 - connection.setConnectTimeout(connectTimeout); - connection.setReadTimeout(readTimeout); - - if (requestMethod.equals("POST")) { - ((HttpURLConnection) connection).setRequestMethod("POST"); - // 发送POST请求必须设置如下两行 - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setRequestProperty("Content-Type", - "multipart/form-data; boundary=" + BOUNDARY); - OutputStream out = new DataOutputStream( - connection.getOutputStream()); - StringBuffer strBuf = new StringBuffer(); - for (String key : requestParams.keySet()) { - strBuf.append("\r\n").append("--").append(BOUNDARY) - .append("\r\n"); - strBuf.append("Content-Disposition: form-data; name=\"" - + key + "\"\r\n\r\n"); - strBuf.append(requestParams.get(key)); - } - out.write(strBuf.toString().getBytes()); - if (fileName != null) { - File file = new File(fileName); - String filename = file.getName(); - String contentType = URLConnection.getFileNameMap() - .getContentTypeFor(fileName); - - strBuf = new StringBuffer(); - strBuf.append("\r\n").append("--").append(BOUNDARY) - .append("\r\n"); - strBuf.append("Content-Disposition: form-data; name=\"entityFile\"; filename=\"" - + filename + "\"\r\n"); - strBuf.append("Content-Type:" + contentType + "\r\n\r\n"); - - out.write(strBuf.toString().getBytes()); - - DataInputStream ins = new DataInputStream( - new FileInputStream(file)); - int bytes = 0; - byte[] bufferOut = new byte[1024]; - while ((bytes = ins.read(bufferOut)) != -1) { - out.write(bufferOut, 0, bytes); - } - ins.close(); - } - byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(); - out.write(endData); - out.flush(); - out.close(); - } - - // 建立实际的连接 - connection.connect(); - - // 定义 BufferedReader输入流来读取URL的响应 - in = new BufferedReader(new InputStreamReader( - connection.getInputStream())); - - String line; - while ((line = in.readLine()) != null) { - result += line; - } - - } catch (Exception e) { - result = "{\"code\":-2700,\"location\":\"com.qcloud.Common.Request:225\",\"message\":\"api sdk throw exception! " - + e.toString().replace("\"", "\\\"") + "\"}"; - } finally { - // 使用finally块来关闭输入流 - try { - if (in != null) { - in.close(); - } - } catch (Exception e2) { - result = "{\"code\":-2800,\"location\":\"com.qcloud.Common.Request:234\",\"message\":\"api sdk throw exception! " - + e2.toString().replace("\"", "\\\"") + "\"}"; - } - } - rawResponse = result; - return result; - } -} diff --git a/src/main/java/com/qcloud/Common/Sign.java b/src/main/java/com/qcloud/Common/Sign.java deleted file mode 100755 index 893023a..0000000 --- a/src/main/java/com/qcloud/Common/Sign.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.qcloud.Common; - -import java.io.UnsupportedEncodingException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.util.TreeMap; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; - -//import sun.misc.BASE64Encoder; -//import org.apache.commons.codec.binary.Base64; -import com.qcloud.Utilities.Base64; -import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage; - -public class Sign { - // 编码方式 - private static final String CONTENT_CHARSET = "UTF-8"; - - // HMAC算法 - private static final String HMAC_ALGORITHM = "HmacSHA1"; - - /** - * @brief 签名 - * @author cicerochen@tencent.com - * @date 2017-03-15 18:00:00 - * - * @param signStr 被加密串 - * @param secret 加密密钥 - * @param signatureMethod 签名算法 - * - * @return - */ - public static String sign(String signStr, String secret, String signatureMethod) - throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException - { - String sig = null; - Mac mac1 = Mac.getInstance("HmacSHA1"); - Mac mac2 = Mac.getInstance("HmacSHA256"); - byte[] hash; - if (signatureMethod.equals("HmacSHA256")){ - SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(CONTENT_CHARSET), mac2.getAlgorithm()); - mac2.init(secretKey); - hash = mac2.doFinal(signStr.getBytes(CONTENT_CHARSET)); - } - else{ - SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(CONTENT_CHARSET), mac1.getAlgorithm()); - mac1.init(secretKey); - hash = mac1.doFinal(signStr.getBytes(CONTENT_CHARSET)); - } - - // base64 - //sig = new String(new BASE64Encoder().encode(hash).getBytes()); - //sig = new String(Base64.encodeBase64(hash)); - sig = new String(Base64.encode(hash)); - return sig; - } - - public static String makeSignPlainText(TreeMap requestParams, String requestMethod, String requestHost, String requestPath) { - - String retStr = ""; - retStr += requestMethod; - retStr += requestHost; - retStr += requestPath; - retStr += buildParamStr1(requestParams, requestMethod); - - return retStr; - } - - protected static String buildParamStr1(TreeMap requestParams, String requestMethod) { - return buildParamStr(requestParams, requestMethod); - } - - protected static String buildParamStr(TreeMap requestParams, String requestMethod) { - - String retStr = ""; - for(String key: requestParams.keySet()) { - String value = requestParams.get(key).toString(); - //排除上传文件的参数 - if("POST".equals(requestMethod) && (! value.isEmpty()) && value.substring(0, 1).equals("@")){ - continue; - } - if (retStr.length()==0) { - retStr += '?'; - } else { - retStr += '&'; - } - retStr += key.replace("_", ".") + '=' + value; - - } - return retStr; - } -} diff --git a/src/main/java/com/qcloud/Module/APIGateway.java b/src/main/java/com/qcloud/Module/APIGateway.java deleted file mode 100755 index 4ec5c91..0000000 --- a/src/main/java/com/qcloud/Module/APIGateway.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.qcloud.Module; - -/* - * see document: - * https://cloud.tencent.com/document/product/628 - */ -public class APIGateway extends Base { - public APIGateway() { - serverHost = "apigateway.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Account.java b/src/main/java/com/qcloud/Module/Account.java deleted file mode 100755 index 7447d28..0000000 --- a/src/main/java/com/qcloud/Module/Account.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Account extends Base{ - public Account(){ - serverHost = "account.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Base.java b/src/main/java/com/qcloud/Module/Base.java deleted file mode 100755 index 00c6745..0000000 --- a/src/main/java/com/qcloud/Module/Base.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.qcloud.Module; - -import com.qcloud.Common.*; - -import java.util.TreeMap; - -public abstract class Base { - protected String serverHost = ""; - protected String serverUri = "/v2/index.php"; - protected String secretId = ""; - protected String secretKey = ""; - protected String defaultRegion = ""; - protected String requestMethod = "GET"; - - public void setConfig(TreeMap config) { - if (config == null) - return; - for (String key : config.keySet()) { - - if(key.equals("SecretId")){ - setConfigSecretId(config.get(key).toString()); - } - else if(key.equals("SecretKey")){ - setConfigSecretKey(config.get(key).toString()); - } - else if(key.equals("DefaultRegion")){ - setConfigDefaultRegion(config.get(key).toString()); - } - else if(key.equals("RequestMethod")){ - setConfigRequestMethod(config.get(key).toString()); - } - } - } - - public void setConfigSecretId(String secretId) { - this.secretId = secretId; - } - - public void setConfigSecretKey(String secretKey) { - this.secretKey = secretKey; - } - - public void setConfigDefaultRegion(String region) { - this.defaultRegion = region; - } - - public void setConfigRequestMethod(String method) { - this.requestMethod = method; - } - - public String getLastRequest() { - return Request.getRequestUrl(); - } - - public String getLastResponse() { - return Request.getRawResponse(); - } - - private String ucFirst(String word){ - return word.replaceFirst(word.substring(0, 1), - word.substring(0, 1).toUpperCase()); - } - - public String generateUrl(String actionName, TreeMap params) { - actionName = ucFirst(actionName); - if(params == null) - params = new TreeMap(); - params.put("Action", actionName); - if (!params.containsKey("Region")) { - params.put("Region", defaultRegion); - } - return Request.generateUrl(params, secretId, secretKey, requestMethod, - serverHost, serverUri); - } - - public String call(String actionName, TreeMap params){ - return call(actionName, params, null); - } - - public String call(String actionName, TreeMap params, String fileName){ - actionName = ucFirst(actionName); - if(params == null) - params = new TreeMap(); - params.put("Action", actionName); - if (!params.containsKey("Region")) { - params.put("Region", defaultRegion); - } - String response = Request.send(params, secretId, secretKey, requestMethod, serverHost, serverUri, fileName); - return response; - } -} diff --git a/src/main/java/com/qcloud/Module/Batch.java b/src/main/java/com/qcloud/Module/Batch.java deleted file mode 100755 index 0490ac9..0000000 --- a/src/main/java/com/qcloud/Module/Batch.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.qcloud.Module; - -/* - * see document: - * https://cloud.tencent.com/document/product/599 - */ -public class Batch extends Base { - public Batch(){ - serverHost = "batch.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Bgpip.java b/src/main/java/com/qcloud/Module/Bgpip.java deleted file mode 100755 index 5cf64c3..0000000 --- a/src/main/java/com/qcloud/Module/Bgpip.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Bgpip extends Base { - public Bgpip(){ - serverHost = "bgpip.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Bill.java b/src/main/java/com/qcloud/Module/Bill.java deleted file mode 100755 index ed1f799..0000000 --- a/src/main/java/com/qcloud/Module/Bill.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Bill extends Base{ - public Bill(){ - serverHost = "bill.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Bm.java b/src/main/java/com/qcloud/Module/Bm.java deleted file mode 100755 index 3729d61..0000000 --- a/src/main/java/com/qcloud/Module/Bm.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Bm extends Base{ - public Bm(){ - serverHost = "bm.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Bmeip.java b/src/main/java/com/qcloud/Module/Bmeip.java deleted file mode 100755 index bec5c0d..0000000 --- a/src/main/java/com/qcloud/Module/Bmeip.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Bmeip extends Base { - public Bmeip(){ - serverHost = "bmeip.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Bmlb.java b/src/main/java/com/qcloud/Module/Bmlb.java deleted file mode 100755 index fdb6926..0000000 --- a/src/main/java/com/qcloud/Module/Bmlb.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Bmlb extends Base{ - public Bmlb(){ - serverHost = "bmlb.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Bmvpc.java b/src/main/java/com/qcloud/Module/Bmvpc.java deleted file mode 100755 index 1042d14..0000000 --- a/src/main/java/com/qcloud/Module/Bmvpc.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Bmvpc extends Base { - public Bmvpc(){ - serverHost = "bmvpc.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Cbs.java b/src/main/java/com/qcloud/Module/Cbs.java deleted file mode 100755 index 65f84fd..0000000 --- a/src/main/java/com/qcloud/Module/Cbs.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Cbs extends Base { - public Cbs(){ - serverHost = "cbs.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Cdb.java b/src/main/java/com/qcloud/Module/Cdb.java deleted file mode 100755 index 9c52e7f..0000000 --- a/src/main/java/com/qcloud/Module/Cdb.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Cdb extends Base { - public Cdb(){ - serverHost = "cdb.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Cdn.java b/src/main/java/com/qcloud/Module/Cdn.java deleted file mode 100755 index ac7e2db..0000000 --- a/src/main/java/com/qcloud/Module/Cdn.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.qcloud.Module; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.security.NoSuchAlgorithmException; -import java.util.TreeMap; - -import com.qcloud.Utilities.MD5; - -public class Cdn extends Base { - - public Cdn(){ - serverHost = "cdn.api.qcloud.com"; - } - - public String UploadCdnEntity(TreeMap params) throws NoSuchAlgorithmException, IOException { - String actionName = "UploadCdnEntity"; - - String entityFile = params.get("entityFile").toString(); - params.remove("entityFile"); - File file = new File(entityFile); - if (!file.exists()) { - throw new FileNotFoundException(); - } - - if (!params.containsKey("entityFileMd5")) { - params.put("entityFileMd5", MD5.fileNameToMD5(entityFile)); - } - - return call(actionName, params, entityFile); - } -} \ No newline at end of file diff --git a/src/main/java/com/qcloud/Module/CloudAudit.java b/src/main/java/com/qcloud/Module/CloudAudit.java deleted file mode 100755 index 6f44fe8..0000000 --- a/src/main/java/com/qcloud/Module/CloudAudit.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.qcloud.Module; - -/* - * see document: - * https://cloud.tencent.com/document/product/629 - */ -public class CloudAudit extends Base { - public CloudAudit(){ - serverHost = "cloudaudit.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Cmem.java b/src/main/java/com/qcloud/Module/Cmem.java deleted file mode 100755 index 54f0363..0000000 --- a/src/main/java/com/qcloud/Module/Cmem.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.qcloud.Module; - -public class Cmem extends Base { - //protected String serverHost = "cmem.api.qcloud.com"; - public Cmem(){ - serverHost = "cmem.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Cns.java b/src/main/java/com/qcloud/Module/Cns.java deleted file mode 100755 index d52538d..0000000 --- a/src/main/java/com/qcloud/Module/Cns.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Cns extends Base { - public Cns(){ - serverHost = "cns.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Cvm.java b/src/main/java/com/qcloud/Module/Cvm.java deleted file mode 100755 index 8f2fa85..0000000 --- a/src/main/java/com/qcloud/Module/Cvm.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.qcloud.Module; - -public class Cvm extends Base { - //protected String serverHost = "cvm.api.qcloud.com"; - public Cvm(){ - serverHost = "cvm.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Dfw.java b/src/main/java/com/qcloud/Module/Dfw.java deleted file mode 100755 index 2c8b331..0000000 --- a/src/main/java/com/qcloud/Module/Dfw.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.qcloud.Module; - -/* - * Tencent Cloud security group related functionalities. - *

- * see API document: - * https://cloud.tencent.com/document/product/213/569 - *

- */ -public class Dfw extends Base { - public Dfw(){ - serverHost = "dfw.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Eip.java b/src/main/java/com/qcloud/Module/Eip.java deleted file mode 100755 index 6aa0a88..0000000 --- a/src/main/java/com/qcloud/Module/Eip.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Eip extends Base { - public Eip(){ - serverHost = "eip.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Feecenter.java b/src/main/java/com/qcloud/Module/Feecenter.java deleted file mode 100755 index fc01a69..0000000 --- a/src/main/java/com/qcloud/Module/Feecenter.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Feecenter extends Base{ - public Feecenter(){ - serverHost = "feecenter.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Image.java b/src/main/java/com/qcloud/Module/Image.java deleted file mode 100755 index ae811f3..0000000 --- a/src/main/java/com/qcloud/Module/Image.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Image extends Base { - public Image(){ - serverHost = "image.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Lb.java b/src/main/java/com/qcloud/Module/Lb.java deleted file mode 100755 index e494f42..0000000 --- a/src/main/java/com/qcloud/Module/Lb.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Lb extends Base { - public Lb(){ - serverHost = "lb.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Live.java b/src/main/java/com/qcloud/Module/Live.java deleted file mode 100755 index b5c8c0c..0000000 --- a/src/main/java/com/qcloud/Module/Live.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Live extends Base { - public Live(){ - serverHost = "live.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Market.java b/src/main/java/com/qcloud/Module/Market.java deleted file mode 100755 index e2aad29..0000000 --- a/src/main/java/com/qcloud/Module/Market.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Market extends Base { - public Market(){ - serverHost = "market.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Monitor.java b/src/main/java/com/qcloud/Module/Monitor.java deleted file mode 100755 index c0b7d22..0000000 --- a/src/main/java/com/qcloud/Module/Monitor.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Monitor extends Base { - public Monitor(){ - serverHost = "monitor.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Partners.java b/src/main/java/com/qcloud/Module/Partners.java deleted file mode 100755 index fd0f2d6..0000000 --- a/src/main/java/com/qcloud/Module/Partners.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.qcloud.Module; - -/* - * 腾讯云渠道合作伙伴服务 - *

- * see document: - * https://cloud.tencent.com/document/product/563 - *

- */ -public class Partners extends Base { - public Partners(){ - serverHost = "partners.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Scaling.java b/src/main/java/com/qcloud/Module/Scaling.java deleted file mode 100755 index bb7eabf..0000000 --- a/src/main/java/com/qcloud/Module/Scaling.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Scaling extends Base { - public Scaling(){ - serverHost = "scaling.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Scf.java b/src/main/java/com/qcloud/Module/Scf.java deleted file mode 100755 index 65aa0c3..0000000 --- a/src/main/java/com/qcloud/Module/Scf.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.qcloud.Module; - -/* - * Serverless Cloud Function. - *

- * see document: - * https://cloud.tencent.com/document/product/583 - *

- */ -public class Scf extends Base { - public Scf(){ - serverHost = "scf.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Sec.java b/src/main/java/com/qcloud/Module/Sec.java deleted file mode 100755 index 3b0e3f9..0000000 --- a/src/main/java/com/qcloud/Module/Sec.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Sec extends Base { - public Sec(){ - serverHost = "csec.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Snapshot.java b/src/main/java/com/qcloud/Module/Snapshot.java deleted file mode 100755 index f32ee0d..0000000 --- a/src/main/java/com/qcloud/Module/Snapshot.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Snapshot extends Base { - public Snapshot(){ - serverHost = "snapshot.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Sts.java b/src/main/java/com/qcloud/Module/Sts.java deleted file mode 100755 index 6102b1d..0000000 --- a/src/main/java/com/qcloud/Module/Sts.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Sts extends Base { - public Sts(){ - serverHost = "sts.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Tdsql.java b/src/main/java/com/qcloud/Module/Tdsql.java deleted file mode 100755 index 762d35b..0000000 --- a/src/main/java/com/qcloud/Module/Tdsql.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.qcloud.Module; - -public class Tdsql extends Base { - //protected String serverHost = "tdsql.api.qcloud.com"; - public Tdsql(){ - serverHost = "tdsql.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Tmt.java b/src/main/java/com/qcloud/Module/Tmt.java deleted file mode 100755 index 3d63b1d..0000000 --- a/src/main/java/com/qcloud/Module/Tmt.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.qcloud.Module; - -/* - * Tencent Machine Translation. - *

- * see document: - * https://cloud.tencent.com/document/product/551 - *

- */ -public class Tmt extends Base { - public Tmt() { - serverHost = "tmt.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Trade.java b/src/main/java/com/qcloud/Module/Trade.java deleted file mode 100755 index 45cbc7a..0000000 --- a/src/main/java/com/qcloud/Module/Trade.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Trade extends Base { - public Trade(){ - serverHost = "trade.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Vod.java b/src/main/java/com/qcloud/Module/Vod.java deleted file mode 100755 index 8ca52de..0000000 --- a/src/main/java/com/qcloud/Module/Vod.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Vod extends Base { - public Vod(){ - serverHost = "vod.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Vpc.java b/src/main/java/com/qcloud/Module/Vpc.java deleted file mode 100755 index 906acef..0000000 --- a/src/main/java/com/qcloud/Module/Vpc.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Vpc extends Base { - public Vpc(){ - serverHost = "vpc.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Wenzhi.java b/src/main/java/com/qcloud/Module/Wenzhi.java deleted file mode 100755 index 892cbd8..0000000 --- a/src/main/java/com/qcloud/Module/Wenzhi.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Wenzhi extends Base { - public Wenzhi(){ - serverHost = "wenzhi.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/Module/Yunsou.java b/src/main/java/com/qcloud/Module/Yunsou.java deleted file mode 100755 index a6838f0..0000000 --- a/src/main/java/com/qcloud/Module/Yunsou.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qcloud.Module; - -public class Yunsou extends Base { - public Yunsou(){ - serverHost = "yunsou.api.qcloud.com"; - } -} diff --git a/src/main/java/com/qcloud/QcloudApiModuleCenter.java b/src/main/java/com/qcloud/QcloudApiModuleCenter.java deleted file mode 100755 index 3767861..0000000 --- a/src/main/java/com/qcloud/QcloudApiModuleCenter.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.qcloud; - -import java.lang.reflect.Method; -import java.util.TreeMap; - -import com.qcloud.Module.Base; - -/** - * @brief 模块调用类 - * @author robinslsun - * - */ -public class QcloudApiModuleCenter { - - private Base module; - - /** - * 构造模块调用类 - * @param module 实际模块实例 - * @param config 模块配置参数 - */ - public QcloudApiModuleCenter(Base module, TreeMap config){ - this.module = module; - this.module.setConfig(config); - } - - /** - * 生成Api调用地址 - * @param actionName 模块动作名称 - * @param params 模块请求参数 - * @return Api调用地址 - */ - public String generateUrl(String actionName, TreeMap params){ - return module.generateUrl(actionName, params); - } - - /** - * Api调用 - * @param actionName 模块动作名称 - * @param params 模块请求参数 - * @return json字符串 - * @throws Exception - */ - public String call(String actionName, TreeMap params) throws Exception - { - for(Method method : module.getClass().getMethods()){ - if(method.getName().equals(actionName)){ - try { - return (String) method.invoke(module, params); - } catch (Exception e) { - throw e; - } - } - } - return module.call(actionName, params); - } - - public void setConfigSecretId(String secretId) { - module.setConfigSecretId(secretId); - } - - public void setConfigSecretKey(String secretKey) { - module.setConfigSecretKey(secretKey); - } - - public void setConfigDefaultRegion(String region) { - module.setConfigDefaultRegion(region); - } - - public void setConfigRequestMethod(String method) { - module.setConfigRequestMethod(method); - } -} diff --git a/src/main/java/com/qcloud/Utilities/Base64.java b/src/main/java/com/qcloud/Utilities/Base64.java deleted file mode 100755 index 588e4fb..0000000 --- a/src/main/java/com/qcloud/Utilities/Base64.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.qcloud.Utilities; - -import java.io.UnsupportedEncodingException; - -public class Base64 { - private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D', - 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', - 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', - 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', - '4', '5', '6', '7', '8', '9', '+', '/' }; - - private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, - -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, - -1, -1 }; - - public static String encode(byte[] data) { - StringBuffer sb = new StringBuffer(); - int len = data.length; - int i = 0; - int b1, b2, b3; - while (i < len) { - b1 = data[i++] & 0xff; - if (i == len) { - sb.append(base64EncodeChars[b1 >>> 2]); - sb.append(base64EncodeChars[(b1 & 0x3) << 4]); - sb.append("=="); - break; - } - b2 = data[i++] & 0xff; - if (i == len) { - sb.append(base64EncodeChars[b1 >>> 2]); - sb.append(base64EncodeChars[((b1 & 0x03) << 4) - | ((b2 & 0xf0) >>> 4)]); - sb.append(base64EncodeChars[(b2 & 0x0f) << 2]); - sb.append("="); - break; - } - b3 = data[i++] & 0xff; - sb.append(base64EncodeChars[b1 >>> 2]); - sb.append(base64EncodeChars[((b1 & 0x03) << 4) - | ((b2 & 0xf0) >>> 4)]); - sb.append(base64EncodeChars[((b2 & 0x0f) << 2) - | ((b3 & 0xc0) >>> 6)]); - sb.append(base64EncodeChars[b3 & 0x3f]); - } - return sb.toString(); - } - - public static byte[] decode(String str) throws UnsupportedEncodingException { - StringBuffer sb = new StringBuffer(); - byte[] data = str.getBytes("US-ASCII"); - int len = data.length; - int i = 0; - int b1, b2, b3, b4; - while (i < len) { - /* b1 */ - do { - b1 = base64DecodeChars[data[i++]]; - } while (i < len && b1 == -1); - if (b1 == -1) - break; - /* b2 */ - do { - b2 = base64DecodeChars[data[i++]]; - } while (i < len && b2 == -1); - if (b2 == -1) - break; - sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4))); - /* b3 */ - do { - b3 = data[i++]; - if (b3 == 61) - return sb.toString().getBytes("ISO-8859-1"); - b3 = base64DecodeChars[b3]; - } while (i < len && b3 == -1); - if (b3 == -1) - break; - sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2))); - /* b4 */ - do { - b4 = data[i++]; - if (b4 == 61) - return sb.toString().getBytes("ISO-8859-1"); - b4 = base64DecodeChars[b4]; - } while (i < len && b4 == -1); - if (b4 == -1) - break; - sb.append((char) (((b3 & 0x03) << 6) | b4)); - } - return sb.toString().getBytes("ISO-8859-1"); - } -} \ No newline at end of file diff --git a/src/main/java/com/qcloud/Utilities/Json/JSONArray.java b/src/main/java/com/qcloud/Utilities/Json/JSONArray.java deleted file mode 100755 index afb5f50..0000000 --- a/src/main/java/com/qcloud/Utilities/Json/JSONArray.java +++ /dev/null @@ -1,977 +0,0 @@ -package com.qcloud.Utilities.Json; - -/* - Copyright (c) 2002 JSON.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - The Software shall be used for Good, not Evil. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - */ - -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; - -/** - * A JSONArray is an ordered sequence of values. Its external text form is a - * string wrapped in square brackets with commas separating the values. The - * internal form is an object having get and opt - * methods for accessing the values by index, and put methods for - * adding or replacing values. The values can be any of these types: - * Boolean, JSONArray, JSONObject, - * Number, String, or the - * JSONObject.NULL object. - *

- * The constructor can convert a JSON text into a Java object. The - * toString method converts to JSON text. - *

- * A get method returns a value if one can be found, and throws an - * exception if one cannot be found. An opt method returns a - * default value instead of throwing an exception, and so is useful for - * obtaining optional values. - *

- * The generic get() and opt() methods return an - * object which you can cast or query for type. There are also typed - * get and opt methods that do type checking and type - * coercion for you. - *

- * The texts produced by the toString methods strictly conform to - * JSON syntax rules. The constructors are more forgiving in the texts they will - * accept: - *

    - *
  • An extra , (comma) may appear just - * before the closing bracket.
  • - *
  • The null value will be inserted when there is , - *  (comma) elision.
  • - *
  • Strings may be quoted with ' (single - * quote).
  • - *
  • Strings do not need to be quoted at all if they do not begin with a quote - * or single quote, and if they do not contain leading or trailing spaces, and - * if they do not contain any of these characters: - * { } [ ] / \ : , # and if they do not look like numbers and - * if they are not the reserved words true, false, or - * null.
  • - *
- * - * @author JSON.org - * @version 2014-05-03 - */ -public class JSONArray { - - /** - * The arrayList where the JSONArray's properties are kept. - */ - private final ArrayList myArrayList; - - /** - * Construct an empty JSONArray. - */ - public JSONArray() { - this.myArrayList = new ArrayList(); - } - - /** - * Construct a JSONArray from a JSONTokener. - * - * @param x - * A JSONTokener - * @throws JSONException - * If there is a syntax error. - */ - public JSONArray(JSONTokener x) throws JSONException { - this(); - if (x.nextClean() != '[') { - throw x.syntaxError("A JSONArray text must start with '['"); - } - if (x.nextClean() != ']') { - x.back(); - for (;;) { - if (x.nextClean() == ',') { - x.back(); - this.myArrayList.add(JSONObject.NULL); - } else { - x.back(); - this.myArrayList.add(x.nextValue()); - } - switch (x.nextClean()) { - case ',': - if (x.nextClean() == ']') { - return; - } - x.back(); - break; - case ']': - return; - default: - throw x.syntaxError("Expected a ',' or ']'"); - } - } - } - } - - /** - * Construct a JSONArray from a source JSON text. - * - * @param source - * A string that begins with [ (left - * bracket) and ends with ] - *  (right bracket). - * @throws JSONException - * If there is a syntax error. - */ - public JSONArray(String source) throws JSONException { - this(new JSONTokener(source)); - } - - /** - * Construct a JSONArray from a Collection. - * - * @param collection - * A Collection. - */ - public JSONArray(Collection collection) { - this.myArrayList = new ArrayList(); - if (collection != null) { - Iterator iter = collection.iterator(); - while (iter.hasNext()) { - this.myArrayList.add(JSONObject.wrap(iter.next())); - } - } - } - - /** - * Construct a JSONArray from an array - * - * @throws JSONException - * If not an array. - */ - public JSONArray(Object array) throws JSONException { - this(); - if (array.getClass().isArray()) { - int length = Array.getLength(array); - for (int i = 0; i < length; i += 1) { - this.put(JSONObject.wrap(Array.get(array, i))); - } - } else { - throw new JSONException( - "JSONArray initial value should be a string or collection or array."); - } - } - - /** - * Get the object value associated with an index. - * - * @param index - * The index must be between 0 and length() - 1. - * @return An object value. - * @throws JSONException - * If there is no value for the index. - */ - public Object get(int index) throws JSONException { - Object object = this.opt(index); - if (object == null) { - throw new JSONException("JSONArray[" + index + "] not found."); - } - return object; - } - - /** - * Get the boolean value associated with an index. The string values "true" - * and "false" are converted to boolean. - * - * @param index - * The index must be between 0 and length() - 1. - * @return The truth. - * @throws JSONException - * If there is no value for the index or if the value is not - * convertible to boolean. - */ - public boolean getBoolean(int index) throws JSONException { - Object object = this.get(index); - if (object.equals(Boolean.FALSE) - || (object instanceof String && ((String) object) - .equalsIgnoreCase("false"))) { - return false; - } else if (object.equals(Boolean.TRUE) - || (object instanceof String && ((String) object) - .equalsIgnoreCase("true"))) { - return true; - } - throw new JSONException("JSONArray[" + index + "] is not a boolean."); - } - - /** - * Get the double value associated with an index. - * - * @param index - * The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException - * If the key is not found or if the value cannot be converted - * to a number. - */ - public double getDouble(int index) throws JSONException { - Object object = this.get(index); - try { - return object instanceof Number ? ((Number) object).doubleValue() - : Double.parseDouble((String) object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + "] is not a number."); - } - } - - /** - * Get the int value associated with an index. - * - * @param index - * The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException - * If the key is not found or if the value is not a number. - */ - public int getInt(int index) throws JSONException { - Object object = this.get(index); - try { - return object instanceof Number ? ((Number) object).intValue() - : Integer.parseInt((String) object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + "] is not a number."); - } - } - - /** - * Get the JSONArray associated with an index. - * - * @param index - * The index must be between 0 and length() - 1. - * @return A JSONArray value. - * @throws JSONException - * If there is no value for the index. or if the value is not a - * JSONArray - */ - public JSONArray getJSONArray(int index) throws JSONException { - Object object = this.get(index); - if (object instanceof JSONArray) { - return (JSONArray) object; - } - throw new JSONException("JSONArray[" + index + "] is not a JSONArray."); - } - - /** - * Get the JSONObject associated with an index. - * - * @param index - * subscript - * @return A JSONObject value. - * @throws JSONException - * If there is no value for the index or if the value is not a - * JSONObject - */ - public JSONObject getJSONObject(int index) throws JSONException { - Object object = this.get(index); - if (object instanceof JSONObject) { - return (JSONObject) object; - } - throw new JSONException("JSONArray[" + index + "] is not a JSONObject."); - } - - /** - * Get the long value associated with an index. - * - * @param index - * The index must be between 0 and length() - 1. - * @return The value. - * @throws JSONException - * If the key is not found or if the value cannot be converted - * to a number. - */ - public long getLong(int index) throws JSONException { - Object object = this.get(index); - try { - return object instanceof Number ? ((Number) object).longValue() - : Long.parseLong((String) object); - } catch (Exception e) { - throw new JSONException("JSONArray[" + index + "] is not a number."); - } - } - - /** - * Get the string associated with an index. - * - * @param index - * The index must be between 0 and length() - 1. - * @return A string value. - * @throws JSONException - * If there is no string value for the index. - */ - public String getString(int index) throws JSONException { - Object object = this.get(index); - if (object instanceof String) { - return (String) object; - } - throw new JSONException("JSONArray[" + index + "] not a string."); - } - - /** - * Determine if the value is null. - * - * @param index - * The index must be between 0 and length() - 1. - * @return true if the value at the index is null, or if there is no value. - */ - public boolean isNull(int index) { - return JSONObject.NULL.equals(this.opt(index)); - } - - /** - * Make a string from the contents of this JSONArray. The - * separator string is inserted between each element. Warning: - * This method assumes that the data structure is acyclical. - * - * @param separator - * A string that will be inserted between the elements. - * @return a string. - * @throws JSONException - * If the array contains an invalid number. - */ - public String join(String separator) throws JSONException { - int len = this.length(); - StringBuilder sb = new StringBuilder(); - - for (int i = 0; i < len; i += 1) { - if (i > 0) { - sb.append(separator); - } - sb.append(JSONObject.valueToString(this.myArrayList.get(i))); - } - return sb.toString(); - } - - /** - * Get the number of elements in the JSONArray, included nulls. - * - * @return The length (or size). - */ - public int length() { - return this.myArrayList.size(); - } - - /** - * Get the optional object value associated with an index. - * - * @param index - * The index must be between 0 and length() - 1. - * @return An object value, or null if there is no object at that index. - */ - public Object opt(int index) { - return (index < 0 || index >= this.length()) ? null : this.myArrayList - .get(index); - } - - /** - * Get the optional boolean value associated with an index. It returns false - * if there is no value at that index, or if the value is not Boolean.TRUE - * or the String "true". - * - * @param index - * The index must be between 0 and length() - 1. - * @return The truth. - */ - public boolean optBoolean(int index) { - return this.optBoolean(index, false); - } - - /** - * Get the optional boolean value associated with an index. It returns the - * defaultValue if there is no value at that index or if it is not a Boolean - * or the String "true" or "false" (case insensitive). - * - * @param index - * The index must be between 0 and length() - 1. - * @param defaultValue - * A boolean default. - * @return The truth. - */ - public boolean optBoolean(int index, boolean defaultValue) { - try { - return this.getBoolean(index); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get the optional double value associated with an index. NaN is returned - * if there is no value for the index, or if the value is not a number and - * cannot be converted to a number. - * - * @param index - * The index must be between 0 and length() - 1. - * @return The value. - */ - public double optDouble(int index) { - return this.optDouble(index, Double.NaN); - } - - /** - * Get the optional double value associated with an index. The defaultValue - * is returned if there is no value for the index, or if the value is not a - * number and cannot be converted to a number. - * - * @param index - * subscript - * @param defaultValue - * The default value. - * @return The value. - */ - public double optDouble(int index, double defaultValue) { - try { - return this.getDouble(index); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get the optional int value associated with an index. Zero is returned if - * there is no value for the index, or if the value is not a number and - * cannot be converted to a number. - * - * @param index - * The index must be between 0 and length() - 1. - * @return The value. - */ - public int optInt(int index) { - return this.optInt(index, 0); - } - - /** - * Get the optional int value associated with an index. The defaultValue is - * returned if there is no value for the index, or if the value is not a - * number and cannot be converted to a number. - * - * @param index - * The index must be between 0 and length() - 1. - * @param defaultValue - * The default value. - * @return The value. - */ - public int optInt(int index, int defaultValue) { - try { - return this.getInt(index); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get the optional JSONArray associated with an index. - * - * @param index - * subscript - * @return A JSONArray value, or null if the index has no value, or if the - * value is not a JSONArray. - */ - public JSONArray optJSONArray(int index) { - Object o = this.opt(index); - return o instanceof JSONArray ? (JSONArray) o : null; - } - - /** - * Get the optional JSONObject associated with an index. Null is returned if - * the key is not found, or null if the index has no value, or if the value - * is not a JSONObject. - * - * @param index - * The index must be between 0 and length() - 1. - * @return A JSONObject value. - */ - public JSONObject optJSONObject(int index) { - Object o = this.opt(index); - return o instanceof JSONObject ? (JSONObject) o : null; - } - - /** - * Get the optional long value associated with an index. Zero is returned if - * there is no value for the index, or if the value is not a number and - * cannot be converted to a number. - * - * @param index - * The index must be between 0 and length() - 1. - * @return The value. - */ - public long optLong(int index) { - return this.optLong(index, 0); - } - - /** - * Get the optional long value associated with an index. The defaultValue is - * returned if there is no value for the index, or if the value is not a - * number and cannot be converted to a number. - * - * @param index - * The index must be between 0 and length() - 1. - * @param defaultValue - * The default value. - * @return The value. - */ - public long optLong(int index, long defaultValue) { - try { - return this.getLong(index); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get the optional string value associated with an index. It returns an - * empty string if there is no value at that index. If the value is not a - * string and is not null, then it is coverted to a string. - * - * @param index - * The index must be between 0 and length() - 1. - * @return A String value. - */ - public String optString(int index) { - return this.optString(index, ""); - } - - /** - * Get the optional string associated with an index. The defaultValue is - * returned if the key is not found. - * - * @param index - * The index must be between 0 and length() - 1. - * @param defaultValue - * The default value. - * @return A String value. - */ - public String optString(int index, String defaultValue) { - Object object = this.opt(index); - return JSONObject.NULL.equals(object) ? defaultValue : object - .toString(); - } - - /** - * Append a boolean value. This increases the array's length by one. - * - * @param value - * A boolean value. - * @return this. - */ - public JSONArray put(boolean value) { - this.put(value ? Boolean.TRUE : Boolean.FALSE); - return this; - } - - /** - * Put a value in the JSONArray, where the value will be a JSONArray which - * is produced from a Collection. - * - * @param value - * A Collection value. - * @return this. - */ - public JSONArray put(Collection value) { - this.put(new JSONArray(value)); - return this; - } - - /** - * Append a double value. This increases the array's length by one. - * - * @param value - * A double value. - * @throws JSONException - * if the value is not finite. - * @return this. - */ - public JSONArray put(double value) throws JSONException { - Double d = new Double(value); - JSONObject.testValidity(d); - this.put(d); - return this; - } - - /** - * Append an int value. This increases the array's length by one. - * - * @param value - * An int value. - * @return this. - */ - public JSONArray put(int value) { - this.put(new Integer(value)); - return this; - } - - /** - * Append an long value. This increases the array's length by one. - * - * @param value - * A long value. - * @return this. - */ - public JSONArray put(long value) { - this.put(new Long(value)); - return this; - } - - /** - * Put a value in the JSONArray, where the value will be a JSONObject which - * is produced from a Map. - * - * @param value - * A Map value. - * @return this. - */ - public JSONArray put(Map value) { - this.put(new JSONObject(value)); - return this; - } - - /** - * Append an object value. This increases the array's length by one. - * - * @param value - * An object value. The value should be a Boolean, Double, - * Integer, JSONArray, JSONObject, Long, or String, or the - * JSONObject.NULL object. - * @return this. - */ - public JSONArray put(Object value) { - this.myArrayList.add(value); - return this; - } - - /** - * Put or replace a boolean value in the JSONArray. If the index is greater - * than the length of the JSONArray, then null elements will be added as - * necessary to pad it out. - * - * @param index - * The subscript. - * @param value - * A boolean value. - * @return this. - * @throws JSONException - * If the index is negative. - */ - public JSONArray put(int index, boolean value) throws JSONException { - this.put(index, value ? Boolean.TRUE : Boolean.FALSE); - return this; - } - - /** - * Put a value in the JSONArray, where the value will be a JSONArray which - * is produced from a Collection. - * - * @param index - * The subscript. - * @param value - * A Collection value. - * @return this. - * @throws JSONException - * If the index is negative or if the value is not finite. - */ - public JSONArray put(int index, Collection value) throws JSONException { - this.put(index, new JSONArray(value)); - return this; - } - - /** - * Put or replace a double value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad it - * out. - * - * @param index - * The subscript. - * @param value - * A double value. - * @return this. - * @throws JSONException - * If the index is negative or if the value is not finite. - */ - public JSONArray put(int index, double value) throws JSONException { - this.put(index, new Double(value)); - return this; - } - - /** - * Put or replace an int value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad it - * out. - * - * @param index - * The subscript. - * @param value - * An int value. - * @return this. - * @throws JSONException - * If the index is negative. - */ - public JSONArray put(int index, int value) throws JSONException { - this.put(index, new Integer(value)); - return this; - } - - /** - * Put or replace a long value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad it - * out. - * - * @param index - * The subscript. - * @param value - * A long value. - * @return this. - * @throws JSONException - * If the index is negative. - */ - public JSONArray put(int index, long value) throws JSONException { - this.put(index, new Long(value)); - return this; - } - - /** - * Put a value in the JSONArray, where the value will be a JSONObject that - * is produced from a Map. - * - * @param index - * The subscript. - * @param value - * The Map value. - * @return this. - * @throws JSONException - * If the index is negative or if the the value is an invalid - * number. - */ - public JSONArray put(int index, Map value) throws JSONException { - this.put(index, new JSONObject(value)); - return this; - } - - /** - * Put or replace an object value in the JSONArray. If the index is greater - * than the length of the JSONArray, then null elements will be added as - * necessary to pad it out. - * - * @param index - * The subscript. - * @param value - * The value to put into the array. The value should be a - * Boolean, Double, Integer, JSONArray, JSONObject, Long, or - * String, or the JSONObject.NULL object. - * @return this. - * @throws JSONException - * If the index is negative or if the the value is an invalid - * number. - */ - public JSONArray put(int index, Object value) throws JSONException { - JSONObject.testValidity(value); - if (index < 0) { - throw new JSONException("JSONArray[" + index + "] not found."); - } - if (index < this.length()) { - this.myArrayList.set(index, value); - } else { - while (index != this.length()) { - this.put(JSONObject.NULL); - } - this.put(value); - } - return this; - } - - /** - * Remove an index and close the hole. - * - * @param index - * The index of the element to be removed. - * @return The value that was associated with the index, or null if there - * was no value. - */ - public Object remove(int index) { - return index >= 0 && index < this.length() - ? this.myArrayList.remove(index) - : null; - } - - /** - * Determine if two JSONArrays are similar. - * They must contain similar sequences. - * - * @param other The other JSONArray - * @return true if they are equal - */ - public boolean similar(Object other) { - if (!(other instanceof JSONArray)) { - return false; - } - int len = this.length(); - if (len != ((JSONArray)other).length()) { - return false; - } - for (int i = 0; i < len; i += 1) { - Object valueThis = this.get(i); - Object valueOther = ((JSONArray)other).get(i); - if (valueThis instanceof JSONObject) { - if (!((JSONObject)valueThis).similar(valueOther)) { - return false; - } - } else if (valueThis instanceof JSONArray) { - if (!((JSONArray)valueThis).similar(valueOther)) { - return false; - } - } else if (!valueThis.equals(valueOther)) { - return false; - } - } - return true; - } - - /** - * Produce a JSONObject by combining a JSONArray of names with the values of - * this JSONArray. - * - * @param names - * A JSONArray containing a list of key strings. These will be - * paired with the values. - * @return A JSONObject, or null if there are no names or if this JSONArray - * has no values. - * @throws JSONException - * If any of the names are null. - */ - public JSONObject toJSONObject(JSONArray names) throws JSONException { - if (names == null || names.length() == 0 || this.length() == 0) { - return null; - } - JSONObject jo = new JSONObject(); - for (int i = 0; i < names.length(); i += 1) { - jo.put(names.getString(i), this.opt(i)); - } - return jo; - } - - /** - * Make a JSON text of this JSONArray. For compactness, no unnecessary - * whitespace is added. If it is not possible to produce a syntactically - * correct JSON text then null will be returned instead. This could occur if - * the array contains an invalid number. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return a printable, displayable, transmittable representation of the - * array. - */ - public String toString() { - try { - return this.toString(0); - } catch (Exception e) { - return null; - } - } - - /** - * Make a prettyprinted JSON text of this JSONArray. Warning: This method - * assumes that the data structure is acyclical. - * - * @param indentFactor - * The number of spaces to add to each level of indentation. - * @return a printable, displayable, transmittable representation of the - * object, beginning with [ (left - * bracket) and ending with ] - *  (right bracket). - * @throws JSONException - */ - public String toString(int indentFactor) throws JSONException { - StringWriter sw = new StringWriter(); - synchronized (sw.getBuffer()) { - return this.write(sw, indentFactor, 0).toString(); - } - } - - /** - * Write the contents of the JSONArray as JSON text to a writer. For - * compactness, no whitespace is added. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return The writer. - * @throws JSONException - */ - public Writer write(Writer writer) throws JSONException { - return this.write(writer, 0, 0); - } - - /** - * Write the contents of the JSONArray as JSON text to a writer. For - * compactness, no whitespace is added. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @param indentFactor - * The number of spaces to add to each level of indentation. - * @param indent - * The indention of the top level. - * @return The writer. - * @throws JSONException - */ - Writer write(Writer writer, int indentFactor, int indent) - throws JSONException { - try { - boolean commanate = false; - int length = this.length(); - writer.write('['); - - if (length == 1) { - JSONObject.writeValue(writer, this.myArrayList.get(0), - indentFactor, indent); - } else if (length != 0) { - final int newindent = indent + indentFactor; - - for (int i = 0; i < length; i += 1) { - if (commanate) { - writer.write(','); - } - if (indentFactor > 0) { - writer.write('\n'); - } - JSONObject.indent(writer, newindent); - JSONObject.writeValue(writer, this.myArrayList.get(i), - indentFactor, newindent); - commanate = true; - } - if (indentFactor > 0) { - writer.write('\n'); - } - JSONObject.indent(writer, indent); - } - writer.write(']'); - return writer; - } catch (IOException e) { - throw new JSONException(e); - } - } -} diff --git a/src/main/java/com/qcloud/Utilities/Json/JSONException.java b/src/main/java/com/qcloud/Utilities/Json/JSONException.java deleted file mode 100755 index bfc8227..0000000 --- a/src/main/java/com/qcloud/Utilities/Json/JSONException.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.qcloud.Utilities.Json; - -/** - * The JSONException is thrown by the JSON.org classes when things are amiss. - * - * @author JSON.org - * @version 2014-05-03 - */ -public class JSONException extends RuntimeException { - private static final long serialVersionUID = 0; - private Throwable cause; - - /** - * Constructs a JSONException with an explanatory message. - * - * @param message - * Detail about the reason for the exception. - */ - public JSONException(String message) { - super(message); - } - - /** - * Constructs a new JSONException with the specified cause. - * @param cause The cause. - */ - public JSONException(Throwable cause) { - super(cause.getMessage()); - this.cause = cause; - } - - /** - * Returns the cause of this exception or null if the cause is nonexistent - * or unknown. - * - * @return the cause of this exception or null if the cause is nonexistent - * or unknown. - */ - @Override - public Throwable getCause() { - return this.cause; - } -} diff --git a/src/main/java/com/qcloud/Utilities/Json/JSONObject.java b/src/main/java/com/qcloud/Utilities/Json/JSONObject.java deleted file mode 100755 index 8fbff1b..0000000 --- a/src/main/java/com/qcloud/Utilities/Json/JSONObject.java +++ /dev/null @@ -1,1695 +0,0 @@ -package com.qcloud.Utilities.Json; - -/* - Copyright (c) 2002 JSON.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - The Software shall be used for Good, not Evil. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - */ - -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.Collection; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; -import java.util.ResourceBundle; -import java.util.Set; - -/** - * A JSONObject is an unordered collection of name/value pairs. Its external - * form is a string wrapped in curly braces with colons between the names and - * values, and commas between the values and names. The internal form is an - * object having get and opt methods for accessing - * the values by name, and put methods for adding or replacing - * values by name. The values can be any of these types: Boolean, - * JSONArray, JSONObject, Number, - * String, or the JSONObject.NULL object. A - * JSONObject constructor can be used to convert an external form JSON text - * into an internal form whose values can be retrieved with the - * get and opt methods, or to convert values into a - * JSON text using the put and toString methods. A - * get method returns a value if one can be found, and throws an - * exception if one cannot be found. An opt method returns a - * default value instead of throwing an exception, and so is useful for - * obtaining optional values. - *

- * The generic get() and opt() methods return an - * object, which you can cast or query for type. There are also typed - * get and opt methods that do type checking and type - * coercion for you. The opt methods differ from the get methods in that they - * do not throw. Instead, they return a specified value, such as null. - *

- * The put methods add or replace values in an object. For - * example, - * - *

- * myString = new JSONObject()
- *         .put("JSON", "Hello, World!").toString();
- * 
- * - * produces the string {"JSON": "Hello, World"}. - *

- * The texts produced by the toString methods strictly conform to - * the JSON syntax rules. The constructors are more forgiving in the texts they - * will accept: - *

    - *
  • An extra , (comma) may appear just - * before the closing brace.
  • - *
  • Strings may be quoted with ' (single - * quote).
  • - *
  • Strings do not need to be quoted at all if they do not begin with a - * quote or single quote, and if they do not contain leading or trailing - * spaces, and if they do not contain any of these characters: - * { } [ ] / \ : , # and if they do not look like numbers and - * if they are not the reserved words true, false, - * or null.
  • - *
- * - * @author JSON.org - * @version 2015-05-05 - */ -public class JSONObject { - /** - * JSONObject.NULL is equivalent to the value that JavaScript calls null, - * whilst Java's null is equivalent to the value that JavaScript calls - * undefined. - */ - private static final class Null { - - /** - * There is only intended to be a single instance of the NULL object, - * so the clone method returns itself. - * - * @return NULL. - */ - @Override - protected final Object clone() { - return this; - } - - /** - * A Null object is equal to the null value and to itself. - * - * @param object - * An object to test for nullness. - * @return true if the object parameter is the JSONObject.NULL object or - * null. - */ - @Override - public boolean equals(Object object) { - return object == null || object == this; - } - - /** - * Get the "null" string value. - * - * @return The string "null". - */ - public String toString() { - return "null"; - } - } - - /** - * The map where the JSONObject's properties are kept. - */ - private final Map map; - - /** - * It is sometimes more convenient and less ambiguous to have a - * NULL object than to use Java's null value. - * JSONObject.NULL.equals(null) returns true. - * JSONObject.NULL.toString() returns "null". - */ - public static final Object NULL = new Null(); - - /** - * Construct an empty JSONObject. - */ - public JSONObject() { - this.map = new HashMap(); - } - - /** - * Construct a JSONObject from a subset of another JSONObject. An array of - * strings is used to identify the keys that should be copied. Missing keys - * are ignored. - * - * @param jo - * A JSONObject. - * @param names - * An array of strings. - * @throws JSONException - * @exception JSONException - * If a value is a non-finite number or if a name is - * duplicated. - */ - public JSONObject(JSONObject jo, String[] names) { - this(); - for (int i = 0; i < names.length; i += 1) { - try { - this.putOnce(names[i], jo.opt(names[i])); - } catch (Exception ignore) { - } - } - } - - /** - * Construct a JSONObject from a JSONTokener. - * - * @param x - * A JSONTokener object containing the source string. - * @throws JSONException - * If there is a syntax error in the source string or a - * duplicated key. - */ - public JSONObject(JSONTokener x) throws JSONException { - this(); - char c; - String key; - - if (x.nextClean() != '{') { - throw x.syntaxError("A JSONObject text must begin with '{'"); - } - for (;;) { - c = x.nextClean(); - switch (c) { - case 0: - throw x.syntaxError("A JSONObject text must end with '}'"); - case '}': - return; - default: - x.back(); - key = x.nextValue().toString(); - } - -// The key is followed by ':'. - - c = x.nextClean(); - if (c != ':') { - throw x.syntaxError("Expected a ':' after a key"); - } - this.putOnce(key, x.nextValue()); - -// Pairs are separated by ','. - - switch (x.nextClean()) { - case ';': - case ',': - if (x.nextClean() == '}') { - return; - } - x.back(); - break; - case '}': - return; - default: - throw x.syntaxError("Expected a ',' or '}'"); - } - } - } - - /** - * Construct a JSONObject from a Map. - * - * @param map - * A map object that can be used to initialize the contents of - * the JSONObject. - * @throws JSONException - */ - public JSONObject(Map map) { - this.map = new HashMap(); - if (map != null) { - Iterator> i = map.entrySet().iterator(); - while (i.hasNext()) { - Entry entry = i.next(); - Object value = entry.getValue(); - if (value != null) { - this.map.put(entry.getKey(), wrap(value)); - } - } - } - } - - /** - * Construct a JSONObject from an Object using bean getters. It reflects on - * all of the public methods of the object. For each of the methods with no - * parameters and a name starting with "get" or - * "is" followed by an uppercase letter, the method is invoked, - * and a key and the value returned from the getter method are put into the - * new JSONObject. - * - * The key is formed by removing the "get" or "is" - * prefix. If the second remaining character is not upper case, then the - * first character is converted to lower case. - * - * For example, if an object has a method named "getName", and - * if the result of calling object.getName() is - * "Larry Fine", then the JSONObject will contain - * "name": "Larry Fine". - * - * @param bean - * An object that has getter methods that should be used to make - * a JSONObject. - */ - public JSONObject(Object bean) { - this(); - this.populateMap(bean); - } - - /** - * Construct a JSONObject from an Object, using reflection to find the - * public members. The resulting JSONObject's keys will be the strings from - * the names array, and the values will be the field values associated with - * those keys in the object. If a key is not found or not visible, then it - * will not be copied into the new JSONObject. - * - * @param object - * An object that has fields that should be used to make a - * JSONObject. - * @param names - * An array of strings, the names of the fields to be obtained - * from the object. - */ - public JSONObject(Object object, String names[]) { - this(); - Class c = object.getClass(); - for (int i = 0; i < names.length; i += 1) { - String name = names[i]; - try { - this.putOpt(name, c.getField(name).get(object)); - } catch (Exception ignore) { - } - } - } - - /** - * Construct a JSONObject from a source JSON text string. This is the most - * commonly used JSONObject constructor. - * - * @param source - * A string beginning with { (left - * brace) and ending with } - *  (right brace). - * @exception JSONException - * If there is a syntax error in the source string or a - * duplicated key. - */ - public JSONObject(String source) throws JSONException { - this(new JSONTokener(source)); - } - - /** - * Construct a JSONObject from a ResourceBundle. - * - * @param baseName - * The ResourceBundle base name. - * @param locale - * The Locale to load the ResourceBundle for. - * @throws JSONException - * If any JSONExceptions are detected. - */ - public JSONObject(String baseName, Locale locale) throws JSONException { - this(); - ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, - Thread.currentThread().getContextClassLoader()); - -// Iterate through the keys in the bundle. - - Enumeration keys = bundle.getKeys(); - while (keys.hasMoreElements()) { - Object key = keys.nextElement(); - if (key != null) { - -// Go through the path, ensuring that there is a nested JSONObject for each -// segment except the last. Add the value using the last segment's name into -// the deepest nested JSONObject. - - String[] path = ((String) key).split("\\."); - int last = path.length - 1; - JSONObject target = this; - for (int i = 0; i < last; i += 1) { - String segment = path[i]; - JSONObject nextTarget = target.optJSONObject(segment); - if (nextTarget == null) { - nextTarget = new JSONObject(); - target.put(segment, nextTarget); - } - target = nextTarget; - } - target.put(path[last], bundle.getString((String) key)); - } - } - } - - /** - * Accumulate values under a key. It is similar to the put method except - * that if there is already an object stored under the key then a JSONArray - * is stored under the key to hold all of the accumulated values. If there - * is already a JSONArray, then the new value is appended to it. In - * contrast, the put method replaces the previous value. - * - * If only one value is accumulated that is not a JSONArray, then the result - * will be the same as using put. But if multiple values are accumulated, - * then the result will be like append. - * - * @param key - * A key string. - * @param value - * An object to be accumulated under the key. - * @return this. - * @throws JSONException - * If the value is an invalid number or if the key is null. - */ - public JSONObject accumulate(String key, Object value) throws JSONException { - testValidity(value); - Object object = this.opt(key); - if (object == null) { - this.put(key, - value instanceof JSONArray ? new JSONArray().put(value) - : value); - } else if (object instanceof JSONArray) { - ((JSONArray) object).put(value); - } else { - this.put(key, new JSONArray().put(object).put(value)); - } - return this; - } - - /** - * Append values to the array under a key. If the key does not exist in the - * JSONObject, then the key is put in the JSONObject with its value being a - * JSONArray containing the value parameter. If the key was already - * associated with a JSONArray, then the value parameter is appended to it. - * - * @param key - * A key string. - * @param value - * An object to be accumulated under the key. - * @return this. - * @throws JSONException - * If the key is null or if the current value associated with - * the key is not a JSONArray. - */ - public JSONObject append(String key, Object value) throws JSONException { - testValidity(value); - Object object = this.opt(key); - if (object == null) { - this.put(key, new JSONArray().put(value)); - } else if (object instanceof JSONArray) { - this.put(key, ((JSONArray) object).put(value)); - } else { - throw new JSONException("JSONObject[" + key - + "] is not a JSONArray."); - } - return this; - } - - /** - * Produce a string from a double. The string "null" will be returned if the - * number is not finite. - * - * @param d - * A double. - * @return A String. - */ - public static String doubleToString(double d) { - if (Double.isInfinite(d) || Double.isNaN(d)) { - return "null"; - } - -// Shave off trailing zeros and decimal point, if possible. - - String string = Double.toString(d); - if (string.indexOf('.') > 0 && string.indexOf('e') < 0 - && string.indexOf('E') < 0) { - while (string.endsWith("0")) { - string = string.substring(0, string.length() - 1); - } - if (string.endsWith(".")) { - string = string.substring(0, string.length() - 1); - } - } - return string; - } - - /** - * Get the value object associated with a key. - * - * @param key - * A key string. - * @return The object associated with the key. - * @throws JSONException - * if the key is not found. - */ - public Object get(String key) throws JSONException { - if (key == null) { - throw new JSONException("Null key."); - } - Object object = this.opt(key); - if (object == null) { - throw new JSONException("JSONObject[" + quote(key) + "] not found."); - } - return object; - } - - /** - * Get the boolean value associated with a key. - * - * @param key - * A key string. - * @return The truth. - * @throws JSONException - * if the value is not a Boolean or the String "true" or - * "false". - */ - public boolean getBoolean(String key) throws JSONException { - Object object = this.get(key); - if (object.equals(Boolean.FALSE) - || (object instanceof String && ((String) object) - .equalsIgnoreCase("false"))) { - return false; - } else if (object.equals(Boolean.TRUE) - || (object instanceof String && ((String) object) - .equalsIgnoreCase("true"))) { - return true; - } - throw new JSONException("JSONObject[" + quote(key) - + "] is not a Boolean."); - } - - /** - * Get the double value associated with a key. - * - * @param key - * A key string. - * @return The numeric value. - * @throws JSONException - * if the key is not found or if the value is not a Number - * object and cannot be converted to a number. - */ - public double getDouble(String key) throws JSONException { - Object object = this.get(key); - try { - return object instanceof Number ? ((Number) object).doubleValue() - : Double.parseDouble((String) object); - } catch (Exception e) { - throw new JSONException("JSONObject[" + quote(key) - + "] is not a number."); - } - } - - /** - * Get the int value associated with a key. - * - * @param key - * A key string. - * @return The integer value. - * @throws JSONException - * if the key is not found or if the value cannot be converted - * to an integer. - */ - public int getInt(String key) throws JSONException { - Object object = this.get(key); - try { - return object instanceof Number ? ((Number) object).intValue() - : Integer.parseInt((String) object); - } catch (Exception e) { - throw new JSONException("JSONObject[" + quote(key) - + "] is not an int."); - } - } - - /** - * Get the JSONArray value associated with a key. - * - * @param key - * A key string. - * @return A JSONArray which is the value. - * @throws JSONException - * if the key is not found or if the value is not a JSONArray. - */ - public JSONArray getJSONArray(String key) throws JSONException { - Object object = this.get(key); - if (object instanceof JSONArray) { - return (JSONArray) object; - } - throw new JSONException("JSONObject[" + quote(key) - + "] is not a JSONArray."); - } - - /** - * Get the JSONObject value associated with a key. - * - * @param key - * A key string. - * @return A JSONObject which is the value. - * @throws JSONException - * if the key is not found or if the value is not a JSONObject. - */ - public JSONObject getJSONObject(String key) throws JSONException { - Object object = this.get(key); - if (object instanceof JSONObject) { - return (JSONObject) object; - } - throw new JSONException("JSONObject[" + quote(key) - + "] is not a JSONObject."); - } - - /** - * Get the long value associated with a key. - * - * @param key - * A key string. - * @return The long value. - * @throws JSONException - * if the key is not found or if the value cannot be converted - * to a long. - */ - public long getLong(String key) throws JSONException { - Object object = this.get(key); - try { - return object instanceof Number ? ((Number) object).longValue() - : Long.parseLong((String) object); - } catch (Exception e) { - throw new JSONException("JSONObject[" + quote(key) - + "] is not a long."); - } - } - - /** - * Get an array of field names from a JSONObject. - * - * @return An array of field names, or null if there are no names. - */ - public static String[] getNames(JSONObject jo) { - int length = jo.length(); - if (length == 0) { - return null; - } - Iterator iterator = jo.keys(); - String[] names = new String[length]; - int i = 0; - while (iterator.hasNext()) { - names[i] = iterator.next(); - i += 1; - } - return names; - } - - /** - * Get an array of field names from an Object. - * - * @return An array of field names, or null if there are no names. - */ - public static String[] getNames(Object object) { - if (object == null) { - return null; - } - Class klass = object.getClass(); - Field[] fields = klass.getFields(); - int length = fields.length; - if (length == 0) { - return null; - } - String[] names = new String[length]; - for (int i = 0; i < length; i += 1) { - names[i] = fields[i].getName(); - } - return names; - } - - /** - * Get the string associated with a key. - * - * @param key - * A key string. - * @return A string which is the value. - * @throws JSONException - * if there is no string value for the key. - */ - public String getString(String key) throws JSONException { - Object object = this.get(key); - if (object instanceof String) { - return (String) object; - } - throw new JSONException("JSONObject[" + quote(key) + "] not a string."); - } - - /** - * Determine if the JSONObject contains a specific key. - * - * @param key - * A key string. - * @return true if the key exists in the JSONObject. - */ - public boolean has(String key) { - return this.map.containsKey(key); - } - - /** - * Increment a property of a JSONObject. If there is no such property, - * create one with a value of 1. If there is such a property, and if it is - * an Integer, Long, Double, or Float, then add one to it. - * - * @param key - * A key string. - * @return this. - * @throws JSONException - * If there is already a property with this name that is not an - * Integer, Long, Double, or Float. - */ - public JSONObject increment(String key) throws JSONException { - Object value = this.opt(key); - if (value == null) { - this.put(key, 1); - } else if (value instanceof Integer) { - this.put(key, (Integer) value + 1); - } else if (value instanceof Long) { - this.put(key, (Long) value + 1); - } else if (value instanceof Double) { - this.put(key, (Double) value + 1); - } else if (value instanceof Float) { - this.put(key, (Float) value + 1); - } else { - throw new JSONException("Unable to increment [" + quote(key) + "]."); - } - return this; - } - - /** - * Determine if the value associated with the key is null or if there is no - * value. - * - * @param key - * A key string. - * @return true if there is no value associated with the key or if the value - * is the JSONObject.NULL object. - */ - public boolean isNull(String key) { - return JSONObject.NULL.equals(this.opt(key)); - } - - /** - * Get an enumeration of the keys of the JSONObject. - * - * @return An iterator of the keys. - */ - public Iterator keys() { - return this.keySet().iterator(); - } - - /** - * Get a set of keys of the JSONObject. - * - * @return A keySet. - */ - public Set keySet() { - return this.map.keySet(); - } - - /** - * Get the number of keys stored in the JSONObject. - * - * @return The number of keys in the JSONObject. - */ - public int length() { - return this.map.size(); - } - - /** - * Produce a JSONArray containing the names of the elements of this - * JSONObject. - * - * @return A JSONArray containing the key strings, or null if the JSONObject - * is empty. - */ - public JSONArray names() { - JSONArray ja = new JSONArray(); - Iterator keys = this.keys(); - while (keys.hasNext()) { - ja.put(keys.next()); - } - return ja.length() == 0 ? null : ja; - } - - /** - * Produce a string from a Number. - * - * @param number - * A Number - * @return A String. - * @throws JSONException - * If n is a non-finite number. - */ - public static String numberToString(Number number) throws JSONException { - if (number == null) { - throw new JSONException("Null pointer"); - } - testValidity(number); - -// Shave off trailing zeros and decimal point, if possible. - - String string = number.toString(); - if (string.indexOf('.') > 0 && string.indexOf('e') < 0 - && string.indexOf('E') < 0) { - while (string.endsWith("0")) { - string = string.substring(0, string.length() - 1); - } - if (string.endsWith(".")) { - string = string.substring(0, string.length() - 1); - } - } - return string; - } - - /** - * Get an optional value associated with a key. - * - * @param key - * A key string. - * @return An object which is the value, or null if there is no value. - */ - public Object opt(String key) { - return key == null ? null : this.map.get(key); - } - - /** - * Get an optional boolean associated with a key. It returns false if there - * is no such key, or if the value is not Boolean.TRUE or the String "true". - * - * @param key - * A key string. - * @return The truth. - */ - public boolean optBoolean(String key) { - return this.optBoolean(key, false); - } - - /** - * Get an optional boolean associated with a key. It returns the - * defaultValue if there is no such key, or if it is not a Boolean or the - * String "true" or "false" (case insensitive). - * - * @param key - * A key string. - * @param defaultValue - * The default. - * @return The truth. - */ - public boolean optBoolean(String key, boolean defaultValue) { - try { - return this.getBoolean(key); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get an optional double associated with a key, or NaN if there is no such - * key or if its value is not a number. If the value is a string, an attempt - * will be made to evaluate it as a number. - * - * @param key - * A string which is the key. - * @return An object which is the value. - */ - public double optDouble(String key) { - return this.optDouble(key, Double.NaN); - } - - /** - * Get an optional double associated with a key, or the defaultValue if - * there is no such key or if its value is not a number. If the value is a - * string, an attempt will be made to evaluate it as a number. - * - * @param key - * A key string. - * @param defaultValue - * The default. - * @return An object which is the value. - */ - public double optDouble(String key, double defaultValue) { - try { - return this.getDouble(key); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get an optional int value associated with a key, or zero if there is no - * such key or if the value is not a number. If the value is a string, an - * attempt will be made to evaluate it as a number. - * - * @param key - * A key string. - * @return An object which is the value. - */ - public int optInt(String key) { - return this.optInt(key, 0); - } - - /** - * Get an optional int value associated with a key, or the default if there - * is no such key or if the value is not a number. If the value is a string, - * an attempt will be made to evaluate it as a number. - * - * @param key - * A key string. - * @param defaultValue - * The default. - * @return An object which is the value. - */ - public int optInt(String key, int defaultValue) { - try { - return this.getInt(key); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get an optional JSONArray associated with a key. It returns null if there - * is no such key, or if its value is not a JSONArray. - * - * @param key - * A key string. - * @return A JSONArray which is the value. - */ - public JSONArray optJSONArray(String key) { - Object o = this.opt(key); - return o instanceof JSONArray ? (JSONArray) o : null; - } - - /** - * Get an optional JSONObject associated with a key. It returns null if - * there is no such key, or if its value is not a JSONObject. - * - * @param key - * A key string. - * @return A JSONObject which is the value. - */ - public JSONObject optJSONObject(String key) { - Object object = this.opt(key); - return object instanceof JSONObject ? (JSONObject) object : null; - } - - /** - * Get an optional long value associated with a key, or zero if there is no - * such key or if the value is not a number. If the value is a string, an - * attempt will be made to evaluate it as a number. - * - * @param key - * A key string. - * @return An object which is the value. - */ - public long optLong(String key) { - return this.optLong(key, 0); - } - - /** - * Get an optional long value associated with a key, or the default if there - * is no such key or if the value is not a number. If the value is a string, - * an attempt will be made to evaluate it as a number. - * - * @param key - * A key string. - * @param defaultValue - * The default. - * @return An object which is the value. - */ - public long optLong(String key, long defaultValue) { - try { - return this.getLong(key); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * Get an optional string associated with a key. It returns an empty string - * if there is no such key. If the value is not a string and is not null, - * then it is converted to a string. - * - * @param key - * A key string. - * @return A string which is the value. - */ - public String optString(String key) { - return this.optString(key, ""); - } - - /** - * Get an optional string associated with a key. It returns the defaultValue - * if there is no such key. - * - * @param key - * A key string. - * @param defaultValue - * The default. - * @return A string which is the value. - */ - public String optString(String key, String defaultValue) { - Object object = this.opt(key); - return NULL.equals(object) ? defaultValue : object.toString(); - } - - private void populateMap(Object bean) { - Class klass = bean.getClass(); - -// If klass is a System class then set includeSuperClass to false. - - boolean includeSuperClass = klass.getClassLoader() != null; - - Method[] methods = includeSuperClass ? klass.getMethods() : klass - .getDeclaredMethods(); - for (int i = 0; i < methods.length; i += 1) { - try { - Method method = methods[i]; - if (Modifier.isPublic(method.getModifiers())) { - String name = method.getName(); - String key = ""; - if (name.startsWith("get")) { - if ("getClass".equals(name) - || "getDeclaringClass".equals(name)) { - key = ""; - } else { - key = name.substring(3); - } - } else if (name.startsWith("is")) { - key = name.substring(2); - } - if (key.length() > 0 - && Character.isUpperCase(key.charAt(0)) - && method.getParameterTypes().length == 0) { - if (key.length() == 1) { - key = key.toLowerCase(); - } else if (!Character.isUpperCase(key.charAt(1))) { - key = key.substring(0, 1).toLowerCase() - + key.substring(1); - } - - Object result = method.invoke(bean, (Object[]) null); - if (result != null) { - this.map.put(key, wrap(result)); - } - } - } - } catch (Exception ignore) { - } - } - } - - /** - * Put a key/boolean pair in the JSONObject. - * - * @param key - * A key string. - * @param value - * A boolean which is the value. - * @return this. - * @throws JSONException - * If the key is null. - */ - public JSONObject put(String key, boolean value) throws JSONException { - this.put(key, value ? Boolean.TRUE : Boolean.FALSE); - return this; - } - - /** - * Put a key/value pair in the JSONObject, where the value will be a - * JSONArray which is produced from a Collection. - * - * @param key - * A key string. - * @param value - * A Collection value. - * @return this. - * @throws JSONException - */ - public JSONObject put(String key, Collection value) throws JSONException { - this.put(key, new JSONArray(value)); - return this; - } - - /** - * Put a key/double pair in the JSONObject. - * - * @param key - * A key string. - * @param value - * A double which is the value. - * @return this. - * @throws JSONException - * If the key is null or if the number is invalid. - */ - public JSONObject put(String key, double value) throws JSONException { - this.put(key, new Double(value)); - return this; - } - - /** - * Put a key/int pair in the JSONObject. - * - * @param key - * A key string. - * @param value - * An int which is the value. - * @return this. - * @throws JSONException - * If the key is null. - */ - public JSONObject put(String key, int value) throws JSONException { - this.put(key, new Integer(value)); - return this; - } - - /** - * Put a key/long pair in the JSONObject. - * - * @param key - * A key string. - * @param value - * A long which is the value. - * @return this. - * @throws JSONException - * If the key is null. - */ - public JSONObject put(String key, long value) throws JSONException { - this.put(key, new Long(value)); - return this; - } - - /** - * Put a key/value pair in the JSONObject, where the value will be a - * JSONObject which is produced from a Map. - * - * @param key - * A key string. - * @param value - * A Map value. - * @return this. - * @throws JSONException - */ - public JSONObject put(String key, Map value) throws JSONException { - this.put(key, new JSONObject(value)); - return this; - } - - /** - * Put a key/value pair in the JSONObject. If the value is null, then the - * key will be removed from the JSONObject if it is present. - * - * @param key - * A key string. - * @param value - * An object which is the value. It should be of one of these - * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, - * String, or the JSONObject.NULL object. - * @return this. - * @throws JSONException - * If the value is non-finite number or if the key is null. - */ - public JSONObject put(String key, Object value) throws JSONException { - if (key == null) { - throw new NullPointerException("Null key."); - } - if (value != null) { - testValidity(value); - this.map.put(key, value); - } else { - this.remove(key); - } - return this; - } - - /** - * Put a key/value pair in the JSONObject, but only if the key and the value - * are both non-null, and only if there is not already a member with that - * name. - * - * @param key string - * @param value object - * @return this. - * @throws JSONException - * if the key is a duplicate - */ - public JSONObject putOnce(String key, Object value) throws JSONException { - if (key != null && value != null) { - if (this.opt(key) != null) { - throw new JSONException("Duplicate key \"" + key + "\""); - } - this.put(key, value); - } - return this; - } - - /** - * Put a key/value pair in the JSONObject, but only if the key and the value - * are both non-null. - * - * @param key - * A key string. - * @param value - * An object which is the value. It should be of one of these - * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, - * String, or the JSONObject.NULL object. - * @return this. - * @throws JSONException - * If the value is a non-finite number. - */ - public JSONObject putOpt(String key, Object value) throws JSONException { - if (key != null && value != null) { - this.put(key, value); - } - return this; - } - - /** - * Produce a string in double quotes with backslash sequences in all the - * right places. A backslash will be inserted within = '\u0080' && c < '\u00a0') - || (c >= '\u2000' && c < '\u2100')) { - w.write("\\u"); - hhhh = Integer.toHexString(c); - w.write("0000", 0, 4 - hhhh.length()); - w.write(hhhh); - } else { - w.write(c); - } - } - } - w.write('"'); - return w; - } - - /** - * Remove a name and its value, if present. - * - * @param key - * The name to be removed. - * @return The value that was associated with the name, or null if there was - * no value. - */ - public Object remove(String key) { - return this.map.remove(key); - } - - /** - * Determine if two JSONObjects are similar. - * They must contain the same set of names which must be associated with - * similar values. - * - * @param other The other JSONObject - * @return true if they are equal - */ - public boolean similar(Object other) { - try { - if (!(other instanceof JSONObject)) { - return false; - } - Set set = this.keySet(); - if (!set.equals(((JSONObject)other).keySet())) { - return false; - } - Iterator iterator = set.iterator(); - while (iterator.hasNext()) { - String name = iterator.next(); - Object valueThis = this.get(name); - Object valueOther = ((JSONObject)other).get(name); - if (valueThis instanceof JSONObject) { - if (!((JSONObject)valueThis).similar(valueOther)) { - return false; - } - } else if (valueThis instanceof JSONArray) { - if (!((JSONArray)valueThis).similar(valueOther)) { - return false; - } - } else if (!valueThis.equals(valueOther)) { - return false; - } - } - return true; - } catch (Throwable exception) { - return false; - } - } - - /** - * Try to convert a string into a number, boolean, or null. If the string - * can't be converted, return the string. - * - * @param string - * A String. - * @return A simple JSON value. - */ - public static Object stringToValue(String string) { - Double d; - if (string.equals("")) { - return string; - } - if (string.equalsIgnoreCase("true")) { - return Boolean.TRUE; - } - if (string.equalsIgnoreCase("false")) { - return Boolean.FALSE; - } - if (string.equalsIgnoreCase("null")) { - return JSONObject.NULL; - } - - /* - * If it might be a number, try converting it. If a number cannot be - * produced, then the value will just be a string. - */ - - char b = string.charAt(0); - if ((b >= '0' && b <= '9') || b == '-') { - try { - if (string.indexOf('.') > -1 || string.indexOf('e') > -1 - || string.indexOf('E') > -1) { - d = Double.valueOf(string); - if (!d.isInfinite() && !d.isNaN()) { - return d; - } - } else { - Long myLong = new Long(string); - if (string.equals(myLong.toString())) { - if (myLong == myLong.intValue()) { - return myLong.intValue(); - } else { - return myLong; - } - } - } - } catch (Exception ignore) { - } - } - return string; - } - - /** - * Throw an exception if the object is a NaN or infinite number. - * - * @param o - * The object to test. - * @throws JSONException - * If o is a non-finite number. - */ - public static void testValidity(Object o) throws JSONException { - if (o != null) { - if (o instanceof Double) { - if (((Double) o).isInfinite() || ((Double) o).isNaN()) { - throw new JSONException( - "JSON does not allow non-finite numbers."); - } - } else if (o instanceof Float) { - if (((Float) o).isInfinite() || ((Float) o).isNaN()) { - throw new JSONException( - "JSON does not allow non-finite numbers."); - } - } - } - } - - /** - * Produce a JSONArray containing the values of the members of this - * JSONObject. - * - * @param names - * A JSONArray containing a list of key strings. This determines - * the sequence of the values in the result. - * @return A JSONArray of values. - * @throws JSONException - * If any of the values are non-finite numbers. - */ - public JSONArray toJSONArray(JSONArray names) throws JSONException { - if (names == null || names.length() == 0) { - return null; - } - JSONArray ja = new JSONArray(); - for (int i = 0; i < names.length(); i += 1) { - ja.put(this.opt(names.getString(i))); - } - return ja; - } - - /** - * Make a JSON text of this JSONObject. For compactness, no whitespace is - * added. If this would not result in a syntactically correct JSON text, - * then null will be returned instead. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return a printable, displayable, portable, transmittable representation - * of the object, beginning with { (left - * brace) and ending with } (right - * brace). - */ - public String toString() { - try { - return this.toString(0); - } catch (Exception e) { - return null; - } - } - - /** - * Make a prettyprinted JSON text of this JSONObject. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @param indentFactor - * The number of spaces to add to each level of indentation. - * @return a printable, displayable, portable, transmittable representation - * of the object, beginning with { (left - * brace) and ending with } (right - * brace). - * @throws JSONException - * If the object contains an invalid number. - */ - public String toString(int indentFactor) throws JSONException { - StringWriter w = new StringWriter(); - synchronized (w.getBuffer()) { - return this.write(w, indentFactor, 0).toString(); - } - } - - /** - * Make a JSON text of an Object value. If the object has an - * value.toJSONString() method, then that method will be used to produce the - * JSON text. The method is required to produce a strictly conforming text. - * If the object does not contain a toJSONString method (which is the most - * common case), then a text will be produced by other means. If the value - * is an array or Collection, then a JSONArray will be made from it and its - * toJSONString method will be called. If the value is a MAP, then a - * JSONObject will be made from it and its toJSONString method will be - * called. Otherwise, the value's toString method will be called, and the - * result will be quoted. - * - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @param value - * The value to be serialized. - * @return a printable, displayable, transmittable representation of the - * object, beginning with { (left - * brace) and ending with } (right - * brace). - * @throws JSONException - * If the value is or contains an invalid number. - */ - public static String valueToString(Object value) throws JSONException { - if (value == null || value.equals(null)) { - return "null"; - } - if (value instanceof JSONString) { - Object object; - try { - object = ((JSONString) value).toJSONString(); - } catch (Exception e) { - throw new JSONException(e); - } - if (object instanceof String) { - return (String) object; - } - throw new JSONException("Bad value from toJSONString: " + object); - } - if (value instanceof Number) { - return numberToString((Number) value); - } - if (value instanceof Boolean || value instanceof JSONObject - || value instanceof JSONArray) { - return value.toString(); - } - if (value instanceof Map) { - @SuppressWarnings("unchecked") - Map map = (Map) value; - return new JSONObject(map).toString(); - } - if (value instanceof Collection) { - @SuppressWarnings("unchecked") - Collection coll = (Collection) value; - return new JSONArray(coll).toString(); - } - if (value.getClass().isArray()) { - return new JSONArray(value).toString(); - } - return quote(value.toString()); - } - - /** - * Wrap an object, if necessary. If the object is null, return the NULL - * object. If it is an array or collection, wrap it in a JSONArray. If it is - * a map, wrap it in a JSONObject. If it is a standard property (Double, - * String, et al) then it is already wrapped. Otherwise, if it comes from - * one of the java packages, turn it into a string. And if it doesn't, try - * to wrap it in a JSONObject. If the wrapping fails, then null is returned. - * - * @param object - * The object to wrap - * @return The wrapped value - */ - public static Object wrap(Object object) { - try { - if (object == null) { - return NULL; - } - if (object instanceof JSONObject || object instanceof JSONArray - || NULL.equals(object) || object instanceof JSONString - || object instanceof Byte || object instanceof Character - || object instanceof Short || object instanceof Integer - || object instanceof Long || object instanceof Boolean - || object instanceof Float || object instanceof Double - || object instanceof String) { - return object; - } - - if (object instanceof Collection) { - @SuppressWarnings("unchecked") - Collection coll = (Collection) object; - return new JSONArray(coll); - } - if (object.getClass().isArray()) { - return new JSONArray(object); - } - if (object instanceof Map) { - @SuppressWarnings("unchecked") - Map map = (Map) object; - return new JSONObject(map); - } - Package objectPackage = object.getClass().getPackage(); - String objectPackageName = objectPackage != null ? objectPackage - .getName() : ""; - if (objectPackageName.startsWith("java.") - || objectPackageName.startsWith("javax.") - || object.getClass().getClassLoader() == null) { - return object.toString(); - } - return new JSONObject(object); - } catch (Exception exception) { - return null; - } - } - - /** - * Write the contents of the JSONObject as JSON text to a writer. For - * compactness, no whitespace is added. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return The writer. - * @throws JSONException - */ - public Writer write(Writer writer) throws JSONException { - return this.write(writer, 0, 0); - } - - static final Writer writeValue(Writer writer, Object value, - int indentFactor, int indent) throws JSONException, IOException { - if (value == null || value.equals(null)) { - writer.write("null"); - } else if (value instanceof JSONObject) { - ((JSONObject) value).write(writer, indentFactor, indent); - } else if (value instanceof JSONArray) { - ((JSONArray) value).write(writer, indentFactor, indent); - } else if (value instanceof Map) { - @SuppressWarnings("unchecked") - Map map = (Map) value; - new JSONObject(map).write(writer, indentFactor, indent); - } else if (value instanceof Collection) { - @SuppressWarnings("unchecked") - Collection coll = (Collection) value; - new JSONArray(coll).write(writer, indentFactor, - indent); - } else if (value.getClass().isArray()) { - new JSONArray(value).write(writer, indentFactor, indent); - } else if (value instanceof Number) { - writer.write(numberToString((Number) value)); - } else if (value instanceof Boolean) { - writer.write(value.toString()); - } else if (value instanceof JSONString) { - Object o; - try { - o = ((JSONString) value).toJSONString(); - } catch (Exception e) { - throw new JSONException(e); - } - writer.write(o != null ? o.toString() : quote(value.toString())); - } else { - quote(value.toString(), writer); - } - return writer; - } - - static final void indent(Writer writer, int indent) throws IOException { - for (int i = 0; i < indent; i += 1) { - writer.write(' '); - } - } - - /** - * Write the contents of the JSONObject as JSON text to a writer. For - * compactness, no whitespace is added. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return The writer. - * @throws JSONException - */ - Writer write(Writer writer, int indentFactor, int indent) - throws JSONException { - try { - boolean commanate = false; - final int length = this.length(); - Iterator keys = this.keys(); - writer.write('{'); - - if (length == 1) { - Object key = keys.next(); - writer.write(quote(key.toString())); - writer.write(':'); - if (indentFactor > 0) { - writer.write(' '); - } - writeValue(writer, this.map.get(key), indentFactor, indent); - } else if (length != 0) { - final int newindent = indent + indentFactor; - while (keys.hasNext()) { - Object key = keys.next(); - if (commanate) { - writer.write(','); - } - if (indentFactor > 0) { - writer.write('\n'); - } - indent(writer, newindent); - writer.write(quote(key.toString())); - writer.write(':'); - if (indentFactor > 0) { - writer.write(' '); - } - writeValue(writer, this.map.get(key), indentFactor, newindent); - commanate = true; - } - if (indentFactor > 0) { - writer.write('\n'); - } - indent(writer, indent); - } - writer.write('}'); - return writer; - } catch (IOException exception) { - throw new JSONException(exception); - } - } -} diff --git a/src/main/java/com/qcloud/Utilities/Json/JSONString.java b/src/main/java/com/qcloud/Utilities/Json/JSONString.java deleted file mode 100755 index ea03b4c..0000000 --- a/src/main/java/com/qcloud/Utilities/Json/JSONString.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.qcloud.Utilities.Json; -/** - * The JSONString interface allows a toJSONString() - * method so that a class can change the behavior of - * JSONObject.toString(), JSONArray.toString(), - * and JSONWriter.value(Object). The - * toJSONString method will be used instead of the default behavior - * of using the Object's toString() method and quoting the result. - */ -public interface JSONString { - /** - * The toJSONString method allows a class to produce its own JSON - * serialization. - * - * @return A strictly syntactically correct JSON text. - */ - public String toJSONString(); -} diff --git a/src/main/java/com/qcloud/Utilities/Json/JSONStringer.java b/src/main/java/com/qcloud/Utilities/Json/JSONStringer.java deleted file mode 100755 index 9e114dc..0000000 --- a/src/main/java/com/qcloud/Utilities/Json/JSONStringer.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.qcloud.Utilities.Json; - -/* -Copyright (c) 2006 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -import java.io.StringWriter; - -/** - * JSONStringer provides a quick and convenient way of producing JSON text. - * The texts produced strictly conform to JSON syntax rules. No whitespace is - * added, so the results are ready for transmission or storage. Each instance of - * JSONStringer can produce one JSON text. - *

- * A JSONStringer instance provides a value method for appending - * values to the - * text, and a key - * method for adding keys before values in objects. There are array - * and endArray methods that make and bound array values, and - * object and endObject methods which make and bound - * object values. All of these methods return the JSONWriter instance, - * permitting cascade style. For example,

- * myString = new JSONStringer()
- *     .object()
- *         .key("JSON")
- *         .value("Hello, World!")
- *     .endObject()
- *     .toString();
which produces the string
- * {"JSON":"Hello, World!"}
- *

- * The first method called must be array or object. - * There are no methods for adding commas or colons. JSONStringer adds them for - * you. Objects and arrays can be nested up to 20 levels deep. - *

- * This can sometimes be easier than using a JSONObject to build a string. - * @author JSON.org - * @version 2008-09-18 - */ -public class JSONStringer extends JSONWriter { - /** - * Make a fresh JSONStringer. It can be used to build one JSON text. - */ - public JSONStringer() { - super(new StringWriter()); - } - - /** - * Return the JSON text. This method is used to obtain the product of the - * JSONStringer instance. It will return null if there was a - * problem in the construction of the JSON text (such as the calls to - * array were not properly balanced with calls to - * endArray). - * @return The JSON text. - */ - public String toString() { - return this.mode == 'd' ? this.writer.toString() : null; - } -} diff --git a/src/main/java/com/qcloud/Utilities/Json/JSONTokener.java b/src/main/java/com/qcloud/Utilities/Json/JSONTokener.java deleted file mode 100755 index d692e0b..0000000 --- a/src/main/java/com/qcloud/Utilities/Json/JSONTokener.java +++ /dev/null @@ -1,446 +0,0 @@ -package com.qcloud.Utilities.Json; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringReader; - -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -/** - * A JSONTokener takes a source string and extracts characters and tokens from - * it. It is used by the JSONObject and JSONArray constructors to parse - * JSON source strings. - * @author JSON.org - * @version 2014-05-03 - */ -public class JSONTokener { - - private long character; - private boolean eof; - private long index; - private long line; - private char previous; - private Reader reader; - private boolean usePrevious; - - - /** - * Construct a JSONTokener from a Reader. - * - * @param reader A reader. - */ - public JSONTokener(Reader reader) { - this.reader = reader.markSupported() - ? reader - : new BufferedReader(reader); - this.eof = false; - this.usePrevious = false; - this.previous = 0; - this.index = 0; - this.character = 1; - this.line = 1; - } - - - /** - * Construct a JSONTokener from an InputStream. - * @param inputStream The source. - */ - public JSONTokener(InputStream inputStream) throws JSONException { - this(new InputStreamReader(inputStream)); - } - - - /** - * Construct a JSONTokener from a string. - * - * @param s A source string. - */ - public JSONTokener(String s) { - this(new StringReader(s)); - } - - - /** - * Back up one character. This provides a sort of lookahead capability, - * so that you can test for a digit or letter before attempting to parse - * the next number or identifier. - */ - public void back() throws JSONException { - if (this.usePrevious || this.index <= 0) { - throw new JSONException("Stepping back two steps is not supported"); - } - this.index -= 1; - this.character -= 1; - this.usePrevious = true; - this.eof = false; - } - - - /** - * Get the hex value of a character (base16). - * @param c A character between '0' and '9' or between 'A' and 'F' or - * between 'a' and 'f'. - * @return An int between 0 and 15, or -1 if c was not a hex digit. - */ - public static int dehexchar(char c) { - if (c >= '0' && c <= '9') { - return c - '0'; - } - if (c >= 'A' && c <= 'F') { - return c - ('A' - 10); - } - if (c >= 'a' && c <= 'f') { - return c - ('a' - 10); - } - return -1; - } - - public boolean end() { - return this.eof && !this.usePrevious; - } - - - /** - * Determine if the source string still contains characters that next() - * can consume. - * @return true if not yet at the end of the source. - */ - public boolean more() throws JSONException { - this.next(); - if (this.end()) { - return false; - } - this.back(); - return true; - } - - - /** - * Get the next character in the source string. - * - * @return The next character, or 0 if past the end of the source string. - */ - public char next() throws JSONException { - int c; - if (this.usePrevious) { - this.usePrevious = false; - c = this.previous; - } else { - try { - c = this.reader.read(); - } catch (IOException exception) { - throw new JSONException(exception); - } - - if (c <= 0) { // End of stream - this.eof = true; - c = 0; - } - } - this.index += 1; - if (this.previous == '\r') { - this.line += 1; - this.character = c == '\n' ? 0 : 1; - } else if (c == '\n') { - this.line += 1; - this.character = 0; - } else { - this.character += 1; - } - this.previous = (char) c; - return this.previous; - } - - - /** - * Consume the next character, and check that it matches a specified - * character. - * @param c The character to match. - * @return The character. - * @throws JSONException if the character does not match. - */ - public char next(char c) throws JSONException { - char n = this.next(); - if (n != c) { - throw this.syntaxError("Expected '" + c + "' and instead saw '" + - n + "'"); - } - return n; - } - - - /** - * Get the next n characters. - * - * @param n The number of characters to take. - * @return A string of n characters. - * @throws JSONException - * Substring bounds error if there are not - * n characters remaining in the source string. - */ - public String next(int n) throws JSONException { - if (n == 0) { - return ""; - } - - char[] chars = new char[n]; - int pos = 0; - - while (pos < n) { - chars[pos] = this.next(); - if (this.end()) { - throw this.syntaxError("Substring bounds error"); - } - pos += 1; - } - return new String(chars); - } - - - /** - * Get the next char in the string, skipping whitespace. - * @throws JSONException - * @return A character, or 0 if there are no more characters. - */ - public char nextClean() throws JSONException { - for (;;) { - char c = this.next(); - if (c == 0 || c > ' ') { - return c; - } - } - } - - - /** - * Return the characters up to the next close quote character. - * Backslash processing is done. The formal JSON format does not - * allow strings in single quotes, but an implementation is allowed to - * accept them. - * @param quote The quoting character, either - * " (double quote) or - * ' (single quote). - * @return A String. - * @throws JSONException Unterminated string. - */ - public String nextString(char quote) throws JSONException { - char c; - StringBuilder sb = new StringBuilder(); - for (;;) { - c = this.next(); - switch (c) { - case 0: - case '\n': - case '\r': - throw this.syntaxError("Unterminated string"); - case '\\': - c = this.next(); - switch (c) { - case 'b': - sb.append('\b'); - break; - case 't': - sb.append('\t'); - break; - case 'n': - sb.append('\n'); - break; - case 'f': - sb.append('\f'); - break; - case 'r': - sb.append('\r'); - break; - case 'u': - sb.append((char)Integer.parseInt(this.next(4), 16)); - break; - case '"': - case '\'': - case '\\': - case '/': - sb.append(c); - break; - default: - throw this.syntaxError("Illegal escape."); - } - break; - default: - if (c == quote) { - return sb.toString(); - } - sb.append(c); - } - } - } - - - /** - * Get the text up but not including the specified character or the - * end of line, whichever comes first. - * @param delimiter A delimiter character. - * @return A string. - */ - public String nextTo(char delimiter) throws JSONException { - StringBuilder sb = new StringBuilder(); - for (;;) { - char c = this.next(); - if (c == delimiter || c == 0 || c == '\n' || c == '\r') { - if (c != 0) { - this.back(); - } - return sb.toString().trim(); - } - sb.append(c); - } - } - - - /** - * Get the text up but not including one of the specified delimiter - * characters or the end of line, whichever comes first. - * @param delimiters A set of delimiter characters. - * @return A string, trimmed. - */ - public String nextTo(String delimiters) throws JSONException { - char c; - StringBuilder sb = new StringBuilder(); - for (;;) { - c = this.next(); - if (delimiters.indexOf(c) >= 0 || c == 0 || - c == '\n' || c == '\r') { - if (c != 0) { - this.back(); - } - return sb.toString().trim(); - } - sb.append(c); - } - } - - - /** - * Get the next value. The value can be a Boolean, Double, Integer, - * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object. - * @throws JSONException If syntax error. - * - * @return An object. - */ - public Object nextValue() throws JSONException { - char c = this.nextClean(); - String string; - - switch (c) { - case '"': - case '\'': - return this.nextString(c); - case '{': - this.back(); - return new JSONObject(this); - case '[': - this.back(); - return new JSONArray(this); - } - - /* - * Handle unquoted text. This could be the values true, false, or - * null, or it can be a number. An implementation (such as this one) - * is allowed to also accept non-standard forms. - * - * Accumulate characters until we reach the end of the text or a - * formatting character. - */ - - StringBuilder sb = new StringBuilder(); - while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) { - sb.append(c); - c = this.next(); - } - this.back(); - - string = sb.toString().trim(); - if ("".equals(string)) { - throw this.syntaxError("Missing value"); - } - return JSONObject.stringToValue(string); - } - - - /** - * Skip characters until the next character is the requested character. - * If the requested character is not found, no characters are skipped. - * @param to A character to skip to. - * @return The requested character, or zero if the requested character - * is not found. - */ - public char skipTo(char to) throws JSONException { - char c; - try { - long startIndex = this.index; - long startCharacter = this.character; - long startLine = this.line; - this.reader.mark(1000000); - do { - c = this.next(); - if (c == 0) { - this.reader.reset(); - this.index = startIndex; - this.character = startCharacter; - this.line = startLine; - return c; - } - } while (c != to); - } catch (IOException exception) { - throw new JSONException(exception); - } - this.back(); - return c; - } - - - /** - * Make a JSONException to signal a syntax error. - * - * @param message The error message. - * @return A JSONException object, suitable for throwing - */ - public JSONException syntaxError(String message) { - return new JSONException(message + this.toString()); - } - - - /** - * Make a printable string of this JSONTokener. - * - * @return " at {index} [character {character} line {line}]" - */ - public String toString() { - return " at " + this.index + " [character " + this.character + " line " + - this.line + "]"; - } -} diff --git a/src/main/java/com/qcloud/Utilities/Json/JSONWriter.java b/src/main/java/com/qcloud/Utilities/Json/JSONWriter.java deleted file mode 100755 index 3be9677..0000000 --- a/src/main/java/com/qcloud/Utilities/Json/JSONWriter.java +++ /dev/null @@ -1,327 +0,0 @@ -package com.qcloud.Utilities.Json; - -import java.io.IOException; -import java.io.Writer; - -/* -Copyright (c) 2006 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -/** - * JSONWriter provides a quick and convenient way of producing JSON text. - * The texts produced strictly conform to JSON syntax rules. No whitespace is - * added, so the results are ready for transmission or storage. Each instance of - * JSONWriter can produce one JSON text. - *

- * A JSONWriter instance provides a value method for appending - * values to the - * text, and a key - * method for adding keys before values in objects. There are array - * and endArray methods that make and bound array values, and - * object and endObject methods which make and bound - * object values. All of these methods return the JSONWriter instance, - * permitting a cascade style. For example,

- * new JSONWriter(myWriter)
- *     .object()
- *         .key("JSON")
- *         .value("Hello, World!")
- *     .endObject();
which writes
- * {"JSON":"Hello, World!"}
- *

- * The first method called must be array or object. - * There are no methods for adding commas or colons. JSONWriter adds them for - * you. Objects and arrays can be nested up to 20 levels deep. - *

- * This can sometimes be easier than using a JSONObject to build a string. - * @author JSON.org - * @version 2011-11-24 - */ -public class JSONWriter { - private static final int maxdepth = 200; - - /** - * The comma flag determines if a comma should be output before the next - * value. - */ - private boolean comma; - - /** - * The current mode. Values: - * 'a' (array), - * 'd' (done), - * 'i' (initial), - * 'k' (key), - * 'o' (object). - */ - protected char mode; - - /** - * The object/array stack. - */ - private final JSONObject stack[]; - - /** - * The stack top index. A value of 0 indicates that the stack is empty. - */ - private int top; - - /** - * The writer that will receive the output. - */ - protected Writer writer; - - /** - * Make a fresh JSONWriter. It can be used to build one JSON text. - */ - public JSONWriter(Writer w) { - this.comma = false; - this.mode = 'i'; - this.stack = new JSONObject[maxdepth]; - this.top = 0; - this.writer = w; - } - - /** - * Append a value. - * @param string A string value. - * @return this - * @throws JSONException If the value is out of sequence. - */ - private JSONWriter append(String string) throws JSONException { - if (string == null) { - throw new JSONException("Null pointer"); - } - if (this.mode == 'o' || this.mode == 'a') { - try { - if (this.comma && this.mode == 'a') { - this.writer.write(','); - } - this.writer.write(string); - } catch (IOException e) { - throw new JSONException(e); - } - if (this.mode == 'o') { - this.mode = 'k'; - } - this.comma = true; - return this; - } - throw new JSONException("Value out of sequence."); - } - - /** - * Begin appending a new array. All values until the balancing - * endArray will be appended to this array. The - * endArray method must be called to mark the array's end. - * @return this - * @throws JSONException If the nesting is too deep, or if the object is - * started in the wrong place (for example as a key or after the end of the - * outermost array or object). - */ - public JSONWriter array() throws JSONException { - if (this.mode == 'i' || this.mode == 'o' || this.mode == 'a') { - this.push(null); - this.append("["); - this.comma = false; - return this; - } - throw new JSONException("Misplaced array."); - } - - /** - * End something. - * @param mode Mode - * @param c Closing character - * @return this - * @throws JSONException If unbalanced. - */ - private JSONWriter end(char mode, char c) throws JSONException { - if (this.mode != mode) { - throw new JSONException(mode == 'a' - ? "Misplaced endArray." - : "Misplaced endObject."); - } - this.pop(mode); - try { - this.writer.write(c); - } catch (IOException e) { - throw new JSONException(e); - } - this.comma = true; - return this; - } - - /** - * End an array. This method most be called to balance calls to - * array. - * @return this - * @throws JSONException If incorrectly nested. - */ - public JSONWriter endArray() throws JSONException { - return this.end('a', ']'); - } - - /** - * End an object. This method most be called to balance calls to - * object. - * @return this - * @throws JSONException If incorrectly nested. - */ - public JSONWriter endObject() throws JSONException { - return this.end('k', '}'); - } - - /** - * Append a key. The key will be associated with the next value. In an - * object, every value must be preceded by a key. - * @param string A key string. - * @return this - * @throws JSONException If the key is out of place. For example, keys - * do not belong in arrays or if the key is null. - */ - public JSONWriter key(String string) throws JSONException { - if (string == null) { - throw new JSONException("Null key."); - } - if (this.mode == 'k') { - try { - this.stack[this.top - 1].putOnce(string, Boolean.TRUE); - if (this.comma) { - this.writer.write(','); - } - this.writer.write(JSONObject.quote(string)); - this.writer.write(':'); - this.comma = false; - this.mode = 'o'; - return this; - } catch (IOException e) { - throw new JSONException(e); - } - } - throw new JSONException("Misplaced key."); - } - - - /** - * Begin appending a new object. All keys and values until the balancing - * endObject will be appended to this object. The - * endObject method must be called to mark the object's end. - * @return this - * @throws JSONException If the nesting is too deep, or if the object is - * started in the wrong place (for example as a key or after the end of the - * outermost array or object). - */ - public JSONWriter object() throws JSONException { - if (this.mode == 'i') { - this.mode = 'o'; - } - if (this.mode == 'o' || this.mode == 'a') { - this.append("{"); - this.push(new JSONObject()); - this.comma = false; - return this; - } - throw new JSONException("Misplaced object."); - - } - - - /** - * Pop an array or object scope. - * @param c The scope to close. - * @throws JSONException If nesting is wrong. - */ - private void pop(char c) throws JSONException { - if (this.top <= 0) { - throw new JSONException("Nesting error."); - } - char m = this.stack[this.top - 1] == null ? 'a' : 'k'; - if (m != c) { - throw new JSONException("Nesting error."); - } - this.top -= 1; - this.mode = this.top == 0 - ? 'd' - : this.stack[this.top - 1] == null - ? 'a' - : 'k'; - } - - /** - * Push an array or object scope. - * @param jo The scope to open. - * @throws JSONException If nesting is too deep. - */ - private void push(JSONObject jo) throws JSONException { - if (this.top >= maxdepth) { - throw new JSONException("Nesting too deep."); - } - this.stack[this.top] = jo; - this.mode = jo == null ? 'a' : 'k'; - this.top += 1; - } - - - /** - * Append either the value true or the value - * false. - * @param b A boolean. - * @return this - * @throws JSONException - */ - public JSONWriter value(boolean b) throws JSONException { - return this.append(b ? "true" : "false"); - } - - /** - * Append a double value. - * @param d A double. - * @return this - * @throws JSONException If the number is not finite. - */ - public JSONWriter value(double d) throws JSONException { - return this.value(new Double(d)); - } - - /** - * Append a long value. - * @param l A long. - * @return this - * @throws JSONException - */ - public JSONWriter value(long l) throws JSONException { - return this.append(Long.toString(l)); - } - - - /** - * Append an object value. - * @param object The object to append. It can be null, or a Boolean, Number, - * String, JSONObject, or JSONArray, or an object that implements JSONString. - * @return this - * @throws JSONException If the value is out of sequence. - */ - public JSONWriter value(Object object) throws JSONException { - return this.append(JSONObject.valueToString(object)); - } -} diff --git a/src/main/java/com/qcloud/Utilities/MD5.java b/src/main/java/com/qcloud/Utilities/MD5.java deleted file mode 100755 index c7bfab7..0000000 --- a/src/main/java/com/qcloud/Utilities/MD5.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.qcloud.Utilities; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.security.MessageDigest; - -public class MD5 { - - public static String stringToMD5(String str) { - - try { - byte[] strTemp = str.getBytes(); - MessageDigest mdTemp = MessageDigest.getInstance("MD5"); - mdTemp.update(strTemp); - return toHexString(mdTemp.digest()); - } catch (Exception e) { - return null; - } - } - - public static String fileNameToMD5(String fileName) { - InputStream inputStream = null; - try { - inputStream = new FileInputStream(fileName); - return streamToMD5(inputStream); - } catch (Exception e) { - return null; - } finally { - if (inputStream != null) { - try { - inputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - } - - public static String streamToMD5(InputStream inputStream) { - try { - MessageDigest mdTemp = MessageDigest.getInstance("MD5"); - byte[] buffer = new byte[1024]; - int numRead = 0; - while ((numRead = inputStream.read(buffer)) > 0) { - mdTemp.update(buffer, 0, numRead); - } - return toHexString(mdTemp.digest()); - } catch (Exception e) { - return null; - } - } - - private static String toHexString(byte[] md) { - char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f' }; - int j = md.length; - char str[] = new char[j * 2]; - for (int i = 0; i < j; i++) { - byte byte0 = md[i]; - str[2 * i] = hexDigits[byte0 >>> 4 & 0xf]; - str[i * 2 + 1] = hexDigits[byte0 & 0xf]; - } - return new String(str); - } -} diff --git a/src/main/java/com/qcloud/Utilities/SHA1.java b/src/main/java/com/qcloud/Utilities/SHA1.java deleted file mode 100755 index af3d5a3..0000000 --- a/src/main/java/com/qcloud/Utilities/SHA1.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.qcloud.Utilities; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.security.MessageDigest; - -public class SHA1 { - - public static String stringToSHA(String str) { - - try { - byte[] strTemp = str.getBytes(); - MessageDigest mdTemp = MessageDigest.getInstance("SHA-1"); //SHA-256 - mdTemp.update(strTemp); - return toHexString(mdTemp.digest()); - } catch (Exception e) { - return null; - } - } - - public static String fileNameToSHA(String fileName) { - InputStream inputStream = null; - try { - inputStream = new FileInputStream(fileName); - return streamToSHA(inputStream); - } catch (Exception e) { - return null; - } finally { - if (inputStream != null) { - try { - inputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - } - - public static String streamToSHA(InputStream inputStream) { - try { - MessageDigest mdTemp = MessageDigest.getInstance("SHA-1"); //SHA-256 - byte[] buffer = new byte[1024]; - int numRead = 0; - while ((numRead = inputStream.read(buffer)) > 0) { - mdTemp.update(buffer, 0, numRead); - } - return toHexString(mdTemp.digest()); - } catch (Exception e) { - return null; - } - } - - private static String toHexString(byte[] md) { - char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f' }; - int j = md.length; - char str[] = new char[j * 2]; - for (int i = 0; i < j; i++) { - byte byte0 = md[i]; - str[2 * i] = hexDigits[byte0 >>> 4 & 0xf]; - str[i * 2 + 1] = hexDigits[byte0 & 0xf]; - } - return new String(str); - } - - public static void main(String[]args) { - System.out.println("start..."); - System.out.println(SHA1.fileNameToSHA("d:\\test.rmvb")); - System.out.println("end..."); - } -} diff --git a/src/main/java/indi/yoyicue/machinetranslators/TencentTranslate.java b/src/main/java/indi/yoyicue/machinetranslators/TencentTranslate.java index 6693407..db2ddfc 100644 --- a/src/main/java/indi/yoyicue/machinetranslators/TencentTranslate.java +++ b/src/main/java/indi/yoyicue/machinetranslators/TencentTranslate.java @@ -3,10 +3,14 @@ import java.awt.Window; import java.util.TreeMap; -import com.qcloud.QcloudApiModuleCenter; -import com.qcloud.Module.Tmt; -import com.qcloud.Utilities.Json.JSONObject; - +import com.google.gson.Gson; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.common.profile.ClientProfile; +import com.tencentcloudapi.common.profile.HttpProfile; +import com.tencentcloudapi.tmt.v20180321.TmtClient; +import com.tencentcloudapi.tmt.v20180321.models.TextTranslateRequest; +import com.tencentcloudapi.tmt.v20180321.models.TextTranslateResponse; import org.omegat.core.Core; import org.omegat.core.machinetranslators.BaseTranslate; import org.omegat.gui.exttrans.MTConfigDialog; @@ -45,33 +49,33 @@ protected String translate(Language sLang, Language tLang, String text) throws E String SecretId = getCredential(PROPERTY_API_SECRET_ID); String SecretKey = getCredential(PROPERTY_API_SECRET_KEY); - TreeMap config = new TreeMap(); - config.put("SecretId", SecretId); - config.put("SecretKey", SecretKey); - config.put("RequestMethod", "GET"); - config.put("DefaultRegion", "bj"); + Credential cred = new Credential(SecretId, SecretKey); + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setEndpoint("tmt.tencentcloudapi.com"); + + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); - QcloudApiModuleCenter module = new QcloudApiModuleCenter(new Tmt(), config); + TmtClient client = new TmtClient(cred, "ap-guangzhou", clientProfile); String sourcelang = tmtLang(sLang); String targetlang = tmtLang(tLang); TreeMap params = new TreeMap(); - params.put("sourceText", text); - params.put("source", sourcelang); - params.put("target", targetlang); + params.put("SourceText", text); + params.put("Source", sourcelang); + params.put("Target", targetlang); + params.put("ProjectId", "0"); + + Gson gson = new Gson(); + TextTranslateRequest req = TextTranslateRequest.fromJsonString(gson.toJson(params), TextTranslateRequest.class); String translation; - try { - String result = module.call("TextTranslate", params); - JSONObject json_result = new JSONObject(result); - if (json_result.getInt("code") == 0) { - translation = json_result.getString("targetText"); - } else { - translation = "Message:"+ json_result.getString("message"); - } - } catch (NullPointerException e) { - return null; + try{ + TextTranslateResponse resp = client.TextTranslate(req); + translation = resp.getTargetText(); + } catch (TencentCloudSDKException e) { + translation = e.toString(); } return translation; }