@Override public String toString() { String message = getMessage(); return "(" + failureType + "," + failureCode + ") " + (message != null ? message : ""); }
@Override public void encodeToWire(Buffer buffer, ReplyException body) { buffer.appendByte((byte)body.failureType().toInt()); buffer.appendInt(body.failureCode()); if (body.getMessage() == null) { buffer.appendByte((byte)0); } else { buffer.appendByte((byte)1); byte[] encoded = body.getMessage().getBytes(CharsetUtil.UTF_8); buffer.appendInt(encoded.length); buffer.appendBytes(encoded); } }
@Override public String toString() { String message = getMessage(); return "(" + failureType + "," + failureCode + ") " + (message != null ? message : ""); }
@Test public void testSendWithTimeoutNoHandlers() { String str = TestUtils.randomUnicodeString(1000); long timeout = 1000; eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.NO_HANDLERS, re.failureType()); assertEquals("No handlers for address " + ADDRESS1, re.getMessage()); testComplete(); }); await(); }
@Test public void testSendWithTimeoutRecipientFailure() { String str = TestUtils.randomUnicodeString(1000); String failureMsg = TestUtils.randomUnicodeString(1000); int failureCode = 123; eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); msg.fail(failureCode, failureMsg); }); long timeout = 1000; eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(failureCode, re.failureCode()); assertEquals(failureMsg, re.getMessage()); assertEquals(ReplyFailure.RECIPIENT_FAILURE, re.failureType()); testComplete(); }); await(); }
@Override public void encodeToWire(Buffer buffer, ReplyException body) { buffer.appendByte((byte)body.failureType().toInt()); buffer.appendInt(body.failureCode()); if (body.getMessage() == null) { buffer.appendByte((byte)0); } else { buffer.appendByte((byte)1); byte[] encoded = body.getMessage().getBytes(CharsetUtil.UTF_8); buffer.appendInt(encoded.length); buffer.appendBytes(encoded); } }
/** * @param message example: {format: "png", categories: [shenghuo, buyi]} */ private void getGushiciFromRedis(Message<JsonObject> message) { JsonArray realCategory = new JsonArray() .add("png".equals(message.body().getString("format")) ? "img" : "json") .addAll(message.body().getJsonArray("categories")); checkAndGetKey(realCategory) .compose(key -> Future.<String>future(s -> redisClient.srandmember(key, s))) // 从 set 随机返回一个对象 .setHandler(res -> { if (res.succeeded()) { message.reply(res.result()); } else { if (res.cause() instanceof ReplyException) { ReplyException exception = (ReplyException) res.cause(); message.fail(exception.failureCode(), exception.getMessage()); } message.fail(500, res.cause().getMessage()); } }); }
.put("failureCode", cause.failureCode()) .put("failureType", cause.failureType().name()) .put("message", cause.getMessage()); sock.write(buffer(envelope.encode()));
@Test public void testSendWithTimeoutNoHandlers() { String str = TestUtils.randomUnicodeString(1000); long timeout = 1000; eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.NO_HANDLERS, re.failureType()); assertEquals("No handlers for address " + ADDRESS1, re.getMessage()); testComplete(); }); await(); }
public static void sendErrFrame(String address, String replyAddress, ReplyException failure, WriteStream<Buffer> handler) { final JsonObject payload = new JsonObject() .put("type", "err") .put("address", replyAddress) .put("sourceAddress", address) .put("failureCode", failure.failureCode()) .put("failureType", failure.failureType().name()) .put("message", failure.getMessage()); writeFrame(payload, handler); }
public static void sendErrFrame(String address, String replyAddress, ReplyException failure, WriteStream<Buffer> handler) { final JsonObject payload = new JsonObject() .put("type", "err") .put("address", replyAddress) .put("sourceAddress", address) .put("failureCode", failure.failureCode()) .put("failureType", failure.failureType().name()) .put("message", failure.getMessage()); writeFrame(payload, handler); }
@Test public void testSendWithTimeoutRecipientFailure() { String str = TestUtils.randomUnicodeString(1000); String failureMsg = TestUtils.randomUnicodeString(1000); int failureCode = 123; eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); msg.fail(failureCode, failureMsg); }); long timeout = 1000; eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(failureCode, re.failureCode()); assertEquals(failureMsg, re.getMessage()); assertEquals(ReplyFailure.RECIPIENT_FAILURE, re.failureType()); testComplete(); }); await(); }
private static void manageError( ReplyException cause, HttpServerResponse response) { if(isExistingHttStatusCode(cause.failureCode())) { response.setStatusCode(cause.failureCode()); if(StringUtils.isNotEmpty(cause.getMessage())) { response.setStatusMessage(cause.getMessage()); } } else { response.setStatusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.code()); } response.end(); }
private Handler<Message<JsonObject>> configureHandler(List<Function<Message<JsonObject>, Future<Message<JsonObject>>>> interceptors) { Handler<Message<JsonObject>> handler = this; if (interceptors != null) { for (Function<Message<JsonObject>, Future<Message<JsonObject>>> interceptor : interceptors) { Handler<Message<JsonObject>> prev = handler; handler = msg -> { Future<Message<JsonObject>> fut = interceptor.apply(msg); fut.setHandler(ar -> { if (ar.succeeded()) { prev.handle(msg); } else { ReplyException exception = (ReplyException) ar.cause(); msg.fail(exception.failureCode(), exception.getMessage()); } }); }; } } return handler; }
new JsonObject().put("address", replyAddress).put("failureCode", cause.failureCode()).put("failureType", cause.failureType().name()) .put("message", cause.getMessage()); sock.write(buffer(envelope.encode()));
.put("failureCode", cause.failureCode()) .put("failureType", cause.failureType().name()) .put("message", cause.getMessage()); sock.write(buffer(envelope.encode()));
new JsonObject().put("address", replyAddress).put("failureCode", cause.failureCode()).put("failureType", cause.failureType().name()) .put("message", cause.getMessage()); sock.write(buffer(envelope.encode()));
@Test public void testEchoConsumerFails() throws InterruptedException { vertx.eventBus().send(VertxObservers.TEST_ECHO, "fail", (r) -> { if (r.failed()) { VertxObservers.SYNCHRONIZER.add(r.cause()); } }); Object cause = poll(); assertNotNull(cause); ReplyException replyException = (ReplyException) cause; assertEquals(10, replyException.failureCode()); assertEquals("My failure!", replyException.getMessage()); assertEquals(ReplyFailure.RECIPIENT_FAILURE, replyException.failureType()); vertx.eventBus().send(VertxObservers.TEST_ECHO, "exception", (r) -> { if (r.failed()) { VertxObservers.SYNCHRONIZER.add(r.cause()); } }); cause = poll(); assertNotNull(cause); replyException = (ReplyException) cause; assertEquals(VertxEvent.OBSERVER_FAILURE_CODE, replyException.failureCode()); assertEquals("oops", replyException.getMessage()); assertEquals(ReplyFailure.RECIPIENT_FAILURE, replyException.failureType()); }
@Test public void testFailingMethod() { proxy.failingMethod(onFailure(t -> { assertTrue(t instanceof ReplyException); ReplyException re = (ReplyException) t; assertEquals(ReplyFailure.RECIPIENT_FAILURE, re.failureType()); assertEquals("wibble", re.getMessage()); testComplete(); })); await(); }