目录
效果
pom依赖
log4j.properties
LoggerUtil
CCPRestSDK.class
测试
console颜色
效果
废话不多说,直接放代码
pom依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.16.0</version>
</dependency>
log4j.properties
在resource文件夹下建立文件
代码
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger.com.codefutures=DEBUG
log4j.appender.R.File=log4j.log是生成的文件名,生成的log文件可在项目文件夹中查看
LoggerUtil
共通工具类(看个人,愿意建就建,不愿意建就自己每个类里单独写)
package com.cei.xyd_cz.util;
import java.util.Date;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LoggerUtil {
private static boolean isLog = true;
private static Logger logger;
static {
if (logger == null) {
logger = Logger.getLogger(CCPRestSDK.class);
}
}
public static void setLogger(boolean isLog) {
LoggerUtil.isLog = isLog;
}
public static void setLog(Logger logger) {
LoggerUtil.logger = logger;
}
public static void setLogLevel(int level) {
if (logger == null) {
logger = Logger.getLogger(CCPRestSDK.class);
}
PropertyConfigurator.configure(PropertiesUtil.getPropertie(level));
}
public static void debug(Object msg) {
if (isLog)
logger.debug(new Date() + " " + msg);
}
public static void info(Object msg) {
if (isLog)
logger.info(new Date() + " " + msg);
}
public static void warn(Object msg) {
if (isLog)
logger.warn(new Date() + " " + msg);
}
public static void error(Object msg) {
if (isLog)
logger.error(new Date() + " " + msg);
}
public static void fatal(Object msg) {
if (isLog)
logger.fatal(new Date() + " " + msg);
}
}
CCPRestSDK.class
工具类里需要的getlogger(这个是我自己弄得。如果自己有可以不用我的,只是我自己干的项目都是用的自己的)
package com.cei.xyd_cz.util;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import ytx.org.apache.http.HttpEntity;
import ytx.org.apache.http.HttpResponse;
import ytx.org.apache.http.client.methods.HttpGet;
import ytx.org.apache.http.client.methods.HttpPost;
import ytx.org.apache.http.client.methods.HttpRequestBase;
import ytx.org.apache.http.entity.BasicHttpEntity;
import ytx.org.apache.http.impl.client.DefaultHttpClient;
import ytx.org.apache.http.message.AbstractHttpMessage;
import ytx.org.apache.http.util.EntityUtils;
public class CCPRestSDK {
int status;
private static final int Request_Get = 0;
private static final int Request_Post = 1;
private static final String Account_Info = "AccountInfo";
private static final String Create_SubAccount = "SubAccounts";
private static final String Get_SubAccounts = "GetSubAccounts";
private static final String Query_SubAccountByName = "QuerySubAccountByName";
private static final String SMSMessages = "SMS/Messages";
private static final String TemplateSMS = "SMS/TemplateSMS";
private static final String Query_SMSTemplate = "SMS/QuerySMSTemplate";
private static final String LandingCalls = "Calls/LandingCalls";
private static final String VoiceVerify = "Calls/VoiceVerify";
private static final String IvrDial = "ivr/dial";
private static final String BillRecords = "BillRecords";
private static final String queryCallState = "ivr/call";
private static final String callResult = "CallResult";
private static final String mediaFileUpload = "Calls/MediaFileUpload";
private String SERVER_IP;
private String SERVER_PORT;
private String ACCOUNT_SID;
private String ACCOUNT_TOKEN;
private String SUBACCOUNT_SID;
private String SUBACCOUNT_Token;
public String App_ID;
private BodyType BODY_TYPE = BodyType.Type_XML;
public String Callsid;
public enum BodyType {
Type_XML, Type_JSON;
}
public enum AccountType {
Accounts, SubAccounts;
}
/**
* 初始化服务地址和端口
*
* @param serverIP
* 必选参数 服务器地址
* @param serverPort
* 必选参数 服务器端口
*/
public void init(String serverIP, String serverPort) {
if (isEmpty(serverIP) || isEmpty(serverPort)) {
LoggerUtil.fatal("初始化异常:serverIP或serverPort为空");
throw new IllegalArgumentException(
"必选参数:" + (isEmpty(serverIP) ? " 服务器地址 " : "") + (isEmpty(serverPort) ? " 服务器端口 " : "") + "为空");
}
SERVER_IP = serverIP;
SERVER_PORT = serverPort;
}
/**
* 初始化主帐号信息
*
* @param accountSid
* 必选参数 主帐号
* @param accountToken
* 必选参数 主帐号TOKEN
*/
public void setAccount(String accountSid, String accountToken) {
if (isEmpty(accountSid) || isEmpty(accountToken)) {
LoggerUtil.fatal("初始化异常:accountSid或accountToken为空");
throw new IllegalArgumentException(
"必选参数:" + (isEmpty(accountSid) ? " 主帐号" : "") + (isEmpty(accountToken) ? " 主帐号TOKEN " : "") + "为空");
}
ACCOUNT_SID = accountSid;
ACCOUNT_TOKEN = accountToken;
}
/**
* 初始化应用Id
*
* @param appId
* 必选参数 应用Id
*/
public void setAppId(String appId) {
if (isEmpty(appId)) {
LoggerUtil.fatal("初始化异常:appId为空");
throw new IllegalArgumentException("必选参数: 应用Id 为空");
}
App_ID = appId;
}
private boolean isEmpty(String str) {
return (("".equals(str)) || (str == null));
}
/**
* 发送短信模板请求
*
* @param to
* 必选参数 短信接收端手机号码集合,用英文逗号分开,每批发送的手机号数量不得超过100个
* @param templateId
* 必选参数 模板Id
* @param datas
* 可选参数 内容数据,用于替换模板中{序号}
* @return
*/
public HashMap<String, Object> sendTemplateSMS(String to, String templateId, String[] datas) {
HashMap<String, Object> validate = accountValidate();
if (validate != null)
return validate;
if ((isEmpty(to)) || (isEmpty(App_ID)) || (isEmpty(templateId)))
throw new IllegalArgumentException(
"必选参数:" + (isEmpty(to) ? " 手机号码 " : "") + (isEmpty(templateId) ? " 模板Id " : "") + "为空");
CcopHttpClient chc = new CcopHttpClient();
DefaultHttpClient httpclient = null;
try {
httpclient = chc.registerSSL(SERVER_IP, "TLS", Integer.parseInt(SERVER_PORT), "https");
} catch (Exception e1) {
e1.printStackTrace();
throw new RuntimeException("初始化httpclient异常" + e1.getMessage());
}
String result = "";
try {
HttpPost httppost = (HttpPost) getHttpRequestBase(1, TemplateSMS);
String requsetbody = "";
if (BODY_TYPE == BodyType.Type_JSON) {
JsonObject json = new JsonObject();
json.addProperty("appId", App_ID);
json.addProperty("to", to);
json.addProperty("templateId", templateId);
if (datas != null) {
StringBuilder sb = new StringBuilder("[");
for (String s : datas) {
sb.append("\"" + s + "\"" + ",");
}
sb.replace(sb.length() - 1, sb.length(), "]");
JsonParser parser = new JsonParser();
JsonArray Jarray = parser.parse(sb.toString()).getAsJsonArray();
json.add("datas", Jarray);
}
requsetbody = json.toString();
} else {
StringBuilder sb = new StringBuilder("<?xml version='1.0' encoding='utf-8'?><TemplateSMS>");
sb.append("<appId>").append(App_ID).append("</appId>").append("<to>").append(to).append("</to>")
.append("<templateId>").append(templateId).append("</templateId>");
if (datas != null) {
sb.append("<datas>");
for (String s : datas) {
sb.append("<data>").append(s).append("</data>");
}
sb.append("</datas>");
}
sb.append("</TemplateSMS>").toString();
requsetbody = sb.toString();
}
// 打印包体
System.out.println("请求的包体:" + requsetbody);
LoggerUtil.info("sendTemplateSMS Request body = " + requsetbody);
BasicHttpEntity requestBody = new BasicHttpEntity();
requestBody.setContent(new ByteArrayInputStream(requsetbody.getBytes("UTF-8")));
requestBody.setContentLength(requsetbody.getBytes("UTF-8").length);
httppost.setEntity(requestBody);
HttpResponse response = httpclient.execute(httppost);
// 获取响应码
status = response.getStatusLine().getStatusCode();
System.out.println("Https请求返回状态码:" + status);
HttpEntity entity = response.getEntity();
if (entity != null)
result = EntityUtils.toString(entity, "UTF-8");
EntityUtils.consume(entity);
} catch (IOException e) {
e.printStackTrace();
LoggerUtil.error(e.getMessage());
return getMyError("172001", "网络错误" + "Https请求返回码:" + status);
} catch (Exception e) {
e.printStackTrace();
LoggerUtil.error(e.getMessage());
return getMyError("172002", "无返回");
} finally {
if (httpclient != null)
httpclient.getConnectionManager().shutdown();
}
LoggerUtil.info("sendTemplateSMS response body = " + result);
try {
if (BODY_TYPE == BodyType.Type_JSON) {
return jsonToMap(result);
} else {
return xmlToMap(result);
}
} catch (Exception e) {
return getMyError("172003", "返回包体错误");
}
}
private HashMap<String, Object> jsonToMap(String result) {
HashMap<String, Object> hashMap = new HashMap<String, Object>();
JsonParser parser = new JsonParser();
JsonObject asJsonObject = parser.parse(result).getAsJsonObject();
Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet();
HashMap<String, Object> hashMap2 = new HashMap<String, Object>();
for (Map.Entry<String, JsonElement> m : entrySet) {
if ("statusCode".equals(m.getKey()) || "statusMsg".equals(m.getKey()))
hashMap.put(m.getKey(), m.getValue().getAsString());
else {
if ("SubAccount".equals(m.getKey()) || "totalCount".equals(m.getKey())
|| "smsTemplateList".equals(m.getKey()) || "token".equals(m.getKey())
|| "callSid".equals(m.getKey()) || "state".equals(m.getKey()) || "downUrl".equals(m.getKey())) {
if (!"SubAccount".equals(m.getKey()) && !"smsTemplateList".equals(m.getKey()))
hashMap2.put(m.getKey(), m.getValue().getAsString());
else {
try {
if ((m.getValue().toString().trim().length() <= 2)
&& !m.getValue().toString().contains("[")) {
hashMap2.put(m.getKey(), m.getValue().getAsString());
hashMap.put("data", hashMap2);
break;
}
if (m.getValue().toString().contains("[]")) {
hashMap2.put(m.getKey(), new JsonArray());
hashMap.put("data", hashMap2);
continue;
}
JsonArray asJsonArray = parser.parse(m.getValue().toString()).getAsJsonArray();
ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
for (JsonElement j : asJsonArray) {
Set<Entry<String, JsonElement>> entrySet2 = j.getAsJsonObject().entrySet();
HashMap<String, Object> hashMap3 = new HashMap<String, Object>();
for (Map.Entry<String, JsonElement> m2 : entrySet2) {
hashMap3.put(m2.getKey(), m2.getValue().getAsString());
}
arrayList.add(hashMap3);
}
hashMap2.put(m.getKey(), arrayList);
} catch (Exception e) {
JsonObject asJsonObject2 = parser.parse(m.getValue().toString()).getAsJsonObject();
Set<Entry<String, JsonElement>> entrySet2 = asJsonObject2.entrySet();
HashMap<String, Object> hashMap3 = new HashMap<String, Object>();
for (Map.Entry<String, JsonElement> m2 : entrySet2) {
hashMap3.put(m2.getKey(), m2.getValue().getAsString());
}
hashMap2.put(m.getKey(), hashMap3);
hashMap.put("data", hashMap2);
}
}
hashMap.put("data", hashMap2);
} else {
JsonObject asJsonObject2 = parser.parse(m.getValue().toString()).getAsJsonObject();
Set<Entry<String, JsonElement>> entrySet2 = asJsonObject2.entrySet();
HashMap<String, Object> hashMap3 = new HashMap<String, Object>();
for (Map.Entry<String, JsonElement> m2 : entrySet2) {
hashMap3.put(m2.getKey(), m2.getValue().getAsString());
}
if (hashMap3.size() != 0) {
hashMap2.put(m.getKey(), hashMap3);
} else {
hashMap2.put(m.getKey(), m.getValue().getAsString());
}
hashMap.put("data", hashMap2);
}
}
}
return hashMap;
}
/**
* @description 将xml字符串转换成map
* @param xml
* @return Map
*/
private HashMap<String, Object> xmlToMap(String xml) {
HashMap<String, Object> map = new HashMap<String, Object>();
Document doc = null;
try {
doc = DocumentHelper.parseText(xml); // 将字符串转为XML
Element rootElt = doc.getRootElement(); // 获取根节点
HashMap<String, Object> hashMap2 = new HashMap<String, Object>();
ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
for (Iterator i = rootElt.elementIterator(); i.hasNext();) {
Element e = (Element) i.next();
if ("statusCode".equals(e.getName()) || "statusMsg".equals(e.getName()))
map.put(e.getName(), e.getText());
else {
if ("SubAccount".equals(e.getName()) || "TemplateSMS".equals(e.getName())
|| "totalCount".equals(e.getName()) || "token".equals(e.getName())
|| "callSid".equals(e.getName()) || "state".equals(e.getName())
|| "downUrl".equals(e.getName())) {
if (!"SubAccount".equals(e.getName()) && !"TemplateSMS".equals(e.getName())) {
hashMap2.put(e.getName(), e.getText());
} else if ("SubAccount".equals(e.getName())) {
HashMap<String, Object> hashMap3 = new HashMap<String, Object>();
for (Iterator i2 = e.elementIterator(); i2.hasNext();) {
Element e2 = (Element) i2.next();
hashMap3.put(e2.getName(), e2.getText());
}
arrayList.add(hashMap3);
hashMap2.put("SubAccount", arrayList);
} else if ("TemplateSMS".equals(e.getName())) {
HashMap<String, Object> hashMap3 = new HashMap<String, Object>();
for (Iterator i2 = e.elementIterator(); i2.hasNext();) {
Element e2 = (Element) i2.next();
hashMap3.put(e2.getName(), e2.getText());
}
arrayList.add(hashMap3);
hashMap2.put("TemplateSMS", arrayList);
}
map.put("data", hashMap2);
} else {
HashMap<String, Object> hashMap3 = new HashMap<String, Object>();
for (Iterator i2 = e.elementIterator(); i2.hasNext();) {
Element e2 = (Element) i2.next();
// hashMap2.put(e2.getName(),e2.getText());
hashMap3.put(e2.getName(), e2.getText());
}
if (hashMap3.size() != 0) {
hashMap2.put(e.getName(), hashMap3);
} else {
hashMap2.put(e.getName(), e.getText());
}
map.put("data", hashMap2);
}
}
}
} catch (DocumentException e) {
e.printStackTrace();
LoggerUtil.error(e.getMessage());
} catch (Exception e) {
LoggerUtil.error(e.getMessage());
e.printStackTrace();
}
return map;
}
private HashMap<String, Object> getMyError(String code, String msg) {
HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("statusCode", code);
hashMap.put("statusMsg", msg);
return hashMap;
}
private HashMap<String, Object> accountValidate() {
if ((isEmpty(SERVER_IP))) {
return getMyError("172004", "IP为空");
}
if ((isEmpty(SERVER_PORT))) {
return getMyError("172005", "端口错误");
}
if ((isEmpty(ACCOUNT_SID))) {
return getMyError("172006", "主帐号为空");
}
if ((isEmpty(ACCOUNT_TOKEN))) {
return getMyError("172007", "主帐号TOKEN为空");
}
if ((isEmpty(App_ID))) {
return getMyError("172012", "应用ID为空");
}
return null;
}
private HttpRequestBase getHttpRequestBase(int get, String action)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
return getHttpRequestBase(get, action, AccountType.Accounts);
}
public String Filename;
private HttpRequestBase getHttpRequestBase(int get, String action, AccountType mAccountType)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
String timestamp = DateUtil.dateToStr(new Date(), DateUtil.DATE_TIME_NO_SLASH);
EncryptUtil eu = new EncryptUtil();
String sig = "";
String acountName = "";
String acountType = "";
if (mAccountType == AccountType.Accounts) {
acountName = ACCOUNT_SID;
sig = ACCOUNT_SID + ACCOUNT_TOKEN + timestamp;
acountType = "Accounts";
} else {
acountName = SUBACCOUNT_SID;
sig = SUBACCOUNT_SID + SUBACCOUNT_Token + timestamp;
acountType = "SubAccounts";
}
String signature = eu.md5Digest(sig);
String url = getBaseUrl().append("/" + acountType + "/").append(acountName).append("/" + action + "?sig=")
.append(signature).toString();
if (callResult.equals(action)) {
url = url + "&callsid=" + Callsid;
}
if (queryCallState.equals(action)) {
url = url + "&callid=" + Callsid;
}
if (mediaFileUpload.equals(action)) {
url = url + "&appid=" + App_ID + "&filename=" + Filename;
}
LoggerUtil.info(getmethodName(action) + " url = " + url);
// System.out.println(getmethodName(action) + " url = " + url);
HttpRequestBase mHttpRequestBase = null;
if (get == Request_Get)
mHttpRequestBase = new HttpGet(url);
else if (get == Request_Post)
mHttpRequestBase = new HttpPost(url);
if (IvrDial.equals(action)) {
setHttpHeaderXML(mHttpRequestBase);
} else if (mediaFileUpload.equals(action)) {
setHttpHeaderMedia(mHttpRequestBase);
} else {
setHttpHeader(mHttpRequestBase);
}
String src = acountName + ":" + timestamp;
String auth = eu.base64Encoder(src);
mHttpRequestBase.setHeader("Authorization", auth);
System.out.println("请求的Url:" + mHttpRequestBase);// 打印Url
return mHttpRequestBase;
}
private StringBuffer getBaseUrl() {
StringBuffer sb = new StringBuffer("https://");
sb.append(SERVER_IP).append(":").append(SERVER_PORT);
sb.append("/2013-12-26");
return sb;
}
private String getmethodName(String action) {
if (action.equals(Account_Info)) {
return "queryAccountInfo";
} else if (action.equals(Create_SubAccount)) {
return "createSubAccount";
} else if (action.equals(Get_SubAccounts)) {
return "getSubAccounts";
} else if (action.equals(Query_SubAccountByName)) {
return "querySubAccount";
} else if (action.equals(SMSMessages)) {
return "sendSMS";
} else if (action.equals(TemplateSMS)) {
return "sendTemplateSMS";
} else if (action.equals(LandingCalls)) {
return "landingCalls";
} else if (action.equals(VoiceVerify)) {
return "voiceVerify";
} else if (action.equals(IvrDial)) {
return "ivrDial";
} else if (action.equals(BillRecords)) {
return "billRecords";
} else {
return "";
}
}
private void setHttpHeaderXML(AbstractHttpMessage httpMessage) {
httpMessage.setHeader("Accept", "application/xml");
httpMessage.setHeader("Content-Type", "application/xml;charset=utf-8");
}
private void setHttpHeaderMedia(AbstractHttpMessage httpMessage) {
if (BODY_TYPE == BodyType.Type_JSON) {
httpMessage.setHeader("Accept", "application/json");
httpMessage.setHeader("Content-Type", "application/octet-stream;charset=utf-8;");
} else {
httpMessage.setHeader("Accept", "application/xml");
httpMessage.setHeader("Content-Type", "application/octet-stream;charset=utf-8;");
}
}
private void setHttpHeader(AbstractHttpMessage httpMessage) {
if (BODY_TYPE == BodyType.Type_JSON) {
httpMessage.setHeader("Accept", "application/json");
httpMessage.setHeader("Content-Type", "application/json;charset=utf-8");
} else {
httpMessage.setHeader("Accept", "application/xml");
httpMessage.setHeader("Content-Type", "application/xml;charset=utf-8");
}
}
}
测试
随便找个接口,或者自己写个main主函数测试 (就出现1L的效果了)
console颜色
由于idea无法配置等级颜色。只能使用插件来支持
插件搜索 Grep Console,安装重启IDEA
在tool里自己配置等级的颜色