Former-commit-id: 3664788a8b243bd07f7043c162c4dd62a771cbb4
master
wangbing 4 years ago
parent e29ec42c0d
commit fe2f127ba6

@ -72,6 +72,7 @@ public class ApiCallable implements Callable {
for (Api api : apiList) {
if (api.isCheck()) {
RequestReader requestReader = new RequestReader(api.getRequestFile());
api.setRequestFather(requestReader.getFatherName());
generateRequest(requestReader);
ResponseReader responseReader = new ResponseReader(api.getResponseFile());
@ -88,15 +89,9 @@ public class ApiCallable implements Callable {
freeMarkerManager.outputTemp(file, "Java_api/pom.xml", ctx);
}
{
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("domain", String.join(".", domainList));
File file = new File(apiDomain, "ApiClient.java");
freeMarkerManager.outputTemp(file, "/Java_api/ApiClient.java", ctx);
}
{
File base = Tool.createPath(frame, "base");
File client = Tool.createPath(frame, "client");
File utils = Tool.createPath(frame, "utils");
File okhttp3 = Tool.createPath(frame, "okhttp3");
@ -106,6 +101,10 @@ public class ApiCallable implements Callable {
freeMarkerManager.outputTemp(Tool.createFile(base, name), "Java_api/frame/base/" + name, ctx);
}
for (String name : ResourceUtil.getResourceFiles("/modules/Java_api/frame/client/")) {
freeMarkerManager.outputTemp(Tool.createFile(client, name), "Java_api/frame/client/" + name, ctx);
}
for (String name : ResourceUtil.getResourceFiles("/modules/Java_api/frame/utils/")) {
if (name.equals("ValidationUtil.java")){//去掉验证 减少体积
continue;

@ -11,6 +11,8 @@ public class Api {
private String request;
//目标请求响应
private String response;
private String requestFather;
private String responseFather;
private String module;
private String target;
private String method;
@ -110,4 +112,20 @@ public class Api {
public void setError(String error) {
this.error = error;
}
public String getRequestFather() {
return requestFather;
}
public void setRequestFather(String requestFather) {
this.requestFather = requestFather;
}
public String getResponseFather() {
return responseFather;
}
public void setResponseFather(String responseFather) {
this.responseFather = responseFather;
}
}

@ -3,9 +3,9 @@ package ${domain};
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import ${domain}.frame.ApiRequest;
import ${domain}.frame.ApiResponse;
import ${domain}.frame.MapperUtil;
import ${domain}.frame.base.SortType;
import ${domain}.frame.client.ApiClient;
import ${domain}.frame.utils.MapperUtil;
<#list apiList as item>
import ${domain}.module.${module}.req.${item.request};
</#list>
@ -27,45 +27,49 @@ import java.util.Date;
*/
public class ${className} {
private ApiClient apiClient;
private ApiClient client;
@Before
public void before() {
//实例化API请求客户端
ApiClient.init("http://localhost:8080/api", "app_key", "01234567890123456789012345678901");
apiClient = ApiClient.getInstance();
ApiClient client = ApiClient.getInstance();
client = ApiClient.getInstance("http://localhost:8080/api", "app_key", "01234567890123456789012345678901");
client.setDebug(true);
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
//设置发送网络请求前的统一操作
client.setBefore(new ApiClient.Before() {
public void call(ApiRequest request) {
System.out.println("before-->request = " + MapperUtil.toJson(request));
System.out.println("before-->path = " + request.path());
}
client.setCallBefore(request -> {
System.out.println("before-->request = " + MapperUtil.toJson(request));
System.out.println("before-->path = " + request.path());
});
//设置网络请求完成后的统一操作
client.setAfter(new ApiClient.After() {
public void call(ApiRequest request, ApiResponse response) {
System.out.println("after-->response = " + MapperUtil.toJson(response));
Date end = new Date();
System.out.println("after-->time = " + simpleDateFormat.format(end));
client.setCallAfter((request, response) -> {
System.out.println("after-->response = " + MapperUtil.toJson(response));
Date end = new Date();
System.out.println("after-->time = " + simpleDateFormat.format(end));
if (response.hasError()) {
System.err.println(MapperUtil.toJson(response));
}
});
UserLoginRequest request = new UserLoginRequest();
request.setUsername("test");
request.setPassword("test123");
UserLoginResponse response = apiClient.execute(request);
apiClient.setToken(response.getToken());
UserLoginResponse response = client.execute(request);
Assert.assertTrue(!response.hasError());
client.setToken(response.getToken());
}
<#list apiList as item>
@Test
public void test${item.request}() {
${item.request} request = new ${item.request}();
${item.response} response = apiClient.execute(request);
<#if item.requestFather == 'BaseFindRequest'>
request.setPageNumber(1);
request.setPageSize(10);
request.setSortKey("CREATE_TIME");
request.setSortType(SortType.DESC);
</#if>
${item.response} response = client.execute(request);
Assert.assertTrue(!response.hasError());
}
</#list>

@ -7,7 +7,7 @@ package ${domain}.frame.base;
* @version 0.0.1
* @since 2017-01-01
*/
public abstract class BaseFindRequest<T> extends BaseRequest{
public class BaseFindRequest<T extends BaseResponse> extends BaseRequest<T> {
private long pageNumber = 1L;

@ -9,15 +9,15 @@ package ${domain}.frame.base;
*/
public class BaseRequest<T extends BaseResponse> {
void check() {
public void check() {
}
String path() {
public String path() {
return "";
}
Class<T> responseClass() {
public Class<T> responseClass() {
return null;
}
}

@ -7,7 +7,7 @@ package ${domain}.frame.base;
* @version 0.0.1
* @since 2017-01-01
*/
public abstract class BaseSearchRequest<T> extends BaseFindRequest{
public class BaseSearchRequest<T extends BaseResponse> extends BaseFindRequest<T> {
/**
*

@ -1,17 +1,20 @@
package ${domain};
package ${domain}.frame.client;
import ${domain}.frame.utils.AESUtil;
import ${domain}.frame.base.ApiRequest;
import ${domain}.frame.base.ApiResponse;
import ${domain}.frame.base.ErrorType;
import ${domain}.frame.utils.MD5Util;
import ${domain}.frame.utils.MapperUtil;
import ${domain}.frame.okhttp3.ProgressRequestBody;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import ${domain}.frame.base.BaseRequest;
import ${domain}.frame.base.BaseResponse;
import ${domain}.frame.base.ErrorType;
import ${domain}.frame.client.CallAfter;
import ${domain}.frame.client.CallBefore;
import ${domain}.frame.client.Callback;
import ${domain}.frame.okhttp3.ProgressRequestBody;
import ${domain}.frame.utils.AESUtil;
import ${domain}.frame.utils.MD5Util;
import ${domain}.frame.utils.MapperUtil;
import java.io.IOException;
import java.net.ConnectException;
@ -21,28 +24,19 @@ import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* ApiTest -
* ApiClient -
*
* @author ${author?default("")}
* @author
* @version 0.0.1
* @since ${.now?string["yyyy-MM-dd"]}
* @since 2020-06-18
*/
public class ApiClient {
private static ApiClient ourInstance = null;
public static void init(String serverUrl, String appKey, String appSecret) {
init(serverUrl, appKey, appSecret, DEFAULT_CONNECT_TIMEOUT, DEFAULT_READ_TIMEOUT);
public static ApiClient getInstance(String serverUrl, String appKey, String appSecret) {
return new ApiClient(serverUrl, appKey, appSecret, DEFAULT_CONNECT_TIMEOUT, DEFAULT_READ_TIMEOUT);
}
public static void init(String serverUrl, String appKey, String appSecret, int connectTimeout, int readTimeout) {
ourInstance = new ApiClient(serverUrl, appKey, appSecret, connectTimeout, readTimeout);
}
public static ApiClient getInstance() {
if (ourInstance == null) {
System.err.print("ApiClient need init");
}
return ourInstance;
public static ApiClient getInstance(String serverUrl, String appKey, String appSecret, int connectTimeout, int readTimeout) {
return new ApiClient(serverUrl, appKey, appSecret, connectTimeout, readTimeout);
}
//应用码
@ -56,8 +50,8 @@ public class ApiClient {
private static final int DEFAULT_CONNECT_TIMEOUT = 5;//秒
private static final int DEFAULT_READ_TIMEOUT = 10;//秒
private Before before = null;
private After after = null;
private CallBefore callBefore = null;
private CallAfter callAfter = null;
private String token = "";
private boolean debug = false;
@ -71,33 +65,21 @@ public class ApiClient {
.build();
}
public interface Callback<T extends ApiResponse> {
void call(T response);
}
public interface Before {
void call(ApiRequest request);
}
public interface After {
void call(ApiRequest request, ApiResponse response);
}
public void setAfter(After after) {
this.after = after;
public void setCallAfter(CallAfter callAfter) {
this.callAfter = callAfter;
}
public void setBefore(Before before) {
this.before = before;
public void setCallBefore(CallBefore callBefore) {
this.callBefore = callBefore;
}
public <T extends ApiResponse> T execute(ApiRequest<T> request) {
public <T extends BaseResponse> T execute(BaseRequest<T> request) {
return execute(request, null);
}
public <T extends ApiResponse> T execute(ApiRequest<T> request, ProgressRequestBody.ProgressListener listener) {
if (before != null) {
before.call(request);
public <T extends BaseResponse> T execute(BaseRequest<T> request, ProgressRequestBody.ProgressListener listener) {
if (callBefore != null) {
callBefore.call(request);
}
if (debug) {
@ -152,14 +134,14 @@ public class ApiClient {
} catch (IOException e) {
t.addError(ErrorType.SYSTEM_ERROR, "请求异常!");
} finally {
if (after != null) {
after.call(request, t);
if (callAfter != null) {
callAfter.call(request, t);
}
}
return t;
}
public <T extends ApiResponse> void executeCall(ApiRequest<T> request, Callback callback) {
public <T extends BaseResponse> void executeCall(BaseRequest<T> request, Callback callback) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.execute(new Runnable() {
@Override
@ -170,7 +152,7 @@ public class ApiClient {
});
}
public <T extends ApiResponse> void executeCall(ApiRequest<T> request, Callback callback, ProgressRequestBody.ProgressListener listener) {
public <T extends BaseResponse> void executeCall(BaseRequest<T> request, Callback callback, ProgressRequestBody.ProgressListener listener) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.execute(new Runnable() {
@Override
@ -187,13 +169,13 @@ public class ApiClient {
* @param request
* @return
*/
private String sign(ApiRequest request, String currentTime) {
private String sign(BaseRequest request, String currentTime) {
String json = MapperUtil.toJson(request);
return MD5Util.encode(appSecret + json + currentTime);
}
public void setToken(String token) {
this.token = token;
this.token = token == null ? "" : token;
}
public boolean isDebug() {

@ -0,0 +1,9 @@
package ${domain}.frame.client;
import ${domain}.frame.base.BaseRequest;
import ${domain}.frame.base.BaseResponse;
public interface CallAfter {
void call(BaseRequest request, BaseResponse response);
}

@ -0,0 +1,7 @@
package ${domain}.frame.client;
import ${domain}.frame.base.BaseRequest;
public interface CallBefore {
void call(BaseRequest request);
}

@ -0,0 +1,7 @@
package ${domain}.frame.client;
import ${domain}.frame.base.BaseResponse;
public interface Callback<T extends BaseResponse> {
void call(T response);
}

@ -30,8 +30,8 @@ public class AESUtil {
*/
public static byte[] encrypt(byte[] data, String secret) {
try {
if (secret.length() != 16) {
throw new IllegalArgumentException("secret's length is not 16");
if (secret.length() != 32) {
throw new IllegalArgumentException("Hex secret's length must be 32");
}
SecretKeySpec key = new SecretKeySpec(BytesUtil.hex2Bytes(secret), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM_STR); // 创建密码器
@ -72,8 +72,8 @@ public class AESUtil {
*/
public static byte[] decrypt(byte[] data, String secret) {
try {
if (secret.length() != 16) {
throw new IllegalArgumentException("secret's length is not 16");
if (secret.length() != 32) {
throw new IllegalArgumentException("Hex secret's length must be 32");
}
SecretKeySpec key = new SecretKeySpec(BytesUtil.hex2Bytes(secret), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM_STR);

@ -7,12 +7,13 @@ ${i}
import ${domain}.module.${module}.ent.${entName};
</#list>
<#if fatherName == 'BaseRequest'>
import ${domain}.frame.base.'BaseRequest';
import ${domain}.frame.base.BaseRequest;
<#elseif fatherName == 'BaseFindRequest'>
import ${domain}.frame.base.BaseFindRequest;
<#elseif fatherName == 'BaseSearchRequest'>
import ${domain}.frame.base.BaseSearchRequest;
</#if>
import ${domain}.module.${module}.rsp.${rspClassName};
<#list annotation as i>
${i}

Loading…
Cancel
Save

Powered by TurnKey Linux.