diff options
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/orbekk/protobuf/RequestDispatcher.java | 5 | ||||
-rw-r--r-- | 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<Message> callback = new RpcCallback<Message>() { @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) { |