0 Replies Latest reply on Jan 11, 2019 3:15 AM by dvlinh

    ProtoStream can't generate correctly proto file for byte[] field


      Hi again,


      I think that I encountered another bug in ProtoStream.


      I have an object with a field of type byte[]. If I only annotate the field with @ProtoField like this:


          private byte[] image;
          @ProtoField(number = 20)
          public byte[] getImage() {
              return image;
          public void setImage(byte[] image) {
              this.image = image;


      In the proto file generated, this field will be declared:

      repeated int32 image = 20;

      This works but the serialization format is much bigger than the original value.


      What I expected is:

      optional bytes image = 20;


      So I tried to give the type hint:

          @ProtoField(number = 20, type = Type.BYTES)
          public byte[] getImage() {
              return image;

      I've got this error:

      Exception in thread "main" org.infinispan.protostream.annotations.ProtoSchemaBuilderException: Incompatible types : byte vs BYTES

          at org.infinispan.protostream.annotations.impl.ProtoMessageTypeMetadata.getProtobufType(ProtoMessageTypeMetadata.java:511)


      I then tried to add javaType:

          @ProtoField(number = 20, type = Type.BYTES, javaType = byte[].class)
          public byte[] getImage() {
              return image;

      The proto generated:

      repeated bytes image = 20;

      This should not be "repeated", and there's also another error when generating the marshaller:

      protostream.javassist.CannotCompileException: [source error] syntax error near "     [B v = $2.readBytes();"

      Could you fix this bug or could I make a pull request to fix it ?