diff --git a/src/org/redkale/mq/HttpMessageProcessor.java b/src/org/redkale/mq/HttpMessageProcessor.java index d7708ac82..4d82fa6d2 100644 --- a/src/org/redkale/mq/HttpMessageProcessor.java +++ b/src/org/redkale/mq/HttpMessageProcessor.java @@ -78,11 +78,12 @@ public class HttpMessageProcessor implements MessageProcessor { } private void execute(final MessageRecord message, final Runnable callback) { + HttpMessageRequest request = null; try { if (finest) logger.log(Level.FINEST, "HttpMessageProcessor.process message: " + message); if (multiconsumer) message.setResptopic(null); //不容许有响应 HttpContext context = server.getHttpServer().getContext(); - HttpMessageRequest request = new HttpMessageRequest(context, message); + request = new HttpMessageRequest(context, message); if (multiconsumer) { request.setRequestURI(request.getRequestURI().replaceFirst(this.multimodule, this.restmodule)); } @@ -90,7 +91,8 @@ public class HttpMessageProcessor implements MessageProcessor { servlet.execute(request, response); } catch (Throwable ex) { if (message.getResptopic() != null && !message.getResptopic().isEmpty()) { - HttpMessageResponse.finishHttpResult(finest, message, callback, producer.getProducer(message), message.getResptopic(), new HttpResult().status(500)); + HttpMessageResponse.finishHttpResult(finest, request == null ? null : request.getRespConvert(), + message, callback, producer.getProducer(message), message.getResptopic(), new HttpResult().status(500)); } logger.log(Level.SEVERE, HttpMessageProcessor.class.getSimpleName() + " process error, message=" + message, ex instanceof CompletionException ? ((CompletionException) ex).getCause() : ex); } diff --git a/src/org/redkale/mq/HttpMessageRequest.java b/src/org/redkale/mq/HttpMessageRequest.java index fbaea9a56..dbdcb0966 100644 --- a/src/org/redkale/mq/HttpMessageRequest.java +++ b/src/org/redkale/mq/HttpMessageRequest.java @@ -5,6 +5,7 @@ */ package org.redkale.mq; +import org.redkale.convert.Convert; import org.redkale.net.http.*; /** @@ -30,4 +31,8 @@ public class HttpMessageRequest extends HttpRequest { this.requestURI = uri; } + @Override + public Convert getRespConvert() { + return this.respConvert; + } } diff --git a/src/org/redkale/mq/HttpMessageResponse.java b/src/org/redkale/mq/HttpMessageResponse.java index 30ad9ed92..e5f6c7abd 100644 --- a/src/org/redkale/mq/HttpMessageResponse.java +++ b/src/org/redkale/mq/HttpMessageResponse.java @@ -51,10 +51,10 @@ public class HttpMessageResponse extends HttpResponse { } public void finishHttpResult(HttpResult result) { - finishHttpResult(this.finest, this.message, this.callback, this.producer, message.getResptopic(), result); + finishHttpResult(this.finest, ((HttpMessageRequest) this.request).getRespConvert(), this.message, this.callback, this.producer, message.getResptopic(), result); } - public static void finishHttpResult(boolean finest, MessageRecord msg, Runnable callback, MessageProducer producer, String resptopic, HttpResult result) { + public static void finishHttpResult(boolean finest, Convert respConvert, MessageRecord msg, Runnable callback, MessageProducer producer, String resptopic, HttpResult result) { if (callback != null) callback.run(); if (resptopic == null || resptopic.isEmpty()) return; if (result.getResult() instanceof RetResult) { @@ -62,6 +62,7 @@ public class HttpMessageResponse extends HttpResponse { //必须要塞入retcode, 开发者可以无需反序列化ret便可确定操作是否返回成功 if (!ret.isSuccess()) result.header("retcode", String.valueOf(ret.getRetcode())); } + if (result.convert() == null && respConvert != null) result.convert(respConvert); if (finest) { Object innerrs = result.getResult(); if (innerrs instanceof byte[]) innerrs = new String((byte[]) innerrs, StandardCharsets.UTF_8); diff --git a/src/org/redkale/net/http/HttpRequest.java b/src/org/redkale/net/http/HttpRequest.java index df8680652..23cf64ce5 100644 --- a/src/org/redkale/net/http/HttpRequest.java +++ b/src/org/redkale/net/http/HttpRequest.java @@ -616,6 +616,9 @@ public class HttpRequest extends Request { public String toString() { parseBody(); return this.getClass().getSimpleName() + "{\r\n method: " + this.method + ", \r\n requestURI: " + this.requestURI + + (this.frombody ? (", \r\n frombody: " + this.frombody) : "") + + (this.reqConvert != null ? (", \r\n reqConvert: " + this.reqConvert.getClass().getSimpleName()) : "") + + (this.respConvert != null ? (", \r\n respConvert: " + this.respConvert.getClass().getSimpleName()) : "") + ", \r\n remoteAddr: " + this.getRemoteAddr() + ", \r\n cookies: " + this.cookie + ", \r\n contentType: " + this.contentType + ", \r\n connection: " + this.connection + ", \r\n protocol: " + this.protocol + ", \r\n host: " + this.host + ", \r\n contentLength: " + this.contentLength + ", \r\n bodyLength: " + this.array.size() + (this.boundary || this.array.isEmpty() ? "" : (", \r\n bodyContent: " + this.getBodyUTF8()))