summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-05-02 13:34:35 +0200
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-05-02 13:35:00 +0200
commit2681f372b3f7d6f1c7504a032b5cd5692afbfb88 (patch)
tree47dca3e090880d40c79dffdbc2412824b1eb26e3
parent3fe83ccffdf53569f7d09af669cf8abaee95db15 (diff)
Error handling.
Try to report failures locally instead of causing failures remotely.
-rw-r--r--src/main/java/com/orbekk/protobuf/RequestDispatcher.java5
-rw-r--r--src/main/java/com/orbekk/protobuf/RpcChannel.java11
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) {