プライベート 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();
}
}
}