From 2681f372b3f7d6f1c7504a032b5cd5692afbfb88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Wed, 2 May 2012 13:34:35 +0200 Subject: Error handling. Try to report failures locally instead of causing failures remotely. --- src/main/java/com/orbekk/protobuf/RequestDispatcher.java | 5 +++++ src/main/java/com/orbekk/protobuf/RpcChannel.java | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/orbekk/protobuf/RequestDispatcher.java b/src/main/java/com/orbekk/protobuf/RequestDispatcher.java index c9f79fb..4399a6e 100644 --- a/src/main/java/com/orbekk/protobuf/RequestDispatcher.java +++ b/src/main/java/com/orbekk/protobuf/RequestDispatcher.java @@ -47,6 +47,11 @@ public class RequestDispatcher extends Thread { private final RpcCallback callback = new RpcCallback() { @Override public void run(Message responseMessage) { + if (responseMessage == null && rpc.isOk()) { + throw new IllegalStateException( + "responseMessage is null, but rpc is ok: " + + rpc); + } if (responseMessage != null) { response.setResponseProto(responseMessage.toByteString()); } diff --git a/src/main/java/com/orbekk/protobuf/RpcChannel.java b/src/main/java/com/orbekk/protobuf/RpcChannel.java index 2b48004..ffc0d76 100644 --- a/src/main/java/com/orbekk/protobuf/RpcChannel.java +++ b/src/main/java/com/orbekk/protobuf/RpcChannel.java @@ -294,14 +294,21 @@ public class RpcChannel implements com.google.protobuf.RpcChannel { return; } try { - Message responsePb = request.responsePrototype.toBuilder() - .mergeFrom(response.getResponseProto()).build(); + Message responsePb = null; + if (response.hasResponseProto()) { + responsePb = request.responsePrototype.toBuilder() + .mergeFrom(response.getResponseProto()).build(); + } if (logger.isLoggable(Level.FINER)) { logger.finer(String.format("O(%d) <= %s", response.getRequestId(), responsePb)); } request.rpc.readFrom(response); + if (responsePb == null && request.rpc.isOk()) { + logger.warning("Invalid response from server: " + response); + request.rpc.setFailed("invalid response from server."); + } request.done.run(responsePb); request.rpc.complete(); } catch (InvalidProtocolBufferException e) { -- cgit v1.2.3