@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("InvocationException: code="); sb.append(getStatusCode()); sb.append(";msg="); sb.append(getErrorData()); return sb.toString(); } }
protected void onFailure(RoutingContext context) { LOGGER.error("edge server failed.", context.failure()); HttpServerResponse response = context.response(); if (context.failure() instanceof InvocationException) { InvocationException exception = (InvocationException) context.failure(); response.setStatusCode(exception.getStatusCode()); response.setStatusMessage(exception.getErrorData().toString()); response.end(); } else { response.setStatusCode(Status.BAD_GATEWAY.getStatusCode()); response.setStatusMessage(Status.BAD_GATEWAY.getReasonPhrase()); response.end(); } } }
@Override public CompletableFuture<Void> beforeSendResponseAsync(Invocation invocation, HttpServletResponseEx responseEx) { Response response = (Response) responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE); ProduceProcessor produceProcessor = (ProduceProcessor) responseEx.getAttribute(RestConst.INVOCATION_HANDLER_PROCESSOR); Object body = response.getResult(); if (response.isFailed()) { body = ((InvocationException) body).getErrorData(); } if (Part.class.isInstance(body)) { return responseEx.sendPart((Part) body); } responseEx.setContentType(produceProcessor.getName() + "; charset=utf-8"); CompletableFuture<Void> future = new CompletableFuture<>(); try (BufferOutputStream output = new BufferOutputStream(Unpooled.compositeBuffer())) { produceProcessor.encodeResponse(output, body); responseEx.setBodyBuffer(output.getBuffer()); future.complete(null); } catch (Throwable e) { future.completeExceptionally(ExceptionFactory.convertProducerException(e)); } return future; } }
response.setStatusMessage(exception.getErrorData().toString()); response.end(); return;
private void sendResponse(Map<String, String> context, Response response) { invocation.getInvocationStageTrace().finishHandlersResponse(); ResponseHeader header = new ResponseHeader(); header.setStatusCode(response.getStatusCode()); header.setReasonPhrase(response.getReasonPhrase()); header.setContext(context); header.setHeaders(response.getHeaders()); WrapSchema bodySchema = operationProtobuf.findResponseSchema(response.getStatusCode()); Object body = response.getResult(); if (response.isFailed()) { body = ((InvocationException) body).getErrorData(); } try { Buffer respBuffer = HighwayCodec.encodeResponse(msgId, header, bodySchema, body); invocation.getInvocationStageTrace().finishServerFiltersResponse(); connection.write(respBuffer.getByteBuf()); } catch (Exception e) { // 没招了,直接打日志 String msg = String.format("encode response failed, %s, msgId=%d", operationProtobuf.getOperationMeta().getMicroserviceQualifiedName(), msgId); LOGGER.error(msg, e); } finally { if (invocation != null) { invocation.onFinish(response); } } }
@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("InvocationException: code="); sb.append(getStatusCode()); sb.append(";msg="); sb.append(getErrorData()); return sb.toString(); } }
@Override public CompletableFuture<Void> beforeSendResponseAsync(Invocation invocation, HttpServletResponseEx responseEx) { Response response = (Response) responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE); ProduceProcessor produceProcessor = (ProduceProcessor) responseEx.getAttribute(RestConst.INVOCATION_HANDLER_PROCESSOR); Object body = response.getResult(); if (response.isFailed()) { body = ((InvocationException) body).getErrorData(); } if (Part.class.isInstance(body)) { return responseEx.sendPart((Part) body); } responseEx.setContentType(produceProcessor.getName() + "; charset=utf-8"); CompletableFuture<Void> future = new CompletableFuture<>(); try (BufferOutputStream output = new BufferOutputStream(Unpooled.compositeBuffer())) { produceProcessor.encodeResponse(output, body); responseEx.setBodyBuffer(output.getBuffer()); future.complete(null); } catch (Throwable e) { future.completeExceptionally(ExceptionFactory.convertProducerException(e)); } return future; } }
response.setStatusMessage(exception.getErrorData().toString()); response.end(); return;
private void sendResponse(Map<String, String> context, Response response) { invocation.getInvocationStageTrace().finishHandlersResponse(); ResponseHeader header = new ResponseHeader(); header.setStatusCode(response.getStatusCode()); header.setReasonPhrase(response.getReasonPhrase()); header.setContext(context); header.setHeaders(response.getHeaders()); WrapSchema bodySchema = operationProtobuf.findResponseSchema(response.getStatusCode()); Object body = response.getResult(); if (response.isFailed()) { body = ((InvocationException) body).getErrorData(); } try { Buffer respBuffer = HighwayCodec.encodeResponse(msgId, header, bodySchema, body); invocation.getInvocationStageTrace().finishServerFiltersResponse(); connection.write(respBuffer.getByteBuf()); } catch (Exception e) { // 没招了,直接打日志 String msg = String.format("encode response failed, %s, msgId=%d", operationProtobuf.getOperationMeta().getMicroserviceQualifiedName(), msgId); LOGGER.error(msg, e); } finally { if (invocation != null) { invocation.onFinish(response); } } }