|
|
|
@ -62,6 +62,10 @@ import com.google.protobuf.util.JsonTestProto.TestStruct; |
|
|
|
|
import com.google.protobuf.util.JsonTestProto.TestTimestamp; |
|
|
|
|
import com.google.protobuf.util.JsonTestProto.TestWrappers; |
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.io.InputStream; |
|
|
|
|
import java.io.InputStreamReader; |
|
|
|
|
import java.io.Reader; |
|
|
|
|
import java.io.StringReader; |
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.math.BigInteger; |
|
|
|
|
import java.util.HashMap; |
|
|
|
@ -1417,4 +1421,34 @@ public class JsonFormatTest extends TestCase { |
|
|
|
|
// Expected.
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Test that we are not leaking out JSON exceptions.
|
|
|
|
|
public void testJsonException() throws Exception { |
|
|
|
|
InputStream throwingInputStream = new InputStream() { |
|
|
|
|
public int read() throws IOException { |
|
|
|
|
throw new IOException("12345"); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
InputStreamReader throwingReader = new InputStreamReader(throwingInputStream); |
|
|
|
|
// When the underlying reader throws IOException, JsonFormat should forward
|
|
|
|
|
// through this IOException.
|
|
|
|
|
try { |
|
|
|
|
TestAllTypes.Builder builder = TestAllTypes.newBuilder(); |
|
|
|
|
JsonFormat.parser().merge(throwingReader, builder); |
|
|
|
|
fail("Exception is expected."); |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
assertEquals("12345", e.getMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Reader invalidJsonReader = new StringReader("{ xxx - yyy }"); |
|
|
|
|
// When the JSON parser throws parser exceptions, JsonFormat should turn
|
|
|
|
|
// that into InvalidProtocolBufferException.
|
|
|
|
|
try { |
|
|
|
|
TestAllTypes.Builder builder = TestAllTypes.newBuilder(); |
|
|
|
|
JsonFormat.parser().merge(invalidJsonReader, builder); |
|
|
|
|
fail("Exception is expected."); |
|
|
|
|
} catch (InvalidProtocolBufferException e) { |
|
|
|
|
// Expected.
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|