Rest优化
This commit is contained in:
@@ -202,7 +202,7 @@ public class HttpMessageLocalClient extends HttpMessageClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishJson(final JsonConvert convert, final Object obj) {
|
public void finishJson(final Convert convert, final Object obj) {
|
||||||
finish(convert, (Type) null, obj);
|
finish(convert, (Type) null, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ public class HttpMessageLocalClient extends HttpMessageClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishJson(final JsonConvert convert, final Type type, final Object obj) {
|
public void finishJson(final Convert convert, final Type type, final Object obj) {
|
||||||
if (future == null) {
|
if (future == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ public class HttpMessageResponse extends HttpResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishJson(final JsonConvert convert, final Object obj) {
|
public void finishJson(final Convert convert, final Object obj) {
|
||||||
if (message.isEmptyRespTopic()) {
|
if (message.isEmptyRespTopic()) {
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.run();
|
callback.run();
|
||||||
@@ -148,7 +148,7 @@ public class HttpMessageResponse extends HttpResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishJson(final JsonConvert convert, final Type type, final Object obj) {
|
public void finishJson(final Convert convert, final Type type, final Object obj) {
|
||||||
if (message.isEmptyRespTopic()) {
|
if (message.isEmptyRespTopic()) {
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.run();
|
callback.run();
|
||||||
@@ -166,7 +166,7 @@ public class HttpMessageResponse extends HttpResponse {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
finishHttpResult(type, new HttpResult(ret));
|
finish(type, new HttpResult(ret));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
protected final ConvertBytesHandler convertHandler = new ConvertBytesHandler() {
|
protected final ConvertBytesHandler convertHandler = new ConvertBytesHandler() {
|
||||||
@Override
|
@Override
|
||||||
public <A> void completed(byte[] bs, int offset, int length, Consumer<A> callback, A attachment) {
|
public <A> void completed(byte[] bs, int offset, int length, Consumer<A> callback, A attachment) {
|
||||||
finish(bs, offset, length, callback, attachment);
|
HttpResponse.this.finish(bs, offset, length, callback, attachment);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -356,7 +356,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
* @param convert 指定的JsonConvert
|
* @param convert 指定的JsonConvert
|
||||||
* @param obj 输出对象
|
* @param obj 输出对象
|
||||||
*/
|
*/
|
||||||
public void finishJson(final JsonConvert convert, final Object obj) {
|
public void finishJson(final Convert convert, final Object obj) {
|
||||||
this.contentType = this.jsonContentType;
|
this.contentType = this.jsonContentType;
|
||||||
if (this.recycleListener != null) {
|
if (this.recycleListener != null) {
|
||||||
this.output = obj;
|
this.output = obj;
|
||||||
@@ -394,11 +394,11 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
/**
|
/**
|
||||||
* 将对象以JSON格式输出
|
* 将对象以JSON格式输出
|
||||||
*
|
*
|
||||||
* @param convert 指定的JsonConvert
|
* @param convert 指定的Convert
|
||||||
* @param type 指定的类型
|
* @param type 指定的类型
|
||||||
* @param obj 输出对象
|
* @param obj 输出对象
|
||||||
*/
|
*/
|
||||||
public void finishJson(final JsonConvert convert, final Type type, final Object obj) {
|
public void finishJson(final Convert convert, final Type type, final Object obj) {
|
||||||
this.contentType = this.jsonContentType;
|
this.contentType = this.jsonContentType;
|
||||||
if (this.recycleListener != null) {
|
if (this.recycleListener != null) {
|
||||||
this.output = obj;
|
this.output = obj;
|
||||||
@@ -445,7 +445,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
// if (convert == jsonRootConvert) {
|
// if (convert == jsonRootConvert) {
|
||||||
// JsonBytesWriter writer = jsonWriter;
|
// JsonBytesWriter writer = jsonWriter;
|
||||||
// convert.convertTo(writer.clear(), type, ret);
|
// convert.convertTo(writer.clear(), type, ret);
|
||||||
// finish(false, (String) null, writer.content(), writer.offset(), writer.length(), null, null);
|
// finishFuture(false, (String) null, writer.content(), writer.offset(), writer.length(), null, null);
|
||||||
// } else {
|
// } else {
|
||||||
// convert.convertToBytes(type, ret, convertHandler);
|
// convert.convertToBytes(type, ret, convertHandler);
|
||||||
// }
|
// }
|
||||||
@@ -453,12 +453,12 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
/**
|
/**
|
||||||
* 将RetResult对象以JSON格式输出
|
* 将RetResult对象以JSON格式输出
|
||||||
*
|
*
|
||||||
* @param convert 指定的JsonConvert
|
* @param convert 指定的Convert
|
||||||
* @param type 指定的RetResult泛型类型
|
* @param type 指定的RetResult泛型类型
|
||||||
* @param ret RetResult输出对象
|
* @param ret RetResult输出对象
|
||||||
*/
|
*/
|
||||||
// @Deprecated //@since 2.5.0
|
// @Deprecated //@since 2.5.0
|
||||||
// public void finishJson(final JsonConvert convert, Type type, org.redkale.service.RetResult ret) {
|
// public void finishJson(final Convert convert, Type type, org.redkale.service.RetResult ret) {
|
||||||
// this.contentType = this.jsonContentType;
|
// this.contentType = this.jsonContentType;
|
||||||
// if (this.retResultHandler != null) {
|
// if (this.retResultHandler != null) {
|
||||||
// ret = this.retResultHandler.apply(this.request, ret);
|
// ret = this.retResultHandler.apply(this.request, ret);
|
||||||
@@ -471,7 +471,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
// if (convert == jsonRootConvert) {
|
// if (convert == jsonRootConvert) {
|
||||||
// JsonBytesWriter writer = jsonWriter;
|
// JsonBytesWriter writer = jsonWriter;
|
||||||
// convert.convertTo(writer.clear(), type, ret);
|
// convert.convertTo(writer.clear(), type, ret);
|
||||||
// finish(false, (String) null, writer.content(), writer.offset(), writer.length(), null, null);
|
// finishFuture(false, (String) null, writer.content(), writer.offset(), writer.length(), null, null);
|
||||||
// } else {
|
// } else {
|
||||||
// convert.convertToBytes(type, ret, convertHandler);
|
// convert.convertToBytes(type, ret, convertHandler);
|
||||||
// }
|
// }
|
||||||
@@ -479,14 +479,14 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
/**
|
/**
|
||||||
* 将CompletableFuture的结果对象以JSON格式输出
|
* 将CompletableFuture的结果对象以JSON格式输出
|
||||||
*
|
*
|
||||||
* @param convert 指定的JsonConvert
|
* @param convert 指定的Convert
|
||||||
* @param valueType 指定CompletableFuture.value的泛型类型
|
* @param valueType 指定CompletableFuture.value的泛型类型
|
||||||
* @param future 输出对象的句柄
|
* @param future 输出对象的句柄
|
||||||
*/
|
*/
|
||||||
// @Deprecated //@since 2.5.0
|
// @Deprecated //@since 2.5.0
|
||||||
// @SuppressWarnings("unchecked")
|
// @SuppressWarnings("unchecked")
|
||||||
// public void finishJson(final JsonConvert convert, final Type valueType, final CompletableFuture future) {
|
// public void finishJson(final Convert convert, final Type valueType, final CompletableFuture future) {
|
||||||
// finish(convert, valueType, future);
|
// finishFuture(convert, valueType, future);
|
||||||
// }
|
// }
|
||||||
/**
|
/**
|
||||||
* 将RetResult对象输出
|
* 将RetResult对象输出
|
||||||
@@ -606,8 +606,8 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
* @param valueType CompletionFuture.value的泛型类型
|
* @param valueType CompletionFuture.value的泛型类型
|
||||||
* @param future CompletionStage输出对象
|
* @param future CompletionStage输出对象
|
||||||
*/
|
*/
|
||||||
public void finish(Type valueType, CompletionStage future) {
|
public void finishFuture(Type valueType, CompletionStage future) {
|
||||||
finish(request.getRespConvert(), valueType, future);
|
finishFuture(request.getRespConvert(), valueType, future);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -617,7 +617,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
* @param valueType CompletionFuture.value的泛型类型
|
* @param valueType CompletionFuture.value的泛型类型
|
||||||
* @param future CompletionStage输出对象
|
* @param future CompletionStage输出对象
|
||||||
*/
|
*/
|
||||||
public void finish(final Convert convert, Type valueType, CompletionStage future) {
|
public void finishFuture(final Convert convert, Type valueType, CompletionStage future) {
|
||||||
future.whenComplete((v, e) -> {
|
future.whenComplete((v, e) -> {
|
||||||
if (e != null) {
|
if (e != null) {
|
||||||
context.getLogger().log(Level.WARNING, "Servlet occur, force to close channel. request = " + request + ", result is CompletionStage", (Throwable) e);
|
context.getLogger().log(Level.WARNING, "Servlet occur, force to close channel. request = " + request + ", result is CompletionStage", (Throwable) e);
|
||||||
@@ -632,6 +632,38 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将CompletionStage对象输出
|
||||||
|
*
|
||||||
|
* @param valueType CompletionFuture.value的泛型类型
|
||||||
|
* @param future CompletionStage输出对象
|
||||||
|
*/
|
||||||
|
public void finishJsonFuture(Type valueType, CompletionStage future) {
|
||||||
|
finishJsonFuture(request.getRespConvert(), valueType, future);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将CompletionStage对象输出
|
||||||
|
*
|
||||||
|
* @param convert 指定的Convert
|
||||||
|
* @param valueType CompletionFuture.value的泛型类型
|
||||||
|
* @param future CompletionStage输出对象
|
||||||
|
*/
|
||||||
|
public void finishJsonFuture(final Convert convert, Type valueType, CompletionStage future) {
|
||||||
|
future.whenComplete((v, e) -> {
|
||||||
|
if (e != null) {
|
||||||
|
context.getLogger().log(Level.WARNING, "Servlet occur, force to close channel. request = " + request + ", result is CompletionStage", (Throwable) e);
|
||||||
|
if (e instanceof TimeoutException) {
|
||||||
|
finish504();
|
||||||
|
} else {
|
||||||
|
finish500();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
finishJson(convert, valueType, v);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将Flow.Publisher对象输出
|
* 将Flow.Publisher对象输出
|
||||||
*
|
*
|
||||||
@@ -652,7 +684,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
* @param publisher Publisher输出对象
|
* @param publisher Publisher输出对象
|
||||||
*/
|
*/
|
||||||
public <T> void finishPublisher(final Convert convert, Type valueType, Flow.Publisher<T> publisher) {
|
public <T> void finishPublisher(final Convert convert, Type valueType, Flow.Publisher<T> publisher) {
|
||||||
finish(convert, valueType, (CompletionStage) Flows.createMonoFuture(publisher));
|
finishFuture(convert, valueType, (CompletionStage) Flows.createMonoFuture(publisher));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -673,7 +705,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
* @param publisher Publisher输出对象
|
* @param publisher Publisher输出对象
|
||||||
*/
|
*/
|
||||||
public void finishPublisher(final Convert convert, Type valueType, Object publisher) {
|
public void finishPublisher(final Convert convert, Type valueType, Object publisher) {
|
||||||
finish(convert, valueType, (CompletionStage) Flows.maybePublisherToFuture(publisher));
|
finishFuture(convert, valueType, (CompletionStage) Flows.maybePublisherToFuture(publisher));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -681,8 +713,8 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
*
|
*
|
||||||
* @param future HttpScope输出异步对象
|
* @param future HttpScope输出异步对象
|
||||||
*/
|
*/
|
||||||
public void finishScope(CompletionStage<HttpScope> future) {
|
public void finishScopeFuture(CompletionStage<HttpScope> future) {
|
||||||
finish(request.getRespConvert(), future);
|
finishScopeFuture(request.getRespConvert(), future);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -691,7 +723,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
* @param convert 指定的Convert
|
* @param convert 指定的Convert
|
||||||
* @param future HttpScope输出异步对象
|
* @param future HttpScope输出异步对象
|
||||||
*/
|
*/
|
||||||
public void finishScope(final Convert convert, CompletionStage<HttpScope> future) {
|
public void finishScopeFuture(final Convert convert, CompletionStage<HttpScope> future) {
|
||||||
future.whenComplete((v, e) -> {
|
future.whenComplete((v, e) -> {
|
||||||
if (e != null) {
|
if (e != null) {
|
||||||
context.getLogger().log(Level.WARNING, "Servlet occur, force to close channel. request = " + request + ", result is CompletionStage", (Throwable) e);
|
context.getLogger().log(Level.WARNING, "Servlet occur, force to close channel. request = " + request + ", result is CompletionStage", (Throwable) e);
|
||||||
@@ -795,7 +827,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
}
|
}
|
||||||
finish("null");
|
finish("null");
|
||||||
} else if (val instanceof CompletionStage) {
|
} else if (val instanceof CompletionStage) {
|
||||||
finish(convert, val == obj ? type : null, (CompletionStage) val);
|
finishFuture(convert, val == obj ? type : null, (CompletionStage) val);
|
||||||
} else if (val instanceof CharSequence) {
|
} else if (val instanceof CharSequence) {
|
||||||
finish((String) val.toString());
|
finish((String) val.toString());
|
||||||
} else if (val instanceof byte[]) {
|
} else if (val instanceof byte[]) {
|
||||||
@@ -945,7 +977,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
if (cacheHandler != null) {
|
if (cacheHandler != null) {
|
||||||
cacheHandler.accept(this, data.getBytes());
|
cacheHandler.accept(this, data.getBytes());
|
||||||
}
|
}
|
||||||
//不能用finish(boolean kill, final ByteTuple array) 否则会调this.finish
|
//不能用finish(boolean kill, final ByteTuple array) 否则会调this.finishFuture
|
||||||
super.finish(false, data.content(), 0, data.length());
|
super.finish(false, data.content(), 0, data.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1193,13 +1225,13 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
/**
|
/**
|
||||||
* 将文件按指定文件名输出
|
* 将文件按指定文件名输出
|
||||||
*
|
*
|
||||||
* @param filename 输出文件名
|
* @param fileName 输出文件名
|
||||||
* @param file 输出文件
|
* @param file 输出文件
|
||||||
*
|
*
|
||||||
* @throws IOException IO异常
|
* @throws IOException IO异常
|
||||||
*/
|
*/
|
||||||
public void finish(final String filename, File file) throws IOException {
|
public void finish(final String fileName, File file) throws IOException {
|
||||||
finishFile(filename, file, null);
|
finishFile(fileName, file, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1610,7 +1642,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
//
|
//
|
||||||
// @Override
|
// @Override
|
||||||
// public void failed(Throwable exc, Void attachment) {
|
// public void failed(Throwable exc, Void attachment) {
|
||||||
// finish(true);
|
// finishFuture(true);
|
||||||
// try {
|
// try {
|
||||||
// filechannel.close();
|
// filechannel.close();
|
||||||
// } catch (IOException e) {
|
// } catch (IOException e) {
|
||||||
|
|||||||
@@ -3061,10 +3061,32 @@ public final class Rest {
|
|||||||
mv.visitVarInsn(ALOAD, 0);
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
mv.visitFieldInsn(GETFIELD, newDynName, REST_CONVERT_FIELD_PREFIX + restConverts.size(), convertDesc);
|
mv.visitFieldInsn(GETFIELD, newDynName, REST_CONVERT_FIELD_PREFIX + restConverts.size(), convertDesc);
|
||||||
mv.visitVarInsn(ALOAD, maxLocals);
|
mv.visitVarInsn(ALOAD, maxLocals);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishScope", "(" + convertDesc + stageDesc + ")V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishScopeFuture", "(" + convertDesc + stageDesc + ")V", false);
|
||||||
} else {
|
} else {
|
||||||
mv.visitVarInsn(ALOAD, maxLocals);
|
mv.visitVarInsn(ALOAD, maxLocals);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishScope", "(" + stageDesc + ")V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishScopeFuture", "(" + stageDesc + ")V", false);
|
||||||
|
}
|
||||||
|
} else if (returnGenericNoFutureType != byte[].class
|
||||||
|
&& returnGenericNoFutureType != RetResult.class
|
||||||
|
&& returnGenericNoFutureType != HttpResult.class
|
||||||
|
&& returnGenericNoFutureType != File.class
|
||||||
|
&& !((returnGenericNoFutureType instanceof Class) && (((Class) returnGenericNoFutureType).isPrimitive() || CharSequence.class.isAssignableFrom((Class) returnGenericNoFutureType)))) {
|
||||||
|
if (rcs != null && rcs.length > 0) {
|
||||||
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
|
mv.visitFieldInsn(GETFIELD, newDynName, REST_CONVERT_FIELD_PREFIX + restConverts.size(), convertDesc);
|
||||||
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
|
mv.visitFieldInsn(GETFIELD, newDynName, REST_RETURNTYPES_FIELD_NAME, "[Ljava/lang/reflect/Type;");
|
||||||
|
MethodDebugVisitor.pushInt(mv, entry.methodidx);//方法下标
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitVarInsn(ALOAD, maxLocals);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishJsonFuture", "(" + convertDesc + typeDesc + stageDesc + ")V", false);
|
||||||
|
} else {
|
||||||
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
|
mv.visitFieldInsn(GETFIELD, newDynName, REST_RETURNTYPES_FIELD_NAME, "[Ljava/lang/reflect/Type;");
|
||||||
|
MethodDebugVisitor.pushInt(mv, entry.methodidx);//方法下标
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitVarInsn(ALOAD, maxLocals);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishJsonFuture", "(" + typeDesc + stageDesc + ")V", false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (rcs != null && rcs.length > 0) {
|
if (rcs != null && rcs.length > 0) {
|
||||||
@@ -3075,14 +3097,14 @@ public final class Rest {
|
|||||||
MethodDebugVisitor.pushInt(mv, entry.methodidx);//方法下标
|
MethodDebugVisitor.pushInt(mv, entry.methodidx);//方法下标
|
||||||
mv.visitInsn(AALOAD);
|
mv.visitInsn(AALOAD);
|
||||||
mv.visitVarInsn(ALOAD, maxLocals);
|
mv.visitVarInsn(ALOAD, maxLocals);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finish", "(" + convertDesc + typeDesc + stageDesc + ")V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishFuture", "(" + convertDesc + typeDesc + stageDesc + ")V", false);
|
||||||
} else {
|
} else {
|
||||||
mv.visitVarInsn(ALOAD, 0);
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
mv.visitFieldInsn(GETFIELD, newDynName, REST_RETURNTYPES_FIELD_NAME, "[Ljava/lang/reflect/Type;");
|
mv.visitFieldInsn(GETFIELD, newDynName, REST_RETURNTYPES_FIELD_NAME, "[Ljava/lang/reflect/Type;");
|
||||||
MethodDebugVisitor.pushInt(mv, entry.methodidx);//方法下标
|
MethodDebugVisitor.pushInt(mv, entry.methodidx);//方法下标
|
||||||
mv.visitInsn(AALOAD);
|
mv.visitInsn(AALOAD);
|
||||||
mv.visitVarInsn(ALOAD, maxLocals);
|
mv.visitVarInsn(ALOAD, maxLocals);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finish", "(" + typeDesc + stageDesc + ")V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishFuture", "(" + typeDesc + stageDesc + ")V", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mv.visitInsn(RETURN);
|
mv.visitInsn(RETURN);
|
||||||
@@ -3120,7 +3142,7 @@ public final class Rest {
|
|||||||
MethodDebugVisitor.pushInt(mv, entry.methodidx);//方法下标
|
MethodDebugVisitor.pushInt(mv, entry.methodidx);//方法下标
|
||||||
mv.visitInsn(AALOAD);
|
mv.visitInsn(AALOAD);
|
||||||
mv.visitVarInsn(ALOAD, maxLocals);
|
mv.visitVarInsn(ALOAD, maxLocals);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishJson", "(" + Type.getDescriptor(JsonConvert.class) + typeDesc + "Ljava/lang/Object;)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, respInternalName, "finishJson", "(" + convertDesc + typeDesc + "Ljava/lang/Object;)V", false);
|
||||||
} else {
|
} else {
|
||||||
mv.visitVarInsn(ALOAD, 0);
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
mv.visitFieldInsn(GETFIELD, newDynName, REST_RETURNTYPES_FIELD_NAME, "[Ljava/lang/reflect/Type;");
|
mv.visitFieldInsn(GETFIELD, newDynName, REST_RETURNTYPES_FIELD_NAME, "[Ljava/lang/reflect/Type;");
|
||||||
|
|||||||
@@ -5,11 +5,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.test.http;
|
package org.redkale.test.http;
|
||||||
|
|
||||||
import org.redkale.net.http.HttpServlet;
|
import java.io.IOException;
|
||||||
import org.redkale.net.http.MultiPart;
|
import org.redkale.net.http.*;
|
||||||
import org.redkale.net.http.HttpRequest;
|
|
||||||
import org.redkale.net.http.HttpResponse;
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user