protostuffでエンコード・デコードする際の問題

259
NO IMAGE

問題点

protostuffで、エンコード・デコードの際に属性の順序が違う場合があり、エンコードする前の定義とデコード後の定義に違いが発生してしまう可能性がある。

解決策

問題を解決するには、属性の順番を独自に制御できればよい。その為には以下の2つの方法が考えられる。

  • 方法①:登録したい型(Class)分io.protostuff.Schemaを実装した独自のSchemaを作る
    ※この方法は、登録したい型(Class)分作らないといけないため手間がかかる。手順はprotostuffのサイト参照。

  • 方法②:io.protostuff.runtime.IdStrategyを拡張した独自のIdStrategyを作る
    ※この方法は、一度作ってしまえば、その後登録したい型(Class)が増えても特に何もする必要はない。手順は以下のとおり。

    1. io.protostuff.runtime.IdStrategyを拡張したIdStrategyを作り、newSchemaをオーバーライドして独自に属性の順番を制御したio.protostuff.runtime.RuntimeSchemaを生成し返す。
    2. IdStrategy.Factoryを実装したIdFactoryを作り、1で作ったIdStrategyを返すようにする
    3. システムプロパティに"protostuff.runtime.id_strategy_factory"で、2で作ったIdFactoryのクラスを登録する。