1

プライベート final フィールドとパブリック getter メソッドを持つ不変のドメイン オブジェクトが多数あります。Java の MessagePack 実装を使用してシリアル化することは可能ですか?

@Message注釈が public フィールドのみをサポートしていることは知っていますが、@MessagePackBeansおよび@OrdinalEnum注釈を使用したいと考えていました。オブジェクトの 1 つをシリアル化しようとすると、呼び出しで例外は発生しません.writeが、シリアル化は失敗します。以下に完全な例を含めました。

私が間違っていることはありますか、それとも MessagePack の使用をあきらめるべきですか?

import java.io.IOException;
import org.msgpack.MessagePack;
import org.msgpack.annotation.MessagePackBeans;
import org.msgpack.annotation.OrdinalEnum;

public class MsgPackTest {

  @OrdinalEnum
  public static enum MyEnum {
    A;
  }

  @MessagePackBeans
  public final static class MyObject {
    private final String myString;
    private final MyEnum myEnum;

    public MyObject(String myString, MyEnum myEnum) {
      this.myString = myString;
      this.myEnum = myEnum;
    }
    public String getMyString() {
      return myString;
    }       
    public MyEnum getMyEnum() {
      return myEnum;
    }
  }

  public static void main(String[] args) {
    final MyObject obj = new MyObject("abc", MyEnum.A);
    final MessagePack msgPack = new MessagePack();
    try {
      final byte[] bytes = msgPack.write(obj); //bytes = [-112]
      MyObject result = msgPack.read(bytes, MyObject.class);
      //Unreachable code - MessageTypeException thrown
      System.out.println("Success: " + result);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
4

0 に答える 0