From f3c75580e4e7b18c372e1f83e4283701c01bcaca Mon Sep 17 00:00:00 2001 From: Joshua Humphries Date: Tue, 20 Oct 2015 16:24:48 -0400 Subject: throw IOException instead of InvalidProtocolBufferException when appropriate --- java/core/src/main/java/com/google/protobuf/Parser.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'java/core/src/main/java/com/google/protobuf/Parser.java') diff --git a/java/core/src/main/java/com/google/protobuf/Parser.java b/java/core/src/main/java/com/google/protobuf/Parser.java index 227c02b7..3fa11c3b 100644 --- a/java/core/src/main/java/com/google/protobuf/Parser.java +++ b/java/core/src/main/java/com/google/protobuf/Parser.java @@ -30,6 +30,7 @@ package com.google.protobuf; +import java.io.IOException; import java.io.InputStream; /** @@ -37,9 +38,20 @@ import java.io.InputStream; * * The implementation should be stateless and thread-safe. * + *

All methods may throw {@link InvalidProtocolBufferException}. In the event of invalid data, + * like an encoding error, the cause of the thrown exception will be {@code null}. However, if an + * I/O problem occurs, an exception is thrown with an {@link IOException} cause. + * * @author liujisi@google.com (Pherl Liu) */ public interface Parser { + + // NB(jh): Other parts of the protobuf API that parse messages distinguish between an I/O problem + // (like failure reading bytes from a socket) and invalid data (encoding error) via the type of + // thrown exception. But it would be source-incompatible to make the methods in this interface do + // so since they were originally spec'ed to only throw InvalidProtocolBufferException. So callers + // must inspect the cause of the exception to distinguish these two cases. + /** * Parses a message of {@code MessageType} from the input. * -- cgit v1.2.3