protocol protobuf google buffers array java serialization protocol-buffers

java - google - protobuf json



error con la serialización con protobuf (1)

Como dijo Marc, una falta de coincidencia en las versiones de Protocol Buffer le dará este mensaje exacto. En particular si

  • La definición de .proto se convierte a java usando el protoc.exe 2.4.3 (o anterior)
  • Se utiliza la biblioteca de protobuffers 2.5.0.

obtendrá este mensaje en muchos métodos (por ejemplo, getParserForType, getUnknownFields) de la clase GeneratedMessage . No hay duda de otros posibles desajustes que causarán este error.

Con los buffers de protocolo 2.5.0 es esencial que regenere todas las clases de java con la versión 2.5.0 de protoc (o en windows protoc.exe).

Si ejecuta el código de ejecución inversa generado por protoc versión 2.5 con las bibliotecas para los búferes de protocolo versión 2.4 . Recibirás el siguiente mensaje.

java.lang.VerifyError: class xxx.xxx.xx.. overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;

Estoy tratando de serializar una estructura con protobuf. Después de muchas horas, tratando de averiguar qué estoy haciendo mal, decidí probar el ejemplo de Google y no funcionó tan bien.

Tengo el siguiente protocolo de google ( https://developers.google.com/protocol-buffers/docs/javatutorial ):

package tutorial; option java_package = "com.example.tutorial"; option java_outer_classname = "AddressBookProtos"; message Person { required string name = 1; required int32 id = 2; optional string email = 3; repeated PhoneNumber phone = 4; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } } message AddressBook { repeated Person person = 1; }

y estoy tratando de serializarlo con:

Person john = Person.newBuilder() .setId(1234) .setName("John Doe") .setEmail("[email protected]") .addPhone( Person.PhoneNumber.newBuilder() .setNumber("555-4321") .setType(Person.PhoneType.HOME)) .build();

byte [] serialized = john.toByteArray ();

y obtengo "java.lang.UnsupportedOperationException: se supone que esto está anulado por las subclases".

Gracias;