Chris,
Your suggestion of trying base64 worked on the nested 
protobuf. Thanks to you and Llia again for taking the time to
share your thoughts. 

Here is the solution that ended up working with the websocket 
server that I'm using.


   def GetHeartbeat(self):
    print "GetHeartbeat called"
    heartbeatResult = rpc_pb2.HeartbeatResult()
    heartbeatResult.service = "ALERT_SERVICE"
    heartbeatResult.timestamp = self.getTimestamp()
    heartbeatResult.status_cd = rpc_pb2.OK
    heartbeatResult.status_summary = "OK"

    response = rpc_pb2.Response()
    response.service_name = ""
    response.method_name = "SendHeartbeatResult"
    response.client_id = "ALERT_SERVICE"
    response.status_cd = rpc_pb2.OK    
    *response.response_proto = 
base64.b64encode(heartbeatResult.SerializeToString())*
    self.sendMessage(response.SerializeToString())
    print "GetHeartbeat finished"





On Tuesday, August 27, 2013 12:12:30 PM UTC-7, Christopher Head wrote:
>
> On Mon, 26 Aug 2013 17:32:23 -0700 (PDT) 
> chri...@gmail.com <javascript:> wrote: 
>
> > Thanks for taking the time to read/reply. 
> > 
> > GetHeartbeat2 is my original version which I included as well and the 
> > way I had thought it should probably work. This code is serializing 
> > to string 
> > on the inner buffer and then again on the outer.   
> > 
> >    response.response_proto = heartbeatResult.SerializeToString() 
> >     self.sendMessage(response.SerializeToString()) 
> > 
> > 
> > The GetHeartbeat2 generates this error on the server ( I included 
> > more of the stack trace this time) 
> > Message: [org.java_websocket.exceptions.InvalidDataException: 
> > java.nio.charset.MalformedInputException: Input length = 1 
> >     at 
> > 
> org.java_websocket.util.Charsetfunctions.stringUtf8(Charsetfunctions.java:80) 
>
> >     at 
> > org.java_websocket.WebSocketImpl.deliverMessage(WebSocketImpl.java:561) 
> >     at 
> > org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:328) 
> > at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:149) at 
> > 
> org.java_websocket.server.WebSocketServer$WebSocketWorker.run(WebSocketServer.java:593)
>  
>
> > Caused by: java.nio.charset.MalformedInputException: Input length = 1 
> >     at 
> > java.nio.charset.CoderResult.throwException(CoderResult.java:277) at 
> > java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:798) at 
> > 
> org.java_websocket.util.Charsetfunctions.stringUtf8(Charsetfunctions.java:77) 
>
> > 
>
> This stack trace suggests you’re still involving UTF-8 somewhere, this 
> time on the Java side (java.nio.charset, stringUtf8 method name, etc.). 
> Again, an encoded Protobuf message is a BYTE STRING. You should not be 
> doing UTF-8 things, or any other text-related things, to it. I have no 
> idea how Websockets work, but if they are not capable of transporting 
> byte strings directly (if they only carry text, for example), then you 
> will have to do further encoding on your Protobuf message—Base64 might 
> be suitable here. 
>
> Chris 
>

-- 
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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to