Yeah, I figured that out shortly after posting this. Sorry for wasting your 
time. I posted this question in so many places and forgot to mention that 
here.

On Friday, November 10, 2023 at 9:34:44 PM UTC-5 Nadav Samet wrote:

> The doc for getReader says the data is interpreted based on a certain 
> character set, so that could lead to the bytes getting garbled. Have you 
> tried using getInputStream instead of getReader? 
>
> On Fri, Nov 10, 2023 at 8:47 AM Oliver Yasuna <[email protected]> wrote:
>
>> I am having trouble de-serializing a protobuf. I am confident that it is 
>> serialized properly, as serialization works in all other cases.
>>
>> Here's a simplified proto file:
>>
>> ```proto3
>> syntax = "proto3";
>>
>> message Request {
>>   oneof request {
>>     LoginRequest login = 1;
>>     SyncRequest sync = 2;
>>     PushRequest push = 3;
>>   }
>> }
>>
>> message LoginRequest {
>>   string username = 1;
>>   string password = 2;
>> }
>>
>> message SyncRequest {
>> }
>>
>> message PushRequest {
>>   message Item {
>>     int64 id = 1;
>>     string value = 2;
>>     string date = 3;
>>   }
>>
>>   repeated Item items = 1;
>> }
>>
>> ```
>>
>> I read and de-serialize the protobuf in the `doPost` method of an 
>> `HttpServlet`:
>>
>> ```java
>> @Override
>> protected void doPost(final HttpServletRequest httpRequest, final 
>> HttpServletResponse httpResponse) throws ServletException, IOException {
>>   final BufferedReader reader = httpRequest.getReader();
>>   final byte[] buffer = IOUtils.toByteArray(reader, 
>> StandardCharsets.UTF_8);
>>
>>   final Request request;
>>
>>   try {
>>     // TODO: Read from input stream directly.
>>     request = Request.parseFrom(buffer);
>>   } catch(final Exception e) {
>>     throw new ServletException("Failed to deserialize request body.", e);
>>   }
>>
>>   // Never reaches this line.
>>   // ...
>> }
>> ```
>>
>> I get the following error:
>>
>> ```
>> 11:44:23.199 [qtp1165303897-24] WARN  o.e.j.ee10.servlet.ServletChannel - 
>> handleException /api com.google.protobuf.InvalidProtocolBufferException: 
>> While parsing a protocol message, the input ended unexpectedly in the 
>> middle of a field.  This could mean either that the input has been 
>> truncated or that an embedded message misreported its own length.
>> ```
>>
>> If I sent `Request.login` or `Request.sync`, it successfully 
>> de-serializes. The error only occurs for `Request.push`. 
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Protocol Buffers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/protobuf/e85e7551-1b04-4199-9bed-5e8ce0631747n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/protobuf/e85e7551-1b04-4199-9bed-5e8ce0631747n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>
> -- 
> -Nadav
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/dce8cfcb-3809-4ce6-a765-78be82a9e64bn%40googlegroups.com.

Reply via email to